mail-2.6.4/000077500000000000000000000000001267453234600124615ustar00rootroot00000000000000mail-2.6.4/.gitignore000066400000000000000000000003341267453234600144510ustar00rootroot00000000000000/.bundle /.ruby-version /.rvmrc /bin /coverage /Gemfile.lock /gems /mail-*.gem /mail.tmproj /rdoc /spec/fixtures/emails/failed_emails/ /tags /tmp *.rbc *.swp .idea .rbx /.idea /.rbenv-vars /.ruby-version gemfiles/*.lock mail-2.6.4/.travis.yml000066400000000000000000000041111267453234600145670ustar00rootroot00000000000000language: ruby rvm: - 1.8.7 - 1.9.2 - 1.9.3 - 2.0.0 - 2.1.2 - 2.2.3 - 2.3.0 - ruby-head - jruby - jruby-head - rbx-2 gemfile: - gemfiles/mime_types_1.16.gemfile - gemfiles/mime_types_2.0.gemfile - gemfiles/mime_types_2.1.gemfile - gemfiles/mime_types_2.2.gemfile - gemfiles/mime_types_2.3.gemfile - gemfiles/mime_types_2.4.gemfile - gemfiles/mime_types_2.5.gemfile - gemfiles/mime_types_2.6.gemfile - gemfiles/mime_types_2.6_columnar.gemfile - gemfiles/mime_types_2.99.gemfile - gemfiles/mime_types_2.latest.gemfile - gemfiles/mime_types_3.0.gemfile - gemfiles/mime_types_edge.gemfile sudo: false bundler_args: --path vendor/bundle script: bundle exec rake env: - RUBYOPT=-w before_install: - bundle config --local without local_development matrix: exclude: - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.0.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.1.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.2.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.3.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.4.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.5.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.6.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.6_columnar.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.99.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_2.latest.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_3.0.gemfile - rvm: 1.9.2 gemfile: gemfiles/mime_types_3.0.gemfile - rvm: 1.9.3 gemfile: gemfiles/mime_types_3.0.gemfile - rvm: jruby gemfile: gemfiles/mime_types_3.0.gemfile - rvm: 1.8.7 gemfile: gemfiles/mime_types_edge.gemfile - rvm: 1.9.2 gemfile: gemfiles/mime_types_edge.gemfile - rvm: 1.9.3 gemfile: gemfiles/mime_types_edge.gemfile - rvm: jruby gemfile: gemfiles/mime_types_edge.gemfile allow_failures: - rvm: ruby-head # green, but unstable - rvm: jruby-head # green, but unstable fast_finish: true mail-2.6.4/Appraisals000066400000000000000000000015271267453234600145100ustar00rootroot00000000000000appraise "mime-types-1.16" do gem "mime-types", "~> 1.16" end appraise "mime-types-2.0" do gem "mime-types", "~> 2.0.0" end appraise "mime-types-2.1" do gem "mime-types", "~> 2.1.0" end appraise "mime-types-2.2" do gem "mime-types", "~> 2.2.0" end appraise "mime-types-2.3" do gem "mime-types", "~> 2.3.0" end appraise "mime-types-2.4" do gem "mime-types", "~> 2.4.0" end appraise "mime-types-2.5" do gem "mime-types", "~> 2.5.0" end appraise "mime-types-2.6" do gem "mime-types", "~> 2.6.0" end appraise "mime-types-2.6-columnar" do gem "mime-types", "~> 2.6.0", :require => 'mime/types/columnar' end appraise "mime-types-2.99" do gem "mime-types", "~> 2.99.0" end appraise "mime-types-3.0" do gem "mime-types", "~> 3.0.0" end appraise "mime-types-edge" do gem "mime-types", :github => "mime-types/ruby-mime-types" end mail-2.6.4/CHANGELOG.rdoc000066400000000000000000001200541267453234600146230ustar00rootroot00000000000000== HEAD == Version 2.6.4 - Wed Mar 23 08:16 -0700 2016 Jeremy Daer Features: * #772 - Normalize encoding matchers (grosser) * #775 - Avoid failed encodings / stop bad charsets early (grosser) * #782 – Make the gem compatible with Rubinius (robin850) * #865 - Allow a body with an invalid encoding to be round tripped (kjg) * #866 - Support decoding message bodies with non-Ruby-standard charsets (jeremy) * #868 - Use the Ruby19.charset_encoder when decoding message bodies (kjg) * #872 - Low-level option to include BCC field in the encoded message (grossadamm) * #901 - Allow mail.text_part = '…' and mail.html_part = '

' (taavo) * #924 - Matcher for having attachments (schepedw) Performance: * #956 - Use native String#encode for CR/LF conversion (carsonreinke) * #970 - Support Ruby 2.3+ frozen string literals (twalpole) Bugs: * #719 - Fix to not extract header content that looks like its field name (kjg) * #789 - Fix encoding collapsing not dealing with multiple encodings in 1 line (grosser) * #808 - Mail::Field correctly responds_to? the methods of its instantiated field (thegcat) * #849 - Handle calling Part#inline? when the Content-Disposition field couldn't be parsed (kjg) * #874 – Stay under 1000-char SMTP line length limits (pushrax) * #877 - Make Mail::Field == other take the field value into account (kjg) * #907 - Mail::ContentDispositionField should work with nil value (kjg) * #910 - Mail::Address should handle b_value_encoded local and domain parts (kjg) * #918 - Account for possibility of absent delivery-status headers (kjg) == Version 2.6.3 - Mon Nov 3 23:53 +1100 2014 Mikel Lindsaar * #796 support uu encoding (grosser) == Version 2.6.2 (Unreleased) - Wed Oct 22 13:42 -0500 2014 Benjamin Fleischer Performance: * #681 - fewer hotspot object allocations (srawlins) * #815 - autoload parsers for load-time speed and memory usage (grosser) Bugs: * #736 - Mail.new copes with non-UTF8 messages marked as UTF8 (jeremy) == Version 2.6.1 - Sun Jun 8 15:34 +1100 2014 Mikel Lindsaar Features: * Silence warnings on loading ragel-generated parsers (bf4) == Version 2.6.0 - Mon Jun 2 22:49 +1100 2014 Mikel Lindsaar Features: * Allow interceptors and observers to be unregistered (zuhao) * Added feature to find the mail in uid (taketin) * Save settings passed to TestMailer#new (svanderbleek) * Allow the setting of envelope from directly (jeremy) * Accept other IETF/IANA-registered Content-Types and Content-Transfer-Encodings (jeremy) * Alias shift-jis charset to Shift_JIS Ruby encoding (jeremy) * Add support for ks_c_5601-1987 charset, aliased to CP949 Ruby encoding (jeremy) * Don't allow colons in header names (jeremy) * Can assign arrays of Message-IDs to References and In-Reply-To (jeremy) * Setting the html_ or text_part sets a default text/html or text/plain content type (jeremy) * Setting the html_ or text_part to nil removes it (jeremy) * Addresses without a parsable email or display name still format as their raw text (jeremy) * Close pull request 504 - Alias GB2312 charset to GB18030 Ruby encoding (bpot) * Close pull request 399 - Accept :ca_path and :ca_file options for SMTP delivery (ndbroadbent) * Close pull request 389 - Don't add superfluous message headers to MIME parts (djmaze, jeremy) Performance: * Migrate to RAGEL based parser, awesome work by (bpot) * Performance improvements for people parsing email headers (ConradIrwin) * Close pull request 488 - Speed up field construction & comparison (bpot) Bugs: * Fix for when content looks like field name (kjg) * Don't change original when you change a copy (TylerRick) * Don't include separating semicolon in paramter value when sanitizing (bpot) * Fix fencepost encoding problem with binhex strings and only one token (drasch) * Fix sendmail delivery to addresses with a leading hyphen (lifo, jeremy) * Correctly format mbox From headers per RFC4155 (bpot, jeremy) * Fix bogus '=' at the end of some quoted-printable messages (jeremy) * Shouldn't be fooled into encoding strings on 1.8 by unrelated Encoding constant (emiellohr, jeremy) * Header encoding should be US-ASCII, not the default external encoding (jeremy) * Address elements should return decoded display names by default (jeremy) * Fix up tests that depend on utf-8 external encoding; read fixtures as binary (jeremy) * Capture stderr from Sendmail and Exim deliveries (jeremy) * RFC2822 quoted_string content may be empty (jeremy) * Calling #to_s on a field with a nil value returns an empty string instead of nil (jeremy) * The Received header may contain zero name/value pairs, qmail-style (jeremy) * Fix that setting an attachment with a :mime_type and :encoding would override the :encoding (jeremy) * Fix that declaring an html_part but no text_part would use multipart/alternative anyway (jeremy) * Close pull request 508 - Don't add an extra CRLF to MIME parts; split MIME parts on correct CRLF boundaries (Aalanar) * Close pull request 506 - Escape backslashes in quoted strings (ConradIrwin) * Close pull request 496 - Correctly handle quoted-printable line breaks (jeremy) * Close pull request 493 - Repair misencoded quoted-printable line breaks (jeremy) * Close pull request 487 - Extract comments from group email addresses (bpot) * Close pull request 481 - Correctly quote filename attributes (bpot) * Close pull request 480 - Support mixed encodings in a single header body (adamvaughan) * Close pull request 471 - Fix Ruby 1.8 build when UTF16/32 default to little-endian (kennyj) Coping with third-party bugs: * Parse multipart boundary from Content-Type headers containing extra semicolons (jeremy) * Close pull request 389 - Only add Content-ID to inline attachments to appease Outlook (djmaze, jeremy) Housekeeping: * Add development gem dependency on rdoc (jeremy) * Refresh Bundler dependencies & setup (jeremy) * Remove i18n dependency and last vestiges of activesupport dependency in specs (jeremy) * Clarify that Sender is a single address, not an address list (jeremy) * Add an MIT-LICENSE file to make licensing clear & obvious; update to 2013 (jeremy) * Close pull request 501 - Tighten up header/body whitespace splitting (ConradIrwin) * Close pull request 499 - Clean up some dead code (ConradIrwin) * Close pull request 489, 495 - Docs typos (JackDanger, francois) * Close pull request 485 - Be explicit about unsupported address parsing (bpot) * Close pull request 484 - Remove #tree specs in preparation for deprecation removal (bpot) * Close pull request 482 - Update address field specs to reflect to #initialize API (bpot) * Close pull request 475 - Shush warning on Object#blank? redefinition (amatsuda) * Close pull request 472 - Clean up UTF8/UTF-8 internals (kennyj) == Version 2.5.3 - Sun Dec 4 15:52:00 +1100 2012 Mikel Lindsaar * Close pull request 468 - Remove debug output to STDOUT (tadman) * Fix up spec warnings * Remove un needed require * Ensure spec_helper constants only defined once * Use stub against time instead of DateTime to avoid double redefinition error == Version 2.5.2 - Sun Nov 18 15:01:00 +1100 2012 Mikel Lindsaar * Removing double loading of treetop parsers to remove warnings * Making parsers auto compile on spec suite and load in production code to avoid error that caused yank of 2.5.0 * Reapply pull request 443 - CC fields with semicolon are now parsed right (paulwittmann) == Version 2.5.1 - Sun Nov 18 14:01:00 +1100 2012 Mikel Lindsaar * Yanked 2.5.0 * Reverted pull request 443 - CC fields with semicolon are now parsed right (paulwittmann) == Version 2.5.0 - Sun Nov 18 12:20:00 +1100 2012 Mikel Lindsaar Features: * Close pull request 406 - Add Mail#eager_autoload! to load all autoloaded files on demand (bpot) * Close pull request 461 - Allow string as delivery_method (skyeagle, radar) * Close pull request 407 - Do not require Net::IMAP or Net::POP if they're already loaded (bpot) * Close pull request 400 - Raise exception if delivery values or from values are missing completely from an email that is getting delivered (dmathieu) * Close pull request 397 - Support dots in local part of the addresses (eac) * Close pull request 477 - Fixed handling content_type with superfluous spaces (ledermann) * Close pull request 451 - Ignore nil in addresses so things do not blow up when e.g. a user had no email (grosser) * Close pull request 362 - Enable TLS in Ruby 1.8 (kingargyle) * Close pull request 358 - Fix Mail::CommonAddress#value=, Mail::CommonAddress#<< and Mail::Encodings.encode_non_usascii (mrkn) * Close pull request 350 - Makes mail Header object ennumerable (ged) Performance: * Close pull request 369 - Mail::Header#charset is called pretty often during header parser work (bogdan) * Close pull request 368 - Improve existing code by moving some objects to contstant instead of constructing them over and over again. (bogdan) * Close pull request 366 - Headers parsing performance optimization (bogdan) * Close pull request 365 - Add maximum_amount of parsed headers configuration parameter (bogdan) Bugs: * Close pull request 444 - Fix typo in spec (cczona) * Close pull request 439 - Fix Ruby 1.9 behaviour to match 1.8.7 behaviour on ignoring invalid or undefined characters (ochko) * Close pull request 430 - Unstructured field converts to string before calling encoding on it (brupm mikel) * Close pull request 424 - Use String#to_crlf instead of String#gsub (okkez) * Close pull request 429 - Fix an obvious bug in exim delivery_method (dskim) * Close pull request 425 - Remove Gemfile.lock from generated gem (kbackowski) * Close pull request 414 - Fix typo on "ignoring" (derwiki) * Close pull request 405 - Fix stack overflow (RegexpError) triggered by large emails with an envelope (bpot) * Close pull request 402 - Prevent InReplyTo, Keyword, References or ResentMessageId fields from generating lines longer than 998 chars (pplr) * Close pull request 391 - Fixed failed attachment parsing when file name in headers contains spaces and is not wrapped in quotes (danieltreacy) * Close pull request 385 - Fix Multibyte::Chars#upcase/downcase (technoweenie) * Close pull request 384 - copy dat unicode over from active support (technoweenie) * Close pull request 380 - Split strictly on MIME boundary lines (ConradIrwin) * Close pull request 277 - Fix specific email decoding failure example (yalab) * Close pull request 361 - Support 8bit encoding for ruby 1.9 (bogdan) * Close pull request 346 - Fix two bugs of TestRetriever (ermaker) * Close pull request 337 - Make the behavior of value_decode the same between Ruby 1.8 and Ruby 1.9. (kennyj) * Close pull request 336 - Fix more warning: possibly useless use of == in void context (kennyj) * Close pull request 293 - make charset and mime type more resliant to bad header values (kmeehl) * Fix failing spec Issue 453 on Ruby 1.9.3 * Fix mail reading: don't raise invalid byte sequence in UTF-8 when reading non-UTF-8 emails (mreinsch) * Close pull request 353 - define NilClass#blank? only if not defined yet (amatsuda) * Close pull request 357 - Fixes #349 an inverted condition on imap open read_only (felixroeser) * Remove duplicated line feed from regexp * Remove unused variable * Updated IMAP documentation * Tweak publisher == Version 2.4.4 - Wed Mar 14 22:44:00 +1100 2012 Mikel Lindsaar * Fix security vulnerability allowing command line exploit when using file delivery method == Version 2.4.3 - Tue Mar 6 19:38:00 UTC 2012 Mikel Lindsaar * Fix security vulnerability allowing command line exploit when using exim or sendmail from the command line * Change Mail#deliver! to also inform the interceptors * Encodings.value_decode(str): Treat lines with mixed encoding correctly when the line ends with a plain text part. == Version 2.4.1 - Thu Jan 19 13:49:34 UTC 2012 Mikel Lindsaar * Fix non ascii character folding problems * Handle multipart mail in Mail::Message#to_yaml / #from_yaml * More warning fixes * Normalize the Parse Error class and messages * Fix for Mail::Encodings.unquote_and_convert not handling unquoted characters mixed in between quoted strings * Updated treetop to latest version, specs now run approximately 25-30% faster! * Version bump to 2.4.1 and gem release == Version 2.4.0 - Sun Jan 15 18:15:56 UTC 2011 Mikel Lindsaar * Speed up reading of messages by about 12x * Added Message#without_attachments! that removes all message's attachments * Added shoulda-style RSpec matchers * Added support for @ in display name * Added support for the :tls and :ssl options * Added UTF-16 and UTF-32 support * Added Exim as it's own delivery manager * Added Ruby 1.9.3 compatibility * Fix for Sendmail return-path escaping * Fix for alias for SJIS was changed from shift_jis to windows-31J in Ruby 1.9.3 * Fix for undefined method 'constantize' error when no ActiveSupport loaded * Fix Mail::Field#== comparison * Fixed Regexp warning: character class has duplicated range * Fixed encoding non-latin names in addresses * Fixed issue with non-7bit attachment filenames * Now define String#blank? only if not defined yet * Decoding text parts using charset from Content-Type field * Per RFC 5322, do not accept emails with consecutive dots * Bunch of bug fixes from contributed pull requests * Travis CI setup and passing on 6 rubies * Upgrade RSpec to 2.8.0 * Lots of warnings fixed * Version bump to 2.4.0 and gem release == Version 2.3.0 - Tue Apr 26 09:59:56 UTC 2011 Mikel Lindsaar * Remove ActiveSupport from the dependencies, load Active Support if present, or use internals if not * Created v2.2 branch for all 2.2 related commits * Update activesupport require to use inflector - closes #217 * Version bump to 2.3 and gem release == Tue Apr 26 06:18:19 UTC 2011 Mikel Lindsaar * Fixed charset warning issue with multipart messages - https://github.com/arvindsv * Version bump to 2.2.18 and gem release == Wed 20 Apr 2011 15:16:20 UTC Mikel Lindsaar * Mail::Field.new("Subject: foobar", 'iso-2022-jp') does not set charset - https://github.com/yalab == Tue Apr 19 00:20:54 UTC 2011 Mikel Lindsaar * Fixed an exception with nil in Reply-To and References field - https://github.com/dcormier * Version bump to 2.2.17 and gem release == Sat Apr 16 12:57:27 UTC 2011 Mikel Lindsaar * Added support for open SMTP connections and returning the Mail server's response - https://github.com/spiegela * RE: not appended to subject when replying to a reply - https://github.com/prateekdayal * Support not ascii compatible charset mail send - https://github.com/yalab * Fix for issue 208 "mail.body after mail.add_file truncates message body" - https://github.com/glongman * Handle bad subject encoding (or ":invalid => :replace" is ineffective for utf-8 to utf-8 encoding) - https://github.com/choonkeat * Handle blank Received header field - https://github.com/bcantin * Handle part with missing content type - https://github.com/bcantin * Handle a "<>" Return field - https://github.com/bcantin * Performance improvements for 1.9 - https://github.com/nobu * Fix heavy CPU issues when messages are missing a space - https://github.com/scsmith * Tighten up allowed encodings - https://github.com/scsmith * Added to_yaml & from_yaml (as well as to_hash & from_hash) - https://github.com/srushti * Fix up some comments - https://github.com/takahashim * Version bump to 2.2.16 and gem release == Wed 26 Jan 2011 02:23:09 UTC Mikel Lindsaar * Update addresses passed into sendmail to escape them (Andy Lindeman) * Version bump to 2.2.15 and gem release == Mon 3 Jan 2011 12:48:59 UTC Mikel Lindsaar * Update field_spec to handle encodings, closes issues 44 and 120 (Luis Lopez) * Version bump to 2.2.14 and gem release == Mon 3 Jan 2011 00:09:27 UTC Mikel Lindsaar * Use default IANA port on the IMAP retriever_method (Adrian Silva) * Updated README to reflect latest ruby versions we test against (mikel) * Only remove tlsconnect if it exists (mikel) == Thu 23 Dec 2010 09:15:58 UTC Mikel Lindsaar * Added backport fix for net/smtp bug (Aaron Patterson) * Changed "Mail#text_part" so that it does not return a plain text attachment (Anton Mironov) * Added in rescue blocks for badly formatted dates as well as encoding problems (Karl Baum) * Fixed warning errors of duplicated regular expressions (Kouhei Sutou) * Removed duplication from Regex's containing [\w\d]+ as \w contains \d (mikel) * Add authentication selection for imap retriever (Björn Albers) * Removing warning on @name not being initialized (mikel) * Version bump to 2.2.13 and gem release == Fri 10 Dec 2010 09:06:49 UTC Mikel Lindsaar * Fixing problems with multibyte filenamed attachment (amatsuda) * Providing IMAP uid and imap object as options to IMAP calls (dball) * Fixing filename for windows (mikel) == Sun Dec 5 02:24:55 UTC 2010 Mikel Lindsaar * Updating requirement on i18n to be more relaxed for now until we nuke ActiveSupport dependency (Mikel) * Version bump to 2.2.12 and gem release == Tue 30 Nov 2010 00:36:11 UTC Mikel Lindsaar * Allow address lists to handle and ignore empty addresses (Donald Ball) * Allow address lists to handle repeating strings of commas (Donald Ball) * Noting pending test for malformed folding whitespace (Donald Ball) * Adding spec to test error email for missing addresses in to header (Mikel) * Bumping i18n dependency to ~> 0.5.0 * Version bump to 2.2.11 and gem release == Wed 17 Nov 2010 00:43:31 UTC Mikel Lindsaar * Added test retriever and updated documentation (Donald Ball) * Fix test suite to work in any timezone (Donald Ball) * Added dependency for tlsmail for Ruby 1.8.6 (Donald Ball) * Added new feature, replies for mail message * Fix references header to use CFWS instead of comma as the separator per RFC2822 * Version Bum to 2.2.10 and pushed. == Mon Nov 15 13:04:41 UTC 2010 Mikel Lindsaar * Add find_and_delete convenience method for consistency with POP3, document delete_after_find option (Donald Ball) * Documenting the openssl_verify_mode setting (Donald Ball) * Added ruby-1.8.6 back into the list of tested platforms (Donald Ball) * Relax i18n dependency until we remove active support requirement * Version Bump to 2.2.9.1 to include new i18n dependency == Tue Oct 26 07:14:36 UTC 2010 Mikel Lindsaar * Version Bump to 2.2.9 and tag * Updating Gemfile and gemspec to include i18n and sync dependency versions * Added work from Kendall Gifford closing issues #104, #107 and #117 * Always encode mailbox names with UTF-7 (github: fasta) == Tue Oct 26 06:43:17 UTC 2010 Mikel Lindsaar * Added updates from Donald Ball (github: dball) to improve 1.8.6 support * Added patch from Ryan Bigg (github: ryanb) for #mark_for_delete == Thu Oct 7 15:44:31 UTC 2010 Mikel Lindsaar * Version Bump to 2.2.7 * Release 2.2.7 == Thu Oct 7 15:42:57 UTC 2010 Mikel Lindsaar * Added fix for Windows using 'rb' flags, thanks to Luis Lavena and dzhang for pointing it out * Fixed up Rakefile to require bundler to run specs and give more appropriate errors messages if this fails == Tue Sep 28 14:59:03 UTC 2010 Mikel Lindsaar * Merged POP3 delete support work from Michael Prendergast * Merged IMAP support work from Fabian Staubli == Mon Sep 13 02:31:21 UTC 2010 Mikel Lindsaar * Replace some missing documentation * Version bump to 2.2.6.1 == Sat 11 Sep 2010 05:13:36 UTC Mikel Lindsaar * Fixed parsing an email with an empty In-Reply-To header (Reported by Eugene Pimenov) * Adding address spec for groupname+domain.com@example.com format emails * Version bump to 2.2.6 == Sat Sep 11 01:56:59 UTC 2010 Mikel Lindsaar * Added new way to do versioning for rubygems * Added additional specs for Content-Disposition: inline which are not being encoded correctly - Shawn Pyle * Make sure Mail::Message#attachment? returns true/false - Simone Carletti * Replace hard-coded references to Mail with more generic self references to allow easier inheritance (closes #61) - Simone Carletti * Force encoding on Regexp for Ruby 1.9 to avoid encoding conflicts - Golubev Pavel * Added lazy evaluation to message body: body is not parsed until need. It greatly improves performance with big mails if you don't need to read the body (yet) * Added Mail.read_from_string as an explicit method (mcansky) * Fixed bounce detection for multipart reports that contain a human readable report status part * Closed Issue #65 found (incredibly) by quetz - major Kudos for bug hunting * Fixed missing trailing CRLF in content type field - Closes issue #57 - Kudos to Henry Flower for finding it * Version bump to 2.2.5.2 == Sat Sep 11 01:32:13 UTC 2010 Mikel Lindsaar * Closed issue #58 - Content Type not parsing unless lower case. * Version bump to 2.2.5.1 == Thu 17 Jun 2010 22:13:18 UTC Mikel Lindsaar * Added Mail::POP3.delete_all, including specs (Martijn Storck) * Lars Pind updates on header folding * Version bump to 2.2.5 == Tue Jun 8 01:55:21 UTC 2010 Mikel Lindsaar * Added inline attachment support to mail (mikel) == Mon Jun 7 18:00:39 UTC 2010 Mikel Lindsaar * Updating versioning so we only have one source, VERSION.yml (mikel) * Changed activesupport dependency to 2.3.6 to fix #53, #64, and def #67. (Artem Titoulenko) * Fixing typo in break_down_to.rb. (mikel) == Mon Jun 7 18:07:16 UTC 2010 Mikel Lindsaar * fixing a typo when generating docs. (Andrew Bloom) * Changing \r\n\t to \r\n\s throughout mail (mikel) * Handle multiple quoted words in Encodings.unquote_and_convert_to (Eric Kidd) * Ruby 1.9: mark source encoding so it's usable with -Ks, -Ke, etc (Jeremy Kemper) * Add #include? to mail body for convenience (Maxim Chernyak) * Use Mail::TestMailer.deliveries in README example (John Trupiano) * Allow bundler to automatically build a gem directly from git (Eric Kidd) == Sun Apr 11 07:49:15 UTC 2010 Mikel Lindsaar * Lots of updates on encoding and decoding of headers and unstructured fields. This is now a lot cleaner and nicer. Also more predictable. * Merged encoding branch back into head * Version bump to 2.2.0 * Tagged 2.2.0 == Sun Apr 4 06:41:46 UTC 2010 Mikel Lindsaar * Created non-ascii header auto encoding for address fields and unstructured fields * Changed default behaviour of mail, if you specify a charset, it will use that charset regardless of what is in the body. Previously, if the body was all US-ASCII, it would set the charset to US-ASCII in preference. * Many internal version jumps from 2.1.5.3 => 2.1.5.8 - unreleased development versions == Mon 29 Mar 2010 07:04:34 UTC Mikel Lindsaar * Version bump to 2.1.5.3 * No longer depend on vendor'd treetop as treetop now has optional loading of parts of the library * Change treetop dependency to 1.4.5 == Sun 28 Mar 2010 10:31:33 UTC Mikel Lindsaar * Version bump to 2.1.5.2 * Fixed up preserve case in header fields when assigned from a message closes issue #46 == Sun 28 Mar 2010 09:02:20 UTC Mikel Lindsaar * Version bump to 2.1.5.1 * Fixed net/pop3.rb regression for Ruby 1.8.6 * Merged in Jeremy Kemper's updates: * Bump vendored treetop to 1.4.4 * Use Mikel's treetop for cucumber workaround * Use LOAD_PATH for spec_helper instead of relative requires * Force treetop from git so cucumber doesn't pull in old version == Sun Mar 28 07:01:07 UTC 2010 Mikel Lindsaar * Version bump to 2.1.5 * Changed guess encoding to short circuit to binary if the mime type is unknown, should be safe * Renaming spec to match the file for attachment_lists.rb * Adding Message#decoded returns Message#body#decoded if the message is not multipart == Sun Mar 28 02:55:42 UTC 2010 Mikel Lindsaar * Version bump to 2.1.4 == Sun Mar 28 00:26:27 UTC 2010 Mikel Lindsaar * Merged in Jeremy/treetop to vendored treetop * Merged in nathansobo/treetop to vendored treetop * Merged in pzbowen/mail into mail - Adds body auto encoding - awesome work * Fixed content-transfer-encoding parser to be more compliant per RFC, also now handles trailing semi-colons correctly * Fixed content-transfer-encoding parser to handle weird "from the wild" misspellings * Added message.errors, header.errors arrays, returns array of [field_name, value, error_object] for each field that failed to parse * Removed bundler require from Rakefile == Sun Mar 17 03:03:03 UTC 2010 Mikel Lindsaar * Keep header name case when failing to unstructured field == Wed Feb 24 09:14:56 UTC 2010 Mikel Lindsaar * Fixed multiaddress bounce messages crashing when calling .bounced? Now just take the first report and return that. * Closes issue 38 - final_recipient method give problem when one bounce email for multiple email ids * Fixing up TODO and Docs == Sun Mar 22 03:24:15 UTC 2010 Mikel Lindsaar * Version bump to 2.1.3 == Thu Jan 28 00:25:02 UTC 2010 Mikel Lindsaar * Added TMM1's patch to not raise errors if a email is not multipart/report * Added html_part and text_part now return the first text/html or text/plain part they find. Order is from top to bottom of the email, all parts, flattened. * Cleaning up register_interceptor and register_observer including documentation * Renamed #register_for_delivery_notification to #register_observer * Renamed #register_for_delivery_interception to #register_interceptor * Adding spec to check for folding of non ASCII words that have been encoded * Updating Message#inspect to be a bit more friendly... it is for us mere mortals after all * Version bump to 2.1.2 == Sun Jan 28 02:59:34 UTC 2010 Mikel Lindsaar * Removed old method of setting delivery_method == Mon Jan 25 11:36:13 UTC 2010 Mikel Lindsaar * Added ability for address fields to init on an array instead of just a string. * Version bump to 2.1.1 == Mon Jan 25 10:36:33 UTC 2010 Mikel Lindsaar * Now passes a block to the delivery handler, which can just call yield if it want's Mail to just do it's normal delivery method * Moved Mail.deliveries into Mail::TestMailer.deliveries. Now only gets mail appended to it if you are sending with the :test delivery_method (only for testing) * Version bump to 2.1.0 == Mon Jan 25 01:44:13 UTC 2010 Mikel Lindsaar * Change :deliver! to deliver a mail object, bypassing the :perform_deliveries and :raise_delivery_errors flags, also does not append the mail object to Mail.deliveries, thus the ! (dangerous). The intended use for :deliver! is for people wanting to have their own delivery_handler (like ActionMailer uses) to track and handle delivery failures. * Added :delivery_handler to Message. Allows you to pass an object that will be sent :deliver_mail(self) by the Mail::Message instance when it is sent :deliver and bypasses the usual delivery method. * Changed :perform_deliveries flag to be more consistent with it's name, mail will not append itself to the Mail.deliveries collection if :perform_deliveries is false == Sat Jan 23 23:49:50 UTC 2010 Mikel Lindsaar * Version bump to 2.0.5 * Added :raise_delivery_errors to Mail::Message, if set to false will silently rescue all errors raised by the delivery methods, set to true by default == Sat Jan 23 23:28:42 UTC 2010 Mikel Lindsaar * Version bump to 2.0.4 * Added :perform_deliveries to mail, will not actually call deliver on the delivery method if this is set to false, set to true by default. * Added @delivery_notification_observers to mail messages, you can register an observer with mail by calling mail.register_for_delivery_notification(observer) and then when mail is told to :deliver it will call your observer with observer.delivered_email(self). It will call your observer if it actually performed the delivery or not (that is, irregardless of the :perform_deliveries flag) * Added ability to overwrite the Mail.deliveries store with an object of your choice instead of just an array, this is a good way to find out if something actually got delivered as if :perform_deliveries is false, this collection will not get the mail message appended == Sat Jan 23 05:32:53 UTC 2010 Mikel Lindsaar * Version bump to 2.0.3 * Made body.sort_parts! recursive, to do the entire body * Added ability to use << on the results returned by the various address fields, ie, mail.to << 'new@address' now works * Message now adds multipart/mixed as the content type if nothing is set and there are parts to the message * Added #display_names and #addrs to all address fields. #addrs returns the actual Mail::Address object for each address in the field. * Body should call to_s on given input... incase someone gave it an IO.readlines result (Array) * == Thu Jan 21 05:27:17 UTC 2010 Mikel Lindsaar * Version bump to 2.0.2 * Major change to attachments, add_file now only accepts {:filename => 'full/path/to/file.png'} or {:filename => 'file.png', :content => 'string of file content'} you can also now do mail.attachments['filename.png'] = File.read('path/to/file.png') which is nice too! == Fri Jan 15 09:20:51 UTC 2010 Mikel Lindsaar * Rewrote all network classes to not use singletons. Means different Mail::Message objects can have different delivery methods. * Added examples for how to send via GMail, MobileMe, Sendmail, File etc. * Version bump to 2.0.0 as Network API changed drastically, now not a singleton class. * Fixed that return-path should only return one address == Thu Jan 14 10:41:22 UTC 2010 Mikel Lindsaar * Version update to 1.6.0 - API change on mail.address_fields to always return arrays * Updated all message.address_field methods to always return arrays, so mail.from #=> ['one@address.com'] now, is least surprise * Updated handling of empty group lists so it didn't crash == Thu Jan 12 10:41:47 UTC 2010 Mikel Lindsaar * Version 1.5.3, handling invalid input on fields. Highly recommended update * Updated fields to always try parsing the given data (unless blank). This allows mail to catch invalid input and return UnstructuredFields. Makes mail a lot more resistant to invalid input. == Fri 8 Jan 2010 00:00:08 UTC Mikel Lindsaar * Version bump to 1.5.2 == Fri 8 Jan 8:55:49 2010 +1100 Mikel Lindsaar * Updated Sendmail and SMTP delivery methods to use return-path if present * Fix up a lot of content-type parsing problems * Updating compat listing * Moving error emails into one directory * Moving error emails into one directory * Initializing @tls variable to remove warnings * Moved default corpus directory * Fixed up git ignore file == Thu 6 Jan 2010 23:59:29 UTC Mikel Lindsaar * Added compatibility list to Readme.rdoc * Fixing encoding of return path to be per RFC 2822, adding angle brackets around the addr_spec * Specs covering return path setting and preserving == Thu 5 Jan 2010 23:59:48 UTC Mikel Lindsaar * Moving the require for tlsmail for Ruby 1.8.6 into mail.rb == Sun Jan 3 00:08:06 UTC 2010 Mikel Lindsaar * Version bump to 1.5.0 * Major API change in Message#field_name. This WILL break your applications that use Mail. Message#field_name now returns good, intelligent, default values. You can still access the field object by calling Message#[:field_name] or Message#['field_name']. == Sat Jan 2 04:12:53 UTC 2010 Mikel Lindsaar * Message-ID, Content-ID, References et al, now return the default value of the message ID without the angle brackets, as per RFC 2822, "Semantically, the angle bracket characters are not part of the msg-id; the msg-id is what is contained between the two angle bracket characters." * Message class now has getter and setter methods for all the supported field types explicitly. This allows us to return a "default" value for all fields. * All address fields, when called from Message#to or Message#from or the like, return either a string of the address spec (mikel@test.lindsaar.net) if it is a single entry, or an array of address specs if there is more than one ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] == Mon 28 Dec 2009 01:21:52 UTC Mikel Lindsaar * Added sorting of parts, default is text/plain, then text/enriched and text/html. Access through Body#set_sort_order and Body#sort_parts! (called from Body#encode automatically) * Version bump to 1.4.2 == Sun Dec 27 10:38:24 UTC 2009 Mikel Lindsaar * Updating treetop and mail to initialize uninitialized instance variables to nil * Version bump to 1.4.1 == Sun Dec 27 09:51:27 UTC 2009 Mikel Lindsaar * Version bump to 1.4 because now :to_s calls :decoded for all fields and body while :to_s calls :encoded for Message and Header containers. Makes sense... really. == Sun Dec 27 07:30:02 UTC 2009 Mikel Lindsaar * Changed fields to default to :decoded on :to_s, all container objects retain :encoded as the default for :to_s == Thu Dec 17 06:35:05 UTC 2009 Mikel Lindsaar * Fixed parsing error 'Subject: =?ISO-8859-1?Q?Re=3A_ol=E1?=' (has a new line embedded) == Thu Dec 17 02:14:23 UTC 2009 Mikel Lindsaar * Version 1.3.4 * Vendor'd treetop == Thu Dec 17 01:32:00 UTC 2009 Mikel Lindsaar * Version 1.3.3 * Removed dependency on treetop, don't need it at runtime == Wed Dec 16 23:48:46 UTC 2009 Mikel Lindsaar * Version 1.3.2 * Resolved Ruby 1.9.1-head not working because File.basename only accepts US-ASCII or 8Bit == Sun Dec 13 01:06:17 UTC 2009 Mikel Lindsaar * Version 1.3.1 * Resolved Issue #18 - Wrong instance variable name * Resolved Issue #15 - Duplicate block call == Thu Dec 10 21:25:37 UTC 2009 Mikel Lindsaar * Resolved Issue #13 - replacing From field results in from field becoming optional field. == Thu 3 Dec 2009 00:52:12 UTC Mikel Lindsaar * Added POP upgrades from Nicolas Fouché * Added patch to handle multiple from lines in email from Luke Grimstrup == Mon Nov 23 23:34:22 UTC 2009 Mikel Lindsaar * Resolved Issue #12 - Wrong comment in smtp.rb == Mon Nov 23 22:35:50 UTC 2009 Mikel Lindsaar * Changed the way attachments are added so that it does not break depending on the order of the Hash passed in. * Version bump to 1.3.0 - Now works with Edge ActionMailer, MRI 1.8.6, 1.8.7, 1.9.1, all tests passing == Sun Nov 22 12:19:44 UTC 2009 Mikel Lindsaar * Added check on add_part to make sure if there is already a body, and if so, make a text_part of the body * Fixing up attachment adding and making sure multipart emails always have boundaries * Change Message#attachments to now recursively return all attachments in the email in an ordered flattened array * Added ability for Mail::Message to accept {:headers => {'custom-header' => 'value', 'another-custom-header' => 'value'}} as a param on init * Adding ability to Mail::Message to add a part via :part(params) with optional block * Fixed up QP encoding forcing underscores into everything with a space * Added ReturnPathField#address * Updating gem loads and active support loads == Sat Nov 21 12:52:46 UTC 2009 Mikel Lindsaar * Changed Mail::Encodings to clean it up, added in unquote_and_convert_to as well as refactor in this area == Thu Nov 19 04:16:10 UTC 2009 Mikel Lindsaar * Added sendmail support from (Simon Rozet) * Changed to bundler for gem dependancies and moved gem generation into rakefile (Simon Rozet) * Bumped to 1.2.6 for sendmail support == Wed Nov 18 04:26:21 UTC 2009 Mikel Lindsaar * Changed Encodings.param_encode(string) so it intelligently encodes and quotes needed items and leaves plain, no special char, US-ASCII alone unquoted. == Sat Nov 14 08:20:21 UTC 2009 Mikel Lindsaar * Resolved Issue #10 - empty/nil cc/bcc field causes exception (Mail::Field::ParseError) == Fri Nov 13 00:31:04 UTC 2009 Mikel Lindsaar * Hacked and mutilated the network section, made it easier to extend out with other delivery and retriever methods. API changed SLIGHTLY with this. Please check the readme * Resolved Issue #8 - Mail::SMTP now delivers to all mail.destinations * Version bump to 1.2.5 == Thu Nov 12 02:58:01 UTC 2009 Mikel Lindsaar * Resolved Issue #5 - Message ID not handling multiple periods in left hand side * Resolved Issue #6 - Ordering of add_file and body items causes invalid emails == Tue Nov 10 08:15:14 UTC 2009 Mikel Lindsaar * Resolved Issue #5 - Message ID generation issue * Resolved Issue #7 - README add_file examples don't seem to work - Updated readme and rdoc in Message#add_file == Mon Nov 9 23:38:33 UTC 2009 Mikel Lindsaar * Added ability to create new email via a hash or hash-like object. * Moved all of the Part init into the Message class. Part now just uses Message's init, also moved all the attachment related functions into Message. As Part is a subclass of message, you shouldn't see any interface changes here. == Fri Nov 6 22:52:10 UTC 2009 Mikel Lindsaar * a6ef2b4: Fixed Issue #4 - Can't call encoding on non existant content-transer-encoding header == Fri Nov 6 00:51:55 UTC 2009 Mikel Lindsaar * Handled unstructured field folding "blank" lines * Fixed error in header.rb that created fields into an array, instead of a FieldList, resulting in mail.encode returning a random sort order on the header. * Made unstructured fields attempt to decode their values on :decode == Thu Nov 5 04:45:31 UTC 2009 Mikel Lindsaar * 2acb70a: Closes Issue #1 - Handling badly formatted content-type fields == Wed Nov 4 23:24:32 UTC 2009 Mikel Lindsaar * 2b5d608: Closes Issue #2 - Empty header field values not parsing * Version bumb to 1.2.1 == Wed Nov 4 12:54:43 UTC 2009 Mikel Lindsaar * Renamed Mail::Message.encode! to Mail::Message.ready_to_send!, deprecated :encode! * Rewrote encoding and decoding methods on all classes. Adds a lot of boiler plate code, but allows us to be really precise in each field type that needs custom encoding. Now all encoding is done by the field_type itself. Need to follow through on the body. * Bump version to 1.2.0 due to changes of :encoded, :decoded behaviour == Tue Nov 3 00:59:45 UTC 2009 Mikel Lindsaar * Tested mail against entire Enron set (2.3gb) and the Trec 2005 set (0.5gb), ~ half a million emails without crashing * Some headers only can appear once, enforce during header parse assignment. * Convert empty bodies into empty arrays instead of nil. * Handle blank content dispositions. * Mention Trec 2005 Spam Corpus in readme * Add 'rake corpus:verify_all' to allow parse checks in bulk. * Added handling of multi value parameters, like filename*1*="us-ascii'en'blah" filename*2="bleh" * Added dependency on ActiveSupport 2.3 or higher == Sun Nov 1 12:00:00 UTC 2009 Mikel Lindsaar * handle OpenSSL::SSL::VERIFY_NONE returning 0 * doing Mail.new { content_type [text, plain, { charset => UTF-8 }] } is now possible (content type accepts an array) == Sat Oct 31 11:00:41 UTC 2009 Mikel Lindsaar * Fixed attachment handling, so mail can find attachment from a content-type, content-disposition or content-location * Added content-location field and parser * Added message.has_attachments? for ActionMailer friendliness * Added attachment.original_filename for ActionMailer friendliness == Sat Oct 25 13:38:01 UTC 2009 Mikel Lindsaar * Birthday, Mail released as a gem... phew mail-2.6.4/CONTRIBUTING.md000066400000000000000000000055451267453234600147230ustar00rootroot00000000000000Contributing to Mail ==================== Hi there, I welcome pull requests! Here are some thoughts on how to get your pull request merged quickly: 1. Check the Reference RFCs, they are in the References directory, so no excuses. 2. Check for a ticket on GitHub, maybe someone else has the problem too 3. Make a fork of my GitHub repository 4. Run the specs. We only take pull requests with passing tests, and it's great to know that you have a clean slate: `bundle && bundle exec rake` 5. Add a spec for your change. Only refactoring and documentation changes require no new specs. If you are adding functionality or fixing a bug, we need a spec! 6. Test the spec _at_ _least_ against MRI-1.9.3 and MRI-1.8.7 7. Update the README if needed to reflect your change / addition 8. Update the CHANGELOG and give yourself credit 9. With all specs passing push your changes back to your fork 10. Send me a pull request. - If it needs any changes, please push or force push to the same branch you made the pull request from. GitHub will just update the pull request with your changes. Note, specs that break MRI 1.8.7 or 1.9.3 will not be accepted. At this point you're waiting on us. We like to at least comment on, if not accept, pull requests within three business days (and, typically, one business day). We may suggest some changes or improvements or alternatives. Some things that will increase the chance that your pull request is accepted, taken straight from the Ruby on Rails guide: * Tell me you have tested it against more than one version of Ruby, RVM is great for this. I test against 7 rubies before I push into master. * Use good, idiomatic, structured and modular code * Include tests that fail without your code, and pass with it * Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution Syntax: * Two spaces, no tabs. * No trailing whitespace. Blank lines should not have any space. * Prefer &&/|| over and/or. * MyClass.my_method(my_arg) not my_method( my_arg ) or my_method my_arg. * a = b and not a=b. * Follow the conventions you see used in the source already. And in case we didn't emphasize it enough: we love specs! ### Testing against mime-types versions: Use [appraisal](https://github.com/thoughtbot/appraisal) to run against all supported versions of mime-types. 1. Run `(bundle check || bundle) && appraisal` so that all the 'appraised' gemfiles are bundled. 2. Run either `appraisal rake` or `rake appraisal` to run all the tests. To run only one 'appraised' gemfile, run. e.g. `BUNDLE_GEMFILE=gemfiles/mime_types_edge.gemfile (bundle check || bundle) && rake` To change the appraisals, modify the `Appraisals` file, run `appraisal`, commit the generated gemfiles, and modify the .travis.yml matrix. To run on all rubies / gemfiles, just like TravisCI, see [WWTD](https://github.com/grosser/wwtd). mail-2.6.4/Dependencies.txt000066400000000000000000000002441267453234600156100ustar00rootroot00000000000000tlsmail: if ruby < 1.8.6... we could make it optional, or embed it in Mail mime/types: I think we embed a simplified version, or help maintain it, it is old (2006) mail-2.6.4/Gemfile000066400000000000000000000004171267453234600137560ustar00rootroot00000000000000source "https://rubygems.org" gemspec gem "tlsmail", "~> 0.0.1" if RUBY_VERSION <= "1.8.6" gem "jruby-openssl", :platforms => :jruby # For gems not required to run tests group :local_development, :test do gem "appraisal", "~> 1.0" unless RUBY_VERSION <= "1.8.7" end mail-2.6.4/MIT-LICENSE000066400000000000000000000020471267453234600141200ustar00rootroot00000000000000Copyright (c) 2009-2016 Mikel Lindsaar 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. mail-2.6.4/README.md000066400000000000000000000530401267453234600137420ustar00rootroot00000000000000Mail [![Build Status](https://travis-ci.org/mikel/mail.png?branch=master)](https://travis-ci.org/mikel/mail) ==== Introduction ------------ Mail is an internet library for Ruby that is designed to handle emails generation, parsing and sending in a simple, rubyesque manner. The purpose of this library is to provide a single point of access to handle all email functions, including sending and receiving emails. All network type actions are done through proxy methods to Net::SMTP, Net::POP3 etc. Built from my experience with TMail, it is designed to be a pure ruby implementation that makes generating, sending and parsing emails a no brainer. It is also designed from the ground up to work with the more modern versions of Ruby. This is because Ruby > 1.9 handles text encodings much more wonderfully than Ruby 1.8.x and so these features have been taken full advantage of in this library allowing Mail to handle a lot more messages more cleanly than TMail. Mail does run on Ruby 1.8.x... it's just not as fun to code. Finally, Mail has been designed with a very simple object oriented system that really opens up the email messages you are parsing, if you know what you are doing, you can fiddle with every last bit of your email directly. Donations ------------- Mail has been downloaded millions of times, by people around the world, in fact, it represents more than 1% of *all* gems downloaded. It is (like all open source software) a labour of love and something I am doing with my own free time. If you would like to say thanks, please feel free to [make a donation](http://www.pledgie.com/campaigns/8790) and feel free to send me a nice email :) Click here to lend your support to: mail and make a donation at www.pledgie.com ! Compatibility ------------- Every Mail commit is tested by Travis on the [following platforms](https://github.com/mikel/mail/blob/master/.travis.yml) * ruby-1.8.7 [ i686 ] * ruby-1.9.2 [ x86_64 ] * ruby-1.9.3 [ x86_64 ] * ruby-2.0.0 [ x86_64 ] * ruby-2.1.2 [ x86_64 ] * ruby-head [ x86_64 ] * jruby [ x86_64 ] * jruby-head [ x86_64 ] * rbx-2 [ x86_64 ] Testing a specific mime type (needed for 1.8.7 for example) can be done manually with: ```sh BUNDLE_GEMFILE=gemfiles/mime_types_1.16.gemfile (bundle check || bundle) && rake ``` Discussion ---------- If you want to discuss mail with like minded individuals, please subscribe to the [Google Group](http://groups.google.com/group/mail-ruby). Current Capabilities of Mail ---------------------------- * RFC2822 Support, Reading and Writing * RFC2045-2049 Support for multipart emails * Support for creating multipart alternate emails * Support for reading multipart/report emails & getting details from such * Support for multibyte emails - needs quite a lot of work and testing * Wrappers for File, Net/POP3, Net/SMTP * Auto encoding of non US-ASCII header fields * Auto encoding of non US-ASCII bodies Mail is RFC2822 compliant now, that is, it can parse and generate valid US-ASCII emails. There are a few obsoleted syntax emails that it will have problems with, but it also is quite robust, meaning, if it finds something it doesn't understand it will not crash, instead, it will skip the problem and keep parsing. In the case of a header it doesn't understand, it will initialise the header as an optional unstructured field and continue parsing. This means Mail won't (ever) crunch your data (I think). You can also create MIME emails. There are helper methods for making a multipart/alternate email for text/plain and text/html (the most common pair) and you can manually create any other type of MIME email. Roadmap ------- Next TODO: * Improve MIME support for character sets in headers, currently works, mostly, needs refinement. Testing Policy -------------- Basically... we do BDD on Mail. No method gets written in Mail without a corresponding or covering spec. We expect as a minimum 100% coverage measured by RCov. While this is not perfect by any measure, it is pretty good. Additionally, all functional tests from TMail are to be passing before the gem gets released. It also means you can be sure Mail will behave correctly. Note: If you care about core extensions (aka "monkey-patching"), please read the Core Extensions section near the end of this README. API Policy ---------- No API removals within a single point release. All removals to be deprecated with warnings for at least one MINOR point release before removal. Also, all private or protected methods to be declared as such - though this is still I/P. Installation ------------ Installation is fairly simple, I host mail on rubygems, so you can just do: # gem install mail Encodings --------- If you didn't know, handling encodings in Emails is not as straight forward as you would hope. I have tried to simplify it some: 1. All objects that can render into an email, have an `#encoded` method. Encoded will return the object as a complete string ready to send in the mail system, that is, it will include the header field and value and CRLF at the end and wrapped as needed. 2. All objects that can render into an email, have a `#decoded` method. Decoded will return the object's "value" only as a string. This means it will not include the header fields (like 'To:' or 'Subject:'). 3. By default, calling #to_s on a container object will call its encoded method, while #to_s on a field object will call its decoded method. So calling #to_s on a Mail object will return the mail, all encoded ready to send, while calling #to_s on the From field or the body will return the decoded value of the object. The header object of Mail is considered a container. If you are in doubt, call #encoded, or #decoded explicitly, this is safer if you are not sure. 4. Structured fields that have parameter values that can be encoded (e.g. Content-Type) will provide decoded parameter values when you call the parameter names as methods against the object. 5. Structured fields that have parameter values that can be encoded (e.g. Content-Type) will provide encoded parameter values when you call the parameter names through the object.parameters[''] method call. Contributing ------------ Please do! Contributing is easy in Mail. Please read the CONTRIBUTING.md document for more info Usage ----- All major mail functions should be able to happen from the Mail module. So, you should be able to just require 'mail' to get started. ### Making an email ```ruby mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body File.read('body.txt') end mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@... ``` ### Making an email, have it your way: ```ruby mail = Mail.new do body File.read('body.txt') end mail['from'] = 'mikel@test.lindsaar.net' mail[:to] = 'you@test.lindsaar.net' mail.subject = 'This is a test email' mail.header['X-Custom-Header'] = 'custom value' mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@... ``` ### Don't Worry About Message IDs: ```ruby mail = Mail.new do to 'you@test.lindsaar.net' body 'Some simple body' end mail.to_s =~ /Message\-ID: <[\d\w_]+@.+.mail/ #=> 27 ``` Mail will automatically add a Message-ID field if it is missing and give it a unique, random Message-ID along the lines of: <4a7ff76d7016_13a81ab802e1@local.host.mail> ### Or do worry about Message-IDs: ```ruby mail = Mail.new do to 'you@test.lindsaar.net' message_id '' body 'Some simple body' end mail.to_s =~ /Message\-ID: / #=> 27 ``` Mail will take the message_id you assign to it trusting that you know what you are doing. ### Sending an email: Mail defaults to sending via SMTP to local host port 25. If you have a sendmail or postfix daemon running on on this port, sending email is as easy as: ```ruby Mail.deliver do from 'me@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'Here is the image you wanted' body File.read('body.txt') add_file '/full/path/to/somefile.png' end ``` or ```ruby mail = Mail.new do from 'me@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'Here is the image you wanted' body File.read('body.txt') add_file :filename => 'somefile.png', :content => File.read('/somefile.png') end mail.deliver! ``` Sending via sendmail can be done like so: ```ruby mail = Mail.new do from 'me@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'Here is the image you wanted' body File.read('body.txt') add_file :filename => 'somefile.png', :content => File.read('/somefile.png') end mail.delivery_method :sendmail mail.deliver ``` Sending via smtp (for example to [mailcatcher](https://github.com/sj26/mailcatcher)) ```ruby Mail.defaults do delivery_method :smtp, address: "localhost", port: 1025 end ``` Exim requires its own delivery manager, and can be used like so: ```ruby mail.delivery_method :exim, :location => "/usr/bin/exim" mail.deliver ``` ### Getting emails from a pop server: You can configure Mail to receive email using retriever_method within Mail.defaults: ```ruby Mail.defaults do retriever_method :pop3, :address => "pop.gmail.com", :port => 995, :user_name => '', :password => '', :enable_ssl => true end ``` You can access incoming email in a number of ways. The most recent email: ```ruby Mail.all #=> Returns an array of all emails Mail.first #=> Returns the first unread email Mail.last #=> Returns the last unread email ``` The first 10 emails sorted by date in ascending order: ```ruby emails = Mail.find(:what => :first, :count => 10, :order => :asc) emails.length #=> 10 ``` Or even all emails: ```ruby emails = Mail.all emails.length #=> LOTS! ``` ### Reading an Email ```ruby mail = Mail.read('/path/to/message.eml') mail.envelope_from #=> 'mikel@test.lindsaar.net' mail.from.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] mail.sender.address #=> 'mikel@test.lindsaar.net' mail.to #=> 'bob@test.lindsaar.net' mail.cc #=> 'sam@test.lindsaar.net' mail.subject #=> "This is the subject" mail.date.to_s #=> '21 Nov 1997 09:55:06 -0600' mail.message_id #=> '<4D6AA7EB.6490534@xxx.xxx>' mail.body.decoded #=> 'This is the body of the email... ``` Many more methods available. ### Reading a Multipart Email ```ruby mail = Mail.read('multipart_email') mail.multipart? #=> true mail.parts.length #=> 2 mail.body.preamble #=> "Text before the first part" mail.body.epilogue #=> "Text after the last part" mail.parts.map { |p| p.content_type } #=> ['text/plain', 'application/pdf'] mail.parts.map { |p| p.class } #=> [Mail::Message, Mail::Message] mail.parts[0].content_type_parameters #=> {'charset' => 'ISO-8859-1'} mail.parts[1].content_type_parameters #=> {'name' => 'my.pdf'} ``` Mail generates a tree of parts. Each message has many or no parts. Each part is another message which can have many or no parts. A message will only have parts if it is a multipart/mixed or multipart/related content type and has a boundary defined. ### Testing and extracting attachments ```ruby mail.attachments.each do | attachment | # Attachments is an AttachmentsList object containing a # number of Part objects if (attachment.content_type.start_with?('image/')) # extracting images for example... filename = attachment.filename begin File.open(images_dir + filename, "w+b", 0644) {|f| f.write attachment.body.decoded} rescue => e puts "Unable to save data for #{filename} because #{e.message}" end end end ``` ### Writing and sending a multipart/alternative (html and text) email Mail makes some basic assumptions and makes doing the common thing as simple as possible.... (asking a lot from a mail library) ```ruby mail = Mail.deliver do to 'nicolas@test.lindsaar.net.au' from 'Mikel Lindsaar ' subject 'First multipart email sent with Mail' text_part do body 'This is plain text' end html_part do content_type 'text/html; charset=UTF-8' body '

This is HTML

' end end ``` Mail then delivers the email at the end of the block and returns the resulting Mail::Message object, which you can then inspect if you so desire... ``` puts mail.to_s #=> To: nicolas@test.lindsaar.net.au From: Mikel Lindsaar Subject: First multipart email sent with Mail Content-Type: multipart/alternative; boundary=--==_mimepart_4a914f0c911be_6f0f1ab8026659 Message-ID: <4a914f12ac7e_6f0f1ab80267d1@baci.local.mail> Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit ----==_mimepart_4a914f0c911be_6f0f1ab8026659 Content-ID: <4a914f12c8c4_6f0f1ab80268d6@baci.local.mail> Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit This is plain text ----==_mimepart_4a914f0c911be_6f0f1ab8026659 Content-Type: text/html; charset=UTF-8 Content-ID: <4a914f12cf86_6f0f1ab802692c@baci.local.mail> Date: Mon, 24 Aug 2009 00:15:46 +1000 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit

This is HTML

----==_mimepart_4a914f0c911be_6f0f1ab8026659-- ``` Mail inserts the content transfer encoding, the mime version, the content-id's and handles the content-type and boundary. Mail assumes that if your text in the body is only us-ascii, that your transfer encoding is 7bit and it is text/plain. You can override this by explicitly declaring it. ### Making Multipart/Alternate, without a block You don't have to use a block with the text and html part included, you can just do it declaratively. However, you need to add Mail::Parts to an email, not Mail::Messages. ```ruby mail = Mail.new do to 'nicolas@test.lindsaar.net.au' from 'Mikel Lindsaar ' subject 'First multipart email sent with Mail' end text_part = Mail::Part.new do body 'This is plain text' end html_part = Mail::Part.new do content_type 'text/html; charset=UTF-8' body '

This is HTML

' end mail.text_part = text_part mail.html_part = html_part ``` Results in the same email as done using the block form ### Getting error reports from an email: ```ruby @mail = Mail.read('/path/to/bounce_message.eml') @mail.bounced? #=> true @mail.final_recipient #=> rfc822;mikel@dont.exist.com @mail.action #=> failed @mail.error_status #=> 5.5.0 @mail.diagnostic_code #=> smtp;550 Requested action not taken: mailbox unavailable @mail.retryable? #=> false ``` ### Attaching and Detaching Files You can just read the file off an absolute path, Mail will try to guess the mime_type and will encode the file in Base64 for you. ```ruby @mail = Mail.new @mail.add_file("/path/to/file.jpg") @mail.parts.first.attachment? #=> true @mail.parts.first.content_transfer_encoding.to_s #=> 'base64' @mail.attachments.first.mime_type #=> 'image/jpg' @mail.attachments.first.filename #=> 'file.jpg' @mail.attachments.first.decoded == File.read('/path/to/file.jpg') #=> true ``` Or You can pass in file_data and give it a filename, again, mail will try and guess the mime_type for you. ```ruby @mail = Mail.new @mail.attachments['myfile.pdf'] = File.read('path/to/myfile.pdf') @mail.parts.first.attachment? #=> true @mail.attachments.first.mime_type #=> 'application/pdf' @mail.attachments.first.decoded == File.read('path/to/myfile.pdf') #=> true ``` You can also override the guessed MIME media type if you really know better than mail (this should be rarely needed) ```ruby @mail = Mail.new file_data = File.read('path/to/myfile.pdf') @mail.attachments['myfile.pdf'] = { :mime_type => 'application/x-pdf', :content => File.read('path/to/myfile.pdf') } @mail.parts.first.mime_type #=> 'application/x-pdf' ``` Of course... Mail will round trip an attachment as well ```ruby @mail = Mail.new do to 'nicolas@test.lindsaar.net.au' from 'Mikel Lindsaar ' subject 'First multipart email sent with Mail' text_part do body 'Here is the attachment you wanted' end html_part do content_type 'text/html; charset=UTF-8' body '

Funky Title

Here is the attachment you wanted

' end add_file '/path/to/myfile.pdf' end @round_tripped_mail = Mail.new(@mail.encoded) @round_tripped_mail.attachments.length #=> 1 @round_tripped_mail.attachments.first.filename #=> 'myfile.pdf' ``` See "Testing and extracting attachments" above for more details. Using Mail with Testing or Spec'ing Libraries --------------------------------------------- If mail is part of your system, you'll need a way to test it without actually sending emails, the TestMailer can do this for you. ```ruby require 'mail' => true Mail.defaults do delivery_method :test end => # Mail::TestMailer.deliveries => [] Mail.deliver do to 'mikel@me.com' from 'you@you.com' subject 'testing' body 'hello' end => # 1 Mail::TestMailer.deliveries.first => # [] ``` There is also a set of RSpec matchers stolen/inspired by Shoulda's ActionMailer matchers (you'll want to set delivery_method as above too): ```ruby Mail.defaults do delivery_method :test # in practice you'd do this in spec_helper.rb end describe "sending an email" do include Mail::Matchers before(:each) do Mail::TestMailer.deliveries.clear Mail.deliver do to ['mikel@me.com', 'mike2@me.com'] from 'you@you.com' subject 'testing' body 'hello' end end it { should have_sent_email } # passes if any email at all was sent it { should have_sent_email.from('you@you.com') } it { should have_sent_email.to('mike1@me.com') } # can specify a list of recipients... it { should have_sent_email.to(['mike1@me.com', 'mike2@me.com']) } # ...or chain recipients together it { should have_sent_email.to('mike1@me.com').to('mike2@me.com') } it { should have_sent_email.with_subject('testing') } it { should have_sent_email.with_body('hello') } # Can match subject or body with a regex # (or anything that responds_to? :match) it { should have_sent_email.matching_subject(/test(ing)?/) } it { should have_sent_email.matching_body(/h(a|e)llo/) } # Can chain together modifiers # Note that apart from recipients, repeating a modifier overwrites old value. it { should have_sent_email.from('you@you.com').to('mike1@me.com').matching_body(/hell/) # test for attachments # ... by specific attachment it { should_have_sent_email.with_attachments(my_attachment) } # ... or any attachment it { should_have_sent_email.with_attachments(any_attachment) } # ... by array of attachments it { should_have_sent_email.with_attachments([my_attachment1, my_attachment2]) } #note that order is important #... by presence it { should_have_sent_email.with_any_attachments } #... or by absence it { should_have_sent_email.with_no_attachments } end ``` Core Extensions --------------- The mail gem adds several constants and methods to Ruby's core objects (similar to the activesupport gem from the Rails project). For example: NilClass::blank? NilClass::to_crlf NilClass::to_lf Object::blank? String::to_crlf String::to_lf String::blank? ...etc... For all the details, check out lib/mail/core_extensions/. Excerpts from TREC Spam Corpus 2005 ----------------------------------- The spec fixture files in spec/fixtures/emails/from_trec_2005 are from the 2005 TREC Public Spam Corpus. They remain copyrighted under the terms of that project and license agreement. They are used in this project to verify and describe the development of this email parser implementation. http://plg.uwaterloo.ca/~gvcormac/treccorpus/ They are used as allowed by 'Permitted Uses, Clause 3': "Small excerpts of the information may be displayed to others or published in a scientific or technical context, solely for the purpose of describing the research and development and related issues." -- http://plg.uwaterloo.ca/~gvcormac/treccorpus/ License ------- (The MIT License) Copyright (c) 2009-2016 Mikel Lindsaar 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. mail-2.6.4/ROADMAP000066400000000000000000000046011267453234600134700ustar00rootroot00000000000000=Mail Development Road Path ------------------------------------------------------------- ==Basic Email Handling * Everything so far [DONE - ML] * Address parsing working with all TMail tests passing [DONE - ML] * All address fields handling addresses correctly [DONE - ML] * Mail able to instantiate on any known header type, use method missing [DONE - ML] * Keywords and comments fields working (low hanging fruit) [DONE - ML] * Date parsing working [DONE - ML] * Date fields handling dates correctly [DONE - ML] * Trace fields decided on method to handle [DONE - ML] * Trace fields parsing correctly [DONE - ML] * All trace field functionality working [DONE - ML] * Message ID fields handling correctly [DONE - ML] * Message ID fields generating correctly [DONE - ML] * Work out basic API on address fields [DONE - ML] * All RFC 2822 example emails passing [DONE - ML] * All TMail tests relating to RFC2822 passing * All RFC 2822 obsolete example emails passing ==Multipart Email Handling (need to break down into smaller steps when we get here) * Initial stages of RFC 2045 implemented (content-type and 2046, 2047) [DONE - ML] * Mime-Version field parsing [DONE - ML] * Mime-Version field setting [DONE - ML] * Content-ID field parsing [DONE - ML] * Content-ID field setting [DONE - ML] * Content-Description field parsing [DONE - ML] * Content-Description field setting [DONE - ML] * Content-Transfer-Encoding parsing [DONE - ML] * Content-Transfer-Encoding setting [DONE - ML] * Content-Type field parsing [DONE - ML] * Content-Type field setting [DONE - ML] * Multipart email support [DONE - ML] * Reading multipart emails [DONE - ML] * Creating multipart emails [DONE - ML] * Multipart/Report reporting done [DONE - ML] * Implement all helper methods on adding and deleting parts and attachments [DONE - ML] ==Encoding/Decoding * Support for content-transport-encoding handling [DONE - ML] (base64) * Handle non us-ascii in Subject, keywords, header fields in general [DONE - ML] * handle encoding and decoding of multipart emails [DONE - ML] (base64) ==Basic Email Sending & Receiving * Wrap up Net/SMTP [DONE - NF] (missing STMPS and Authentication Schemes support) * Wrap up Net/POP3 [DONE - NF] (missing APOP support) * Provide SMTP/POP3/IMAP default configurations for all known webmails * Wrap up Net/IMAP (if we really want to...) * Get a mbox parser and handler written mail-2.6.4/Rakefile000066400000000000000000000012351267453234600141270ustar00rootroot00000000000000if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"] ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __FILE__) end require 'rubygems' require 'bundler/setup' require 'rake/testtask' require 'rspec/core/rake_task' desc "Build a gem file" task :build do system "gem build mail.gemspec" end task :default => :spec RSpec::Core::RakeTask.new(:spec) do |t| t.ruby_opts = '-w' t.rspec_opts = %w(--backtrace --color) end begin require "appraisal" rescue LoadError, SyntaxError warn "Appraisal is only available in test/development on Ruby 1.9+" end # load custom rake tasks Dir["#{File.dirname(__FILE__)}/tasks/**/*.rake"].sort.each { |ext| load ext } mail-2.6.4/TODO.rdoc000066400000000000000000000006511267453234600141010ustar00rootroot00000000000000== Not really in any order: * Add multibyte handling to fields, if they get a multibyte string, try encoding it into UTF-8 B first, if this fails, throw an error. * Cleanup the treetop parsers......... do I _really_ need that many entrance files? * Simplify the relationship of Headers and Fields. Doing too much of the Field work in the Header class on instantiating fields. Header should just say "Field, do it!" mail-2.6.4/gemfiles/000077500000000000000000000000001267453234600142545ustar00rootroot00000000000000mail-2.6.4/gemfiles/mime_types_1.16.gemfile000066400000000000000000000003511267453234600204250ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 1.16" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.0.gemfile000066400000000000000000000003521267453234600203400ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.0.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.1.gemfile000066400000000000000000000003521267453234600203410ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.1.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.2.gemfile000066400000000000000000000003521267453234600203420ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.2.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.3.gemfile000066400000000000000000000003521267453234600203430ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.3.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.4.gemfile000066400000000000000000000003521267453234600203440ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.4.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.5.gemfile000066400000000000000000000003521267453234600203450ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.5.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.6.gemfile000066400000000000000000000003521267453234600203460ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.6.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.6_columnar.gemfile000066400000000000000000000004151267453234600222460ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.6.0", :require => 'mime/types/columnar' group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.99.gemfile000066400000000000000000000003531267453234600204430ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.99.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_2.latest.gemfile000066400000000000000000000003501267453234600214730ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 2.3" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_3.0.gemfile000066400000000000000000000003521267453234600203410ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", "~> 3.0.0" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/gemfiles/mime_types_edge.gemfile000066400000000000000000000004071267453234600207460ustar00rootroot00000000000000# This file was generated by Appraisal source "https://rubygems.org" gem "jruby-openssl", :platforms => :jruby gem "mime-types", :github => "mime-types/ruby-mime-types" group :local_development, :test do gem "appraisal", "~> 1.0" end gemspec :path => "../" mail-2.6.4/lib/000077500000000000000000000000001267453234600132275ustar00rootroot00000000000000mail-2.6.4/lib/mail.rb000066400000000000000000000044271267453234600145050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # :doc: require 'date' require 'shellwords' require 'uri' require 'net/smtp' begin # Use mime/types/columnar if available, for reduced memory usage require 'mime/types/columnar' rescue LoadError require 'mime/types' end if RUBY_VERSION <= '1.8.6' begin require 'tlsmail' rescue LoadError raise "You need to install tlsmail if you are using ruby <= 1.8.6" end end if RUBY_VERSION >= "1.9.0" require 'mail/version_specific/ruby_1_9' RubyVer = Ruby19 else require 'mail/version_specific/ruby_1_8' RubyVer = Ruby18 end require 'mail/version' require 'mail/core_extensions/string' require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3' require 'mail/indifferent_hash' # Only load our multibyte extensions if AS is not already loaded if defined?(ActiveSupport) require 'active_support/inflector' else require 'mail/core_extensions/string/access' require 'mail/core_extensions/string/multibyte' require 'mail/multibyte' end require 'mail/constants' require 'mail/utilities' require 'mail/configuration' @@autoloads = {} def self.register_autoload(name, path) @@autoloads[name] = path autoload(name, path) end # This runs through the autoload list and explictly requires them for you. # Useful when running mail in a threaded process. # # Usage: # # require 'mail' # Mail.eager_autoload! def self.eager_autoload! @@autoloads.each { |_,path| require(path) } end # Autoload mail send and receive classes. require 'mail/network' require 'mail/message' require 'mail/part' require 'mail/header' require 'mail/parts_list' require 'mail/attachments_list' require 'mail/body' require 'mail/field' require 'mail/field_list' require 'mail/envelope' register_autoload :Parsers, "mail/parsers" # Autoload header field elements and transfer encodings. require 'mail/elements' require 'mail/encodings' require 'mail/encodings/base64' require 'mail/encodings/quoted_printable' require 'mail/encodings/unix_to_unix' require 'mail/matchers/has_sent_mail' require 'mail/matchers/attachment_matchers.rb' # Finally... require all the Mail.methods require 'mail/mail' end mail-2.6.4/lib/mail/000077500000000000000000000000001267453234600141515ustar00rootroot00000000000000mail-2.6.4/lib/mail/attachments_list.rb000066400000000000000000000065141267453234600200520ustar00rootroot00000000000000# frozen_string_literal: true module Mail class AttachmentsList < Array def initialize(parts_list) @parts_list = parts_list @content_disposition_type = 'attachment' parts_list.map { |p| if p.content_type == "message/rfc822" Mail.new(p.body).attachments elsif p.parts.empty? p if p.attachment? else p.attachments end }.flatten.compact.each { |a| self << a } self end def inline @content_disposition_type = 'inline' self end # Returns the attachment by filename or at index. # # mail.attachments['test.png'] = File.read('test.png') # mail.attachments['test.jpg'] = File.read('test.jpg') # # mail.attachments['test.png'].filename #=> 'test.png' # mail.attachments[1].filename #=> 'test.jpg' def [](index_value) if index_value.is_a?(Fixnum) self.fetch(index_value) else self.select { |a| a.filename == index_value }.first end end def []=(name, value) encoded_name = Mail::Encodings.decode_encode name, :encode default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{encoded_name}\"", :content_transfer_encoding => "#{guess_encoding}", :content_disposition => "#{@content_disposition_type}; filename=\"#{encoded_name}\"" } if value.is_a?(Hash) default_values[:body] = value.delete(:content) if value[:content] default_values[:body] = value.delete(:data) if value[:data] encoding = value.delete(:transfer_encoding) || value.delete(:encoding) if encoding if Mail::Encodings.defined? encoding default_values[:content_transfer_encoding] = encoding else raise "Do not know how to handle Content Transfer Encoding #{encoding}, please choose either quoted-printable or base64" end end if value[:mime_type] default_values[:content_type] = value.delete(:mime_type) @mime_type = MIME::Types[default_values[:content_type]].first default_values[:content_transfer_encoding] ||= guess_encoding end hash = default_values.merge(value) else default_values[:body] = value hash = default_values end if hash[:body].respond_to? :force_encoding and hash[:body].respond_to? :valid_encoding? if not hash[:body].valid_encoding? and default_values[:content_transfer_encoding].downcase == "binary" hash[:body] = hash[:body].dup if hash[:body].frozen? hash[:body].force_encoding("BINARY") end end attachment = Part.new(hash) attachment.add_content_id(hash[:content_id]) @parts_list << attachment end # Uses the mime type to try and guess the encoding, if it is a binary type, or unknown, then we # set it to binary, otherwise as set to plain text def guess_encoding if @mime_type && !@mime_type.binary? "7bit" else "binary" end end def set_mime_type(filename) # Have to do this because MIME::Types is not Ruby 1.9 safe yet if RUBY_VERSION >= '1.9' filename = filename.encode(Encoding::UTF_8) if filename.respond_to?(:encode) end @mime_type = MIME::Types.type_for(filename).first end end end mail-2.6.4/lib/mail/body.rb000066400000000000000000000224221267453234600154350ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # = Body # # The body is where the text of the email is stored. Mail treats the body # as a single object. The body itself has no information about boundaries # used in the MIME standard, it just looks at its content as either a single # block of text, or (if it is a multipart message) as an array of blocks of text. # # A body has to be told to split itself up into a multipart message by calling # #split with the correct boundary. This is because the body object has no way # of knowing what the correct boundary is for itself (there could be many # boundaries in a body in the case of a nested MIME text). # # Once split is called, Mail::Body will slice itself up on this boundary, # assigning anything that appears before the first part to the preamble, and # anything that appears after the closing boundary to the epilogue, then # each part gets initialized into a Mail::Part object. # # The boundary that is used to split up the Body is also stored in the Body # object for use on encoding itself back out to a string. You can # overwrite this if it needs to be changed. # # On encoding, the body will return the preamble, then each part joined by # the boundary, followed by a closing boundary string and then the epilogue. class Body def initialize(string = '') @boundary = nil @preamble = nil @epilogue = nil @charset = nil @part_sort_order = [ "text/plain", "text/enriched", "text/html" ] @parts = Mail::PartsList.new if Utilities.blank?(string) @raw_source = '' else # Do join first incase we have been given an Array in Ruby 1.9 if string.respond_to?(:join) @raw_source = string.join('') elsif string.respond_to?(:to_s) @raw_source = string.to_s else raise "You can only assign a string or an object that responds_to? :join or :to_s to a body." end end @encoding = (only_us_ascii? ? '7bit' : '8bit') set_charset end # Matches this body with another body. Also matches the decoded value of this # body with a string. # # Examples: # # body = Mail::Body.new('The body') # body == body #=> true # # body = Mail::Body.new('The body') # body == 'The body' #=> true # # body = Mail::Body.new("VGhlIGJvZHk=\n") # body.encoding = 'base64' # body == "The body" #=> true def ==(other) if other.class == String self.decoded == other else super end end # Accepts a string and performs a regular expression against the decoded text # # Examples: # # body = Mail::Body.new('The body') # body =~ /The/ #=> 0 # # body = Mail::Body.new("VGhlIGJvZHk=\n") # body.encoding = 'base64' # body =~ /The/ #=> 0 def =~(regexp) self.decoded =~ regexp end # Accepts a string and performs a regular expression against the decoded text # # Examples: # # body = Mail::Body.new('The body') # body.match(/The/) #=> # # # body = Mail::Body.new("VGhlIGJvZHk=\n") # body.encoding = 'base64' # body.match(/The/) #=> # def match(regexp) self.decoded.match(regexp) end # Accepts anything that responds to #to_s and checks if it's a substring of the decoded text # # Examples: # # body = Mail::Body.new('The body') # body.include?('The') #=> true # # body = Mail::Body.new("VGhlIGJvZHk=\n") # body.encoding = 'base64' # body.include?('The') #=> true def include?(other) self.decoded.include?(other.to_s) end # Allows you to set the sort order of the parts, overriding the default sort order. # Defaults to 'text/plain', then 'text/enriched', then 'text/html' with any other content # type coming after. def set_sort_order(order) @part_sort_order = order end # Allows you to sort the parts according to the default sort order, or the sort order you # set with :set_sort_order. # # sort_parts! is also called from :encode, so there is no need for you to call this explicitly def sort_parts! @parts.each do |p| p.body.set_sort_order(@part_sort_order) p.body.sort_parts! end @parts.sort!(@part_sort_order) end # Returns the raw source that the body was initialized with, without # any tampering def raw_source @raw_source end def get_best_encoding(target) target_encoding = Mail::Encodings.get_encoding(target) target_encoding.get_best_compatible(encoding, raw_source) end # Returns a body encoded using transfer_encoding. Multipart always uses an # identiy encoding (i.e. no encoding). # Calling this directly is not a good idea, but supported for compatibility # TODO: Validate that preamble and epilogue are valid for requested encoding def encoded(transfer_encoding = '8bit') if multipart? self.sort_parts! encoded_parts = parts.map { |p| p.encoded } ([preamble] + encoded_parts).join(crlf_boundary) + end_boundary + epilogue.to_s else be = get_best_encoding(transfer_encoding) dec = Mail::Encodings::get_encoding(encoding) enc = Mail::Encodings::get_encoding(be) if dec.nil? # Cannot decode, so skip normalization raw_source else # Decode then encode to normalize and allow transforming # from base64 to Q-P and vice versa decoded = dec.decode(raw_source) if defined?(Encoding) && charset && charset != "US-ASCII" decoded.encode!(charset) decoded.force_encoding('BINARY') unless Encoding.find(charset).ascii_compatible? end enc.encode(decoded) end end end def decoded if !Encodings.defined?(encoding) raise UnknownEncodingType, "Don't know how to decode #{encoding}, please call #encoded and decode it yourself." else Encodings.get_encoding(encoding).decode(raw_source) end end def to_s decoded end def charset @charset end def charset=( val ) @charset = val end def encoding(val = nil) if val self.encoding = val else @encoding end end def encoding=( val ) @encoding = if val == "text" || Utilities.blank?(val) (only_us_ascii? ? '7bit' : '8bit') else val end end # Returns the preamble (any text that is before the first MIME boundary) def preamble @preamble end # Sets the preamble to a string (adds text before the first MIME boundary) def preamble=( val ) @preamble = val end # Returns the epilogue (any text that is after the last MIME boundary) def epilogue @epilogue end # Sets the epilogue to a string (adds text after the last MIME boundary) def epilogue=( val ) @epilogue = val end # Returns true if there are parts defined in the body def multipart? true unless parts.empty? end # Returns the boundary used by the body def boundary @boundary end # Allows you to change the boundary of this Body object def boundary=( val ) @boundary = val end def parts @parts end def <<( val ) if @parts @parts << val else @parts = Mail::PartsList.new[val] end end def split!(boundary) self.boundary = boundary parts = extract_parts # Make the preamble equal to the preamble (if any) self.preamble = parts[0].to_s.strip # Make the epilogue equal to the epilogue (if any) self.epilogue = parts[-1].to_s.strip parts[1...-1].to_a.each { |part| @parts << Mail::Part.new(part) } self end def only_us_ascii? !(raw_source =~ /[^\x01-\x7f]/) end def empty? !!raw_source.to_s.empty? end private # split parts by boundary, ignore first part if empty, append final part when closing boundary was missing def extract_parts parts_regex = / (?: # non-capturing group \A | # start of string OR \r\n # line break ) ( --#{Regexp.escape(boundary || "")} # boundary delimiter (?:--)? # with non-capturing optional closing ) (?=\s*$) # lookahead matching zero or more spaces followed by line-ending /x parts = raw_source.split(parts_regex).each_slice(2).to_a parts.each_with_index { |(part, _), index| parts.delete_at(index) if index > 0 && Utilities.blank?(part) } if parts.size > 1 final_separator = parts[-2][1] parts << [""] if final_separator != "--#{boundary}--" end parts.map(&:first) end def crlf_boundary "\r\n--#{boundary}\r\n" end def end_boundary "\r\n--#{boundary}--\r\n" end def set_charset only_us_ascii? ? @charset = 'US-ASCII' : @charset = nil end end end mail-2.6.4/lib/mail/check_delivery_params.rb000066400000000000000000000014431267453234600210230ustar00rootroot00000000000000# frozen_string_literal: true module Mail module CheckDeliveryParams def check_delivery_params(mail) if Utilities.blank?(mail.smtp_envelope_from) raise ArgumentError.new('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end if Utilities.blank?(mail.smtp_envelope_to) raise ArgumentError.new('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end message = mail.encoded if mail.respond_to?(:encoded) if Utilities.blank?(message) raise ArgumentError.new('An encoded message is required to send an email') end [mail.smtp_envelope_from, mail.smtp_envelope_to, message] end end end mail-2.6.4/lib/mail/configuration.rb000066400000000000000000000033051267453234600173460ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # Thanks to Nicolas Fouché for this wrapper # require 'singleton' module Mail # The Configuration class is a Singleton used to hold the default # configuration for all Mail objects. # # Each new mail object gets a copy of these values at initialization # which can be overwritten on a per mail object basis. class Configuration include Singleton def initialize @delivery_method = nil @retriever_method = nil super end def delivery_method(method = nil, settings = {}) return @delivery_method if @delivery_method && method.nil? @delivery_method = lookup_delivery_method(method).new(settings) end def lookup_delivery_method(method) case method.is_a?(String) ? method.to_sym : method when nil Mail::SMTP when :smtp Mail::SMTP when :sendmail Mail::Sendmail when :exim Mail::Exim when :file Mail::FileDelivery when :smtp_connection Mail::SMTPConnection when :test Mail::TestMailer else method end end def retriever_method(method = nil, settings = {}) return @retriever_method if @retriever_method && method.nil? @retriever_method = lookup_retriever_method(method).new(settings) end def lookup_retriever_method(method) case method when nil Mail::POP3 when :pop3 Mail::POP3 when :imap Mail::IMAP when :test Mail::TestRetriever else method end end def param_encode_language(value = nil) value ? @encode_language = value : @encode_language ||= 'en' end end end mail-2.6.4/lib/mail/constants.rb000066400000000000000000000033771267453234600165240ustar00rootroot00000000000000# encoding: us-ascii # frozen_string_literal: true module Mail module Constants white_space = %Q|\x9\x20| text = %Q|\x1-\x8\xB\xC\xE-\x7f| field_name = %Q|\x21-\x39\x3b-\x7e| qp_safe = %Q|\x20-\x3c\x3e-\x7e| aspecial = %Q|()<>[]:;@\\,."| # RFC5322 tspecial = %Q|()<>@,;:\\"/[]?=| # RFC2045 sp = %Q| | control = %Q|\x00-\x1f\x7f-\xff| if control.respond_to?(:force_encoding) control = control.dup.force_encoding(Encoding::BINARY) end CRLF = /\r\n/ WSP = /[#{white_space}]/ FWS = /#{CRLF}#{WSP}*/ TEXT = /[#{text}]/ # + obs-text FIELD_NAME = /[#{field_name}]+/ FIELD_PREFIX = /\A(#{FIELD_NAME})/ FIELD_BODY = /.+/m FIELD_LINE = /^[#{field_name}]+:\s*.+$/ FIELD_SPLIT = /^(#{FIELD_NAME})\s*:\s*(#{FIELD_BODY})?$/ HEADER_LINE = /^([#{field_name}]+:\s*.+)$/ HEADER_SPLIT = /#{CRLF}(?!#{WSP})/ QP_UNSAFE = /[^#{qp_safe}]/ QP_SAFE = /[#{qp_safe}]/ CONTROL_CHAR = /[#{control}]/n ATOM_UNSAFE = /[#{Regexp.quote aspecial}#{control}#{sp}]/n PHRASE_UNSAFE = /[#{Regexp.quote aspecial}#{control}]/n TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{sp}]/n ENCODED_VALUE = /\=\?([^?]+)\?([QB])\?[^?]*?\?\=/mi FULL_ENCODED_VALUE = /(\=\?[^?]+\?[QB]\?[^?]*?\?\=)/mi EMPTY = '' SPACE = ' ' UNDERSCORE = '_' HYPHEN = '-' COLON = ':' ASTERISK = '*' CR = "\r" LF = "\n" CR_ENCODED = "=0D" LF_ENCODED = "=0A" CAPITAL_M = 'M' EQUAL_LF = "=\n" NULL_SENDER = '<>' Q_VALUES = ['Q','q'] B_VALUES = ['B','b'] end end mail-2.6.4/lib/mail/core_extensions/000077500000000000000000000000001267453234600173605ustar00rootroot00000000000000mail-2.6.4/lib/mail/core_extensions/smtp.rb000066400000000000000000000012371267453234600206730ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Net class SMTP # This is a backport of r30294 from ruby trunk because of a bug in net/smtp. # http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30294 # # Fixed in what will be Ruby 1.9.3 - tlsconnect also does not exist in some early versions of ruby begin alias_method :original_tlsconnect, :tlsconnect def tlsconnect(s) verified = false begin original_tlsconnect(s).tap { verified = true } ensure unless verified s.close rescue nil end end end rescue NameError end end end mail-2.6.4/lib/mail/core_extensions/string.rb000066400000000000000000000006241267453234600212150ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true class String #:nodoc: unless method_defined?(:ascii_only?) # Backport from Ruby 1.9 checks for non-us-ascii characters. def ascii_only? self !~ MATCH_NON_US_ASCII end MATCH_NON_US_ASCII = /[^\x00-\x7f]/ end def not_ascii_only? !ascii_only? end unless method_defined?(:bytesize) alias :bytesize :length end end mail-2.6.4/lib/mail/core_extensions/string/000077500000000000000000000000001267453234600206665ustar00rootroot00000000000000mail-2.6.4/lib/mail/core_extensions/string/access.rb000066400000000000000000000073251267453234600224630ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # This is not loaded if ActiveSupport is already loaded # This is an almost cut and paste from ActiveSupport v3.0.6, copied in here so that Mail # itself does not depend on ActiveSupport to avoid versioning conflicts class String unless '1.9'.respond_to?(:force_encoding) # Returns the character at the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".at(0) # => "h" # "hello".at(4) # => "o" # "hello".at(10) # => ERROR if < 1.9, nil in 1.9 def at(position) mb_chars[position, 1].to_s end # Returns the remaining of the string from the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".from(0) # => "hello" # "hello".from(2) # => "llo" # "hello".from(10) # => "" if < 1.9, nil in 1.9 def from(position) mb_chars[position..-1].to_s end # Returns the beginning of the string up to the +position+ treating the string as an array (where 0 is the first character). # # Examples: # "hello".to(0) # => "h" # "hello".to(2) # => "hel" # "hello".to(10) # => "hello" def to(position) mb_chars[0..position].to_s end # Returns the first character of the string or the first +limit+ characters. # # Examples: # "hello".first # => "h" # "hello".first(2) # => "he" # "hello".first(10) # => "hello" def first(limit = 1) if limit == 0 '' elsif limit >= size self else mb_chars[0...limit].to_s end end # Returns the last character of the string or the last +limit+ characters. # # Examples: # "hello".last # => "o" # "hello".last(2) # => "lo" # "hello".last(10) # => "hello" def last(limit = 1) if limit == 0 '' elsif limit >= size self else mb_chars[(-limit)..-1].to_s end end else def at(position) self[position] end def from(position) self[position..-1] end def to(position) self[0..position] end def first(limit = 1) if limit == 0 '' elsif limit >= size self else to(limit - 1) end end def last(limit = 1) if limit == 0 '' elsif limit >= size self else from(-limit) end end end if Module.method(:const_get).arity == 1 # Tries to find a constant with the name specified in the argument string: # # "Module".constantize # => Module # "Test::Unit".constantize # => Test::Unit # # The name is assumed to be the one of a top-level constant, no matter whether # it starts with "::" or not. No lexical context is taken into account: # # C = 'outside' # module M # C = 'inside' # C # => 'inside' # "C".constantize # => 'outside', same as ::C # end # # NameError is raised when the name is not in CamelCase or the constant is # unknown. def constantize names = self.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name) end constant end else def constantize #:nodoc: names = self.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name) end constant end end end mail-2.6.4/lib/mail/core_extensions/string/multibyte.rb000066400000000000000000000053771267453234600232450ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # This is not loaded if ActiveSupport is already loaded # This is an almost cut and paste from ActiveSupport v3.0.6, copied in here so that Mail # itself does not depend on ActiveSupport to avoid versioning conflicts require 'mail/multibyte' class String if RUBY_VERSION >= "1.9" # == Multibyte proxy # # +mb_chars+ is a multibyte safe proxy for string methods. # # In Ruby 1.8 and older it creates and returns an instance of the Mail::Multibyte::Chars class which # encapsulates the original string. A Unicode safe version of all the String methods are defined on this proxy # class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsuled string. # # name = 'Claus Müller' # name.reverse # => "rell??M sualC" # name.length # => 13 # # name.mb_chars.reverse.to_s # => "rellüM sualC" # name.mb_chars.length # => 12 # # In Ruby 1.9 and newer +mb_chars+ returns +self+ because String is (mostly) encoding aware. This means that # it becomes easy to run one version of your code on multiple Ruby versions. # # == Method chaining # # All the methods on the Chars proxy which normally return a string will return a Chars object. This allows # method chaining on the result of any of these methods. # # name.mb_chars.reverse.length # => 12 # # == Interoperability and configuration # # The Chars object tries to be as interchangeable with String objects as possible: sorting and comparing between # String and Char work like expected. The bang! methods change the internal string representation in the Chars # object. Interoperability problems can be resolved easily with a +to_s+ call. # # For more information about the methods defined on the Chars proxy see Mail::Multibyte::Chars. For # information about how to change the default Multibyte behaviour see Mail::Multibyte. def mb_chars if Mail::Multibyte.proxy_class.consumes?(self) Mail::Multibyte.proxy_class.new(self) else self end end def is_utf8? #:nodoc case encoding when Encoding::UTF_8 valid_encoding? when Encoding::ASCII_8BIT, Encoding::US_ASCII dup.force_encoding(Encoding::UTF_8).valid_encoding? else false end end else def mb_chars if Mail::Multibyte.proxy_class.wants?(self) Mail::Multibyte.proxy_class.new(self) else self end end # Returns true if the string has UTF-8 semantics (a String used for purely byte resources is unlikely to have # them), returns false otherwise. def is_utf8? Mail::Multibyte::Chars.consumes?(self) end end end mail-2.6.4/lib/mail/elements.rb000066400000000000000000000017001267453234600163100ustar00rootroot00000000000000# frozen_string_literal: true module Mail register_autoload :Address, 'mail/elements/address' register_autoload :AddressList, 'mail/elements/address_list' register_autoload :ContentDispositionElement, 'mail/elements/content_disposition_element' register_autoload :ContentLocationElement, 'mail/elements/content_location_element' register_autoload :ContentTransferEncodingElement, 'mail/elements/content_transfer_encoding_element' register_autoload :ContentTypeElement, 'mail/elements/content_type_element' register_autoload :DateTimeElement, 'mail/elements/date_time_element' register_autoload :EnvelopeFromElement, 'mail/elements/envelope_from_element' register_autoload :MessageIdsElement, 'mail/elements/message_ids_element' register_autoload :MimeVersionElement, 'mail/elements/mime_version_element' register_autoload :PhraseList, 'mail/elements/phrase_list' register_autoload :ReceivedElement, 'mail/elements/received_element' end mail-2.6.4/lib/mail/elements/000077500000000000000000000000001267453234600157655ustar00rootroot00000000000000mail-2.6.4/lib/mail/elements/address.rb000066400000000000000000000166671267453234600177570ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class Address include Mail::Utilities # Mail::Address handles all email addresses in Mail. It takes an email address string # and parses it, breaking it down into its component parts and allowing you to get the # address, comments, display name, name, local part, domain part and fully formatted # address. # # Mail::Address requires a correctly formatted email address per RFC2822 or RFC822. It # handles all obsolete versions including obsolete domain routing on the local part. # # a = Address.new('Mikel Lindsaar (My email address) ') # a.format #=> 'Mikel Lindsaar (My email address)' # a.address #=> 'mikel@test.lindsaar.net' # a.display_name #=> 'Mikel Lindsaar' # a.local #=> 'mikel' # a.domain #=> 'test.lindsaar.net' # a.comments #=> ['My email address'] # a.to_s #=> 'Mikel Lindsaar (My email address)' def initialize(value = nil) @output_type = :decode if value.nil? @parsed = false @data = nil else parse(value) end end # Returns the raw input of the passed in string, this is before it is passed # by the parser. def raw @data.raw end # Returns a correctly formatted address for the email going out. If given # an incorrectly formatted address as input, Mail::Address will do its best # to format it correctly. This includes quoting display names as needed and # putting the address in angle brackets etc. # # a = Address.new('Mikel Lindsaar (My email address) ') # a.format #=> 'Mikel Lindsaar (My email address)' def format parse unless @parsed if @data.nil? EMPTY elsif display_name [quote_phrase(display_name), "<#{address}>", format_comments].compact.join(SPACE) elsif address [address, format_comments].compact.join(SPACE) else raw end end # Returns the address that is in the address itself. That is, the # local@domain string, without any angle brackets or the like. # # a = Address.new('Mikel Lindsaar (My email address) ') # a.address #=> 'mikel@test.lindsaar.net' def address parse unless @parsed domain ? "#{local}@#{domain}" : local end # Provides a way to assign an address to an already made Mail::Address object. # # a = Address.new # a.address = 'Mikel Lindsaar (My email address) ' # a.address #=> 'mikel@test.lindsaar.net' def address=(value) parse(value) end # Returns the display name of the email address passed in. # # a = Address.new('Mikel Lindsaar (My email address) ') # a.display_name #=> 'Mikel Lindsaar' def display_name parse unless @parsed @display_name ||= get_display_name Encodings.decode_encode(@display_name.to_s, @output_type) if @display_name end # Provides a way to assign a display name to an already made Mail::Address object. # # a = Address.new # a.address = 'mikel@test.lindsaar.net' # a.display_name = 'Mikel Lindsaar' # a.format #=> 'Mikel Lindsaar ' def display_name=( str ) @display_name = str.dup # in case frozen end # Returns the local part (the left hand side of the @ sign in the email address) of # the address # # a = Address.new('Mikel Lindsaar (My email address) ') # a.local #=> 'mikel' def local parse unless @parsed Encodings.decode_encode("#{@data.obs_domain_list}#{get_local.strip}", @output_type) if get_local end # Returns the domain part (the right hand side of the @ sign in the email address) of # the address # # a = Address.new('Mikel Lindsaar (My email address) ') # a.domain #=> 'test.lindsaar.net' def domain parse unless @parsed Encodings.decode_encode(strip_all_comments(get_domain), @output_type) if get_domain end # Returns an array of comments that are in the email, or an empty array if there # are no comments # # a = Address.new('Mikel Lindsaar (My email address) ') # a.comments #=> ['My email address'] def comments parse unless @parsed get_comments.map { |c| c.squeeze(SPACE) } unless get_comments.empty? end # Sometimes an address will not have a display name, but might have the name # as a comment field after the address. This returns that name if it exists. # # a = Address.new('mikel@test.lindsaar.net (Mikel Lindsaar)') # a.name #=> 'Mikel Lindsaar' def name parse unless @parsed get_name end # Returns the format of the address, or returns nothing # # a = Address.new('Mikel Lindsaar (My email address) ') # a.format #=> 'Mikel Lindsaar (My email address)' def to_s parse unless @parsed format end # Shows the Address object basic details, including the Address # a = Address.new('Mikel (My email) ') # a.inspect #=> "# (My email)| >" def inspect parse unless @parsed "#<#{self.class}:#{self.object_id} Address: |#{to_s}| >" end def encoded @output_type = :encode format end def decoded @output_type = :decode format end def group @data && @data.group end private def parse(value = nil) @parsed = true @data = nil case value when Mail::Parsers::AddressStruct @data = value when String unless Utilities.blank?(value) address_list = Mail::Parsers::AddressListsParser.new.parse(value) @data = address_list.addresses.first end end end def strip_all_comments(string) unless Utilities.blank?(comments) comments.each do |comment| string = string.gsub("(#{comment})", EMPTY) end end string.strip end def strip_domain_comments(value) unless Utilities.blank?(comments) comments.each do |comment| if @data.domain && @data.domain.include?("(#{comment})") value = value.gsub("(#{comment})", EMPTY) end end end value.to_s.strip end def get_display_name if @data.display_name str = strip_all_comments(@data.display_name.to_s) elsif @data.comments && @data.domain str = strip_domain_comments(format_comments) end str unless Utilities.blank?(str) end def get_name if display_name str = display_name elsif comments str = "(#{comments.join(SPACE).squeeze(SPACE)})" end unparen(str) unless Utilities.blank?(str) end def format_comments if comments comment_text = comments.map {|c| escape_paren(c) }.join(SPACE).squeeze(SPACE) @format_comments ||= "(#{comment_text})" else nil end end def get_local @data && @data.local end def get_domain @data && @data.domain end def get_comments @data && @data.comments end end end mail-2.6.4/lib/mail/elements/address_list.rb000066400000000000000000000026461267453234600210020ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class AddressList # :nodoc: # Mail::AddressList is the class that parses To, From and other address fields from # emails passed into Mail. # # AddressList provides a way to query the groups and mailbox lists of the passed in # string. # # It can supply all addresses in an array, or return each address as an address object. # # Mail::AddressList requires a correctly formatted group or mailbox list per RFC2822 or # RFC822. It also handles all obsolete versions in those RFCs. # # list = 'ada@test.lindsaar.net, My Group: mikel@test.lindsaar.net, Bob ;' # a = AddressList.new(list) # a.addresses #=> [# ["My Group"] def initialize(string) @addresses_grouped_by_group = nil @address_list = Parsers::AddressListsParser.new.parse(string) end # Returns a list of address objects from the parsed line def addresses @addresses ||= @address_list.addresses.map do |address_data| Mail::Address.new(address_data) end end def addresses_grouped_by_group addresses.select(&:group).group_by(&:group) end # Returns the names as an array of strings of all groups def group_names # :nodoc: @address_list.group_names end end end mail-2.6.4/lib/mail/elements/content_disposition_element.rb000066400000000000000000000011221267453234600241150ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class ContentDispositionElement # :nodoc: include Mail::Utilities def initialize( string ) content_disposition = Mail::Parsers::ContentDispositionParser.new.parse(cleaned(string)) @disposition_type = content_disposition.disposition_type @parameters = content_disposition.parameters end def disposition_type @disposition_type end def parameters @parameters end def cleaned(string) string =~ /(.+);\s*$/ ? $1 : string end end end mail-2.6.4/lib/mail/elements/content_location_element.rb000066400000000000000000000006121267453234600233640ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class ContentLocationElement # :nodoc: include Mail::Utilities def initialize( string ) content_location = Mail::Parsers::ContentLocationParser.new.parse(string) @location = content_location.location end def location @location end def to_s(*args) location.to_s end end end mail-2.6.4/lib/mail/elements/content_transfer_encoding_element.rb000066400000000000000000000005771267453234600252600ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class ContentTransferEncodingElement include Mail::Utilities def initialize(string) content_transfer_encoding = Mail::Parsers::ContentTransferEncodingParser.new.parse(string) @encoding = content_transfer_encoding.encoding end def encoding @encoding end end end mail-2.6.4/lib/mail/elements/content_type_element.rb000066400000000000000000000011511267453234600225340ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class ContentTypeElement # :nodoc: include Mail::Utilities def initialize( string ) content_type = Mail::Parsers::ContentTypeParser.new.parse(cleaned(string)) @main_type = content_type.main_type @sub_type = content_type.sub_type @parameters = content_type.parameters end def main_type @main_type end def sub_type @sub_type end def parameters @parameters end def cleaned(string) string =~ /(.+);\s*$/ ? $1 : string end end end mail-2.6.4/lib/mail/elements/date_time_element.rb000066400000000000000000000006701267453234600217610ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class DateTimeElement # :nodoc: include Mail::Utilities def initialize( string ) date_time = Mail::Parsers::DateTimeParser.new.parse(string) @date_string = date_time.date_string @time_string = date_time.time_string end def date_string @date_string end def time_string @time_string end end end mail-2.6.4/lib/mail/elements/envelope_from_element.rb000066400000000000000000000017141267453234600226660ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class EnvelopeFromElement include Mail::Utilities def initialize( string ) @envelope_from = Mail::Parsers::EnvelopeFromParser.new.parse(string) @address = @envelope_from.address @date_time = ::DateTime.parse(@envelope_from.ctime_date) end def date_time @date_time end def address @address end # RFC 4155: # a timestamp indicating the UTC date and time when the message # was originally received, conformant with the syntax of the # traditional UNIX 'ctime' output sans timezone (note that the # use of UTC precludes the need for a timezone indicator); def formatted_date_time if @date_time.respond_to?(:ctime) @date_time.ctime else @date_time.strftime '%a %b %e %T %Y' end end def to_s "#{@address} #{formatted_date_time}" end end end mail-2.6.4/lib/mail/elements/message_ids_element.rb000066400000000000000000000010561267453234600223100ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class MessageIdsElement include Mail::Utilities def initialize(string) raise Mail::Field::ParseError.new(Mail::MessageIdsElement, string, 'nil is invalid') if string.nil? @message_ids = Mail::Parsers::MessageIdsParser.new.parse(string).message_ids.map { |msg_id| clean_msg_id(msg_id) } end def message_ids @message_ids end def message_id @message_ids.first end def clean_msg_id( val ) val =~ /.*<(.*)>.*/ ; $1 end end end mail-2.6.4/lib/mail/elements/mime_version_element.rb000066400000000000000000000006151267453234600225210ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class MimeVersionElement include Mail::Utilities def initialize( string ) mime_version = Mail::Parsers::MimeVersionParser.new.parse(string) @major = mime_version.major @minor = mime_version.minor end def major @major end def minor @minor end end end mail-2.6.4/lib/mail/elements/phrase_list.rb000066400000000000000000000004741267453234600206340ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class PhraseList include Mail::Utilities def initialize(string) @phrase_lists = Mail::Parsers::PhraseListsParser.new.parse(string) end def phrases @phrase_lists.phrases.map { |p| unquote(p) } end end end mail-2.6.4/lib/mail/elements/received_element.rb000066400000000000000000000007671267453234600216230ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class ReceivedElement include Mail::Utilities def initialize( string ) received = Mail::Parsers::ReceivedParser.new.parse(string) @date_time = ::DateTime.parse("#{received.date} #{received.time}") @info = received.info end def date_time @date_time end def info @info end def to_s(*args) "#{@info}; #{@date_time.to_s(*args)}" end end end mail-2.6.4/lib/mail/encodings.rb000066400000000000000000000217231267453234600164540ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # Raised when attempting to decode an unknown encoding type class UnknownEncodingType < StandardError #:nodoc: end module Encodings include Mail::Constants extend Mail::Utilities @transfer_encodings = {} # Register transfer encoding # # Example # # Encodings.register "base64", Mail::Encodings::Base64 def Encodings.register(name, cls) @transfer_encodings[get_name(name)] = cls end # Is the encoding we want defined? # # Example: # # Encodings.defined?(:base64) #=> true def Encodings.defined?( str ) @transfer_encodings.include? get_name(str) end # Gets a defined encoding type, QuotedPrintable or Base64 for now. # # Each encoding needs to be defined as a Mail::Encodings::ClassName for # this to work, allows us to add other encodings in the future. # # Example: # # Encodings.get_encoding(:base64) #=> Mail::Encodings::Base64 def Encodings.get_encoding( str ) @transfer_encodings[get_name(str)] end def Encodings.get_all @transfer_encodings.values end def Encodings.get_name(enc) underscoreize(enc).downcase end def Encodings.transcode_charset(str, from_charset, to_charset = 'UTF-8') if from_charset RubyVer.transcode_charset str, from_charset, to_charset else str end end # Encodes a parameter value using URI Escaping, note the language field 'en' can # be set using Mail::Configuration, like so: # # Mail.defaults do # param_encode_language 'jp' # end # # The character set used for encoding will either be the value of $KCODE for # Ruby < 1.9 or the encoding on the string passed in. # # Example: # # Mail::Encodings.param_encode("This is fun") #=> "us-ascii'en'This%20is%20fun" def Encodings.param_encode(str) case when str.ascii_only? && str =~ TOKEN_UNSAFE %Q{"#{str}"} when str.ascii_only? str else RubyVer.param_encode(str) end end # Decodes a parameter value using URI Escaping. # # Example: # # Mail::Encodings.param_decode("This%20is%20fun", 'us-ascii') #=> "This is fun" # # str = Mail::Encodings.param_decode("This%20is%20fun", 'iso-8559-1') # str.encoding #=> 'ISO-8859-1' ## Only on Ruby 1.9 # str #=> "This is fun" def Encodings.param_decode(str, encoding) RubyVer.param_decode(str, encoding) end # Decodes or encodes a string as needed for either Base64 or QP encoding types in # the =??[QB]??=" format. # # The output type needs to be :decode to decode the input string or :encode to # encode the input string. The character set used for encoding will either be # the value of $KCODE for Ruby < 1.9 or the encoding on the string passed in. # # On encoding, will only send out Base64 encoded strings. def Encodings.decode_encode(str, output_type) case when output_type == :decode Encodings.value_decode(str) else if str.ascii_only? str else Encodings.b_value_encode(str, find_encoding(str)) end end end # Decodes a given string as Base64 or Quoted Printable, depending on what # type it is. # # String has to be of the format =??[QB]??= def Encodings.value_decode(str) # Optimization: If there's no encoded-words in the string, just return it return str unless str =~ ENCODED_VALUE lines = collapse_adjacent_encodings(str) # Split on white-space boundaries with capture, so we capture the white-space as well lines.each do |line| line.gsub!(ENCODED_VALUE) do |string| case $2 when *B_VALUES then b_value_decode(string) when *Q_VALUES then q_value_decode(string) end end end.join("") end # Takes an encoded string of the format =??[QB]??= def Encodings.unquote_and_convert_to(str, to_encoding) output = value_decode( str ).to_s # output is already converted to UTF-8 if 'utf8' == to_encoding.to_s.downcase.gsub("-", "") output elsif to_encoding begin if RUBY_VERSION >= '1.9' output.encode(to_encoding) else require 'iconv' Iconv.iconv(to_encoding, 'UTF-8', output).first end rescue Iconv::IllegalSequence, Iconv::InvalidEncoding, Errno::EINVAL # the 'from' parameter specifies a charset other than what the text # actually is...not much we can do in this case but just return the # unconverted text. # # Ditto if either parameter represents an unknown charset, like # X-UNKNOWN. output end else output end end def Encodings.address_encode(address, charset = 'utf-8') if address.is_a?(Array) # loop back through for each element address.compact.map { |a| Encodings.address_encode(a, charset) }.join(", ") else # find any word boundary that is not ascii and encode it encode_non_usascii(address, charset) if address end end def Encodings.encode_non_usascii(address, charset) return address if address.ascii_only? or charset.nil? us_ascii = %Q{\x00-\x7f} # Encode any non usascii strings embedded inside of quotes address = address.gsub(/(".*?[^#{us_ascii}].*?")/) { |s| Encodings.b_value_encode(unquote(s), charset) } # Then loop through all remaining items and encode as needed tokens = address.split(/\s/) map_with_index(tokens) do |word, i| if word.ascii_only? word else previous_non_ascii = i>0 && tokens[i-1] && !tokens[i-1].ascii_only? if previous_non_ascii #why are we adding an extra space here? word = " #{word}" end Encodings.b_value_encode(word, charset) end end.join(' ') end # Encode a string with Base64 Encoding and returns it ready to be inserted # as a value for a field, that is, in the =??B??= format # # Example: # # Encodings.b_value_encode('This is あ string', 'UTF-8') # #=> "=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=" def Encodings.b_value_encode(encoded_str, encoding = nil) return encoded_str if encoded_str.to_s.ascii_only? string, encoding = RubyVer.b_value_encode(encoded_str, encoding) map_lines(string) do |str| "=?#{encoding}?B?#{str.chomp}?=" end.join(" ") end # Encode a string with Quoted-Printable Encoding and returns it ready to be inserted # as a value for a field, that is, in the =??Q??= format # # Example: # # Encodings.q_value_encode('This is あ string', 'UTF-8') # #=> "=?UTF-8?Q?This_is_=E3=81=82_string?=" def Encodings.q_value_encode(encoded_str, encoding = nil) return encoded_str if encoded_str.to_s.ascii_only? string, encoding = RubyVer.q_value_encode(encoded_str, encoding) string.gsub!("=\r\n", '') # We already have limited the string to the length we want map_lines(string) do |str| "=?#{encoding}?Q?#{str.chomp.gsub(/ /, '_')}?=" end.join(" ") end private # Decodes a Base64 string from the "=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=" format # # Example: # # Encodings.b_value_decode("=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=") # #=> 'This is あ string' def Encodings.b_value_decode(str) RubyVer.b_value_decode(str) end # Decodes a Quoted-Printable string from the "=?UTF-8?Q?This_is_=E3=81=82_string?=" format # # Example: # # Encodings.q_value_decode("=?UTF-8?Q?This_is_=E3=81=82_string?=") # #=> 'This is あ string' def Encodings.q_value_decode(str) RubyVer.q_value_decode(str) end def Encodings.find_encoding(str) RUBY_VERSION >= '1.9' ? str.encoding : $KCODE end # Gets the encoding type (Q or B) from the string. def Encodings.value_encoding_from_string(str) str[ENCODED_VALUE, 1] end # When the encoded string consists of multiple lines, lines with the same # encoding (Q or B) can be joined together. # # String has to be of the format =??[QB]??= def Encodings.collapse_adjacent_encodings(str) results = [] previous_encoding = nil lines = str.split(FULL_ENCODED_VALUE) lines.each_slice(2) do |unencoded, encoded| if encoded encoding = value_encoding_from_string(encoded) if encoding == previous_encoding && Utilities.blank?(unencoded) results.last << encoded else results << unencoded unless unencoded == EMPTY results << encoded end previous_encoding = encoding else results << unencoded end end results end end end mail-2.6.4/lib/mail/encodings/000077500000000000000000000000001267453234600161225ustar00rootroot00000000000000mail-2.6.4/lib/mail/encodings/7bit.rb000066400000000000000000000010751267453234600173170ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/encodings/8bit' module Mail module Encodings class SevenBit < EightBit NAME = '7bit' PRIORITY = 1 # 7bit and 8bit operate the same # Decode the string def self.decode(str) super end # Encode the string def self.encode(str) super end # Idenity encodings have a fixed cost, 1 byte out per 1 byte in def self.cost(str) super end Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/encodings/8bit.rb000066400000000000000000000015001267453234600173110ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/encodings/binary' module Mail module Encodings class EightBit < Binary NAME = '8bit' PRIORITY = 4 # 8bit is an identiy encoding, meaning nothing to do # Decode the string def self.decode(str) ::Mail::Utilities.to_lf str end # Encode the string def self.encode(str) ::Mail::Utilities.to_crlf str end # Idenity encodings have a fixed cost, 1 byte out per 1 byte in def self.cost(str) 1.0 end # Per RFC 2821 4.5.3.1, SMTP lines may not be longer than 1000 octets including the . def self.compatible_input?(str) !str.lines.find { |line| line.length > 998 } end Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/encodings/base64.rb000066400000000000000000000014531267453234600175360ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/encodings/7bit' module Mail module Encodings class Base64 < SevenBit NAME = 'base64' PRIORITY = 3 def self.can_encode?(enc) true end # Decode the string from Base64 def self.decode(str) RubyVer.decode_base64( str ) end # Encode the string to Base64 def self.encode(str) ::Mail::Utilities.to_crlf(RubyVer.encode_base64( str )) end # Base64 has a fixed cost, 4 bytes out per 3 bytes in def self.cost(str) 4.0/3 end # Base64 inserts newlines automatically and cannot violate the SMTP spec. def self.compatible_input?(str) true end Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/encodings/binary.rb000066400000000000000000000011351267453234600177330ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/encodings/transfer_encoding' module Mail module Encodings class Binary < TransferEncoding NAME = 'binary' PRIORITY = 5 # Binary is an identiy encoding, meaning nothing to do # Decode the string def self.decode(str) str end # Encode the string def self.encode(str) str end # Idenity encodings have a fixed cost, 1 byte out per 1 byte in def self.cost(str) 1.0 end Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/encodings/quoted_printable.rb000066400000000000000000000022531267453234600220120ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/encodings/7bit' module Mail module Encodings class QuotedPrintable < SevenBit NAME='quoted-printable' PRIORITY = 2 def self.can_encode?(str) EightBit.can_encode? str end # Decode the string from Quoted-Printable. Cope with hard line breaks # that were incorrectly encoded as hex instead of literal CRLF. def self.decode(str) ::Mail::Utilities.to_lf str.gsub(/(?:=0D=0A|=0D|=0A)\r\n/, "\r\n").unpack("M*").first end def self.encode(str) ::Mail::Utilities.to_crlf([::Mail::Utilities.to_lf(str)].pack("M")) end def self.cost(str) # These bytes probably do not need encoding c = str.count("\x9\xA\xD\x20-\x3C\x3E-\x7E") # Everything else turns into =XX where XX is a # two digit hex number (taking 3 bytes) total = (str.bytesize - c)*3 + c total.to_f/str.bytesize end # QP inserts newlines automatically and cannot violate the SMTP spec. def self.compatible_input?(str) true end private Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/encodings/transfer_encoding.rb000066400000000000000000000030601267453234600221400ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail module Encodings class TransferEncoding NAME = '' PRIORITY = -1 def self.can_transport?(enc) enc = Encodings.get_name(enc) if Encodings.defined? enc Encodings.get_encoding(enc).new.is_a? self else false end end def self.can_encode?(enc) can_transport? enc end def self.cost(str) raise "Unimplemented" end def self.compatible_input?(str) true end def self.to_s self::NAME end def self.get_best_compatible(source_encoding, str) if self.can_transport?(source_encoding) && self.compatible_input?(str) source_encoding else choices = Encodings.get_all.select do |enc| self.can_transport?(enc) && enc.can_encode?(source_encoding) end best = nil best_cost = nil choices.each do |enc| # If the current choice cannot be transported safely, # give priority to other choices but allow it to be used as a fallback. this_cost = enc.cost(str) if enc.compatible_input?(str) if !best_cost || (this_cost && this_cost < best_cost) best_cost = this_cost best = enc elsif this_cost == best_cost best = enc if enc::PRIORITY < best::PRIORITY end end best end end def to_s self.class.to_s end end end end mail-2.6.4/lib/mail/encodings/unix_to_unix.rb000066400000000000000000000005071267453234600212010ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Encodings module UnixToUnix NAME = "x-uuencode" def self.decode(str) str.sub(/\Abegin \d+ [^\n]*\n/, '').unpack('u').first end def self.encode(str) [str].pack("u") end Encodings.register(NAME, self) end end end mail-2.6.4/lib/mail/envelope.rb000066400000000000000000000012461267453234600163160ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Mail Envelope # # The Envelope class provides a field for the first line in an # mbox file, that looks like "From mikel@test.lindsaar.net DATETIME" # # This envelope class reads that line, and turns it into an # Envelope.from and Envelope.date for your use. module Mail class Envelope < StructuredField def initialize(*args) super(FIELD_NAME, strip_field(FIELD_NAME, args.last)) end def element @element ||= Mail::EnvelopeFromElement.new(value) end def date ::DateTime.parse("#{element.date_time}") end def from element.address end end end mail-2.6.4/lib/mail/field.rb000066400000000000000000000202751267453234600155670ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/fields' # encoding: utf-8 module Mail # Provides a single class to call to create a new structured or unstructured # field. Works out per RFC what field of field it is being given and returns # the correct field of class back on new. # # ===Per RFC 2822 # # 2.2. Header Fields # # Header fields are lines composed of a field name, followed by a colon # (":"), followed by a field body, and terminated by CRLF. A field # name MUST be composed of printable US-ASCII characters (i.e., # characters that have values between 33 and 126, inclusive), except # colon. A field body may be composed of any US-ASCII characters, # except for CR and LF. However, a field body may contain CRLF when # used in header "folding" and "unfolding" as described in section # 2.2.3. All field bodies MUST conform to the syntax described in # sections 3 and 4 of this standard. # class Field include Utilities include Comparable STRUCTURED_FIELDS = %w[ bcc cc content-description content-disposition content-id content-location content-transfer-encoding content-type date from in-reply-to keywords message-id mime-version received references reply-to resent-bcc resent-cc resent-date resent-from resent-message-id resent-sender resent-to return-path sender to ] KNOWN_FIELDS = STRUCTURED_FIELDS + ['comments', 'subject'] FIELDS_MAP = { "to" => ToField, "cc" => CcField, "bcc" => BccField, "message-id" => MessageIdField, "in-reply-to" => InReplyToField, "references" => ReferencesField, "subject" => SubjectField, "comments" => CommentsField, "keywords" => KeywordsField, "date" => DateField, "from" => FromField, "sender" => SenderField, "reply-to" => ReplyToField, "resent-date" => ResentDateField, "resent-from" => ResentFromField, "resent-sender" => ResentSenderField, "resent-to" => ResentToField, "resent-cc" => ResentCcField, "resent-bcc" => ResentBccField, "resent-message-id" => ResentMessageIdField, "return-path" => ReturnPathField, "received" => ReceivedField, "mime-version" => MimeVersionField, "content-transfer-encoding" => ContentTransferEncodingField, "content-description" => ContentDescriptionField, "content-disposition" => ContentDispositionField, "content-type" => ContentTypeField, "content-id" => ContentIdField, "content-location" => ContentLocationField, } FIELD_NAME_MAP = FIELDS_MAP.inject({}) do |map, (field, field_klass)| map.update(field => field_klass::CAPITALIZED_FIELD) end # Generic Field Exception class FieldError < StandardError end # Raised when a parsing error has occurred (ie, a StructuredField has tried # to parse a field that is invalid or improperly written) class ParseError < FieldError #:nodoc: attr_accessor :element, :value, :reason def initialize(element, value, reason) @element = element @value = value @reason = reason super("#{element} can not parse |#{value}|\nReason was: #{reason}") end end # Raised when attempting to set a structured field's contents to an invalid syntax class SyntaxError < FieldError #:nodoc: end # Accepts a string: # # Field.new("field-name: field data") # # Or name, value pair: # # Field.new("field-name", "value") # # Or a name by itself: # # Field.new("field-name") # # Note, does not want a terminating carriage return. Returns # self appropriately parsed. If value is not a string, then # it will be passed through as is, for example, content-type # field can accept an array with the type and a hash of # parameters: # # Field.new('content-type', ['text', 'plain', {:charset => 'UTF-8'}]) def initialize(name, value = nil, charset = 'utf-8') case when name.index(COLON) # Field.new("field-name: field data") @charset = Utilities.blank?(value) ? charset : value @name = name[FIELD_PREFIX] @raw_value = name @value = nil when Utilities.blank?(value) # Field.new("field-name") @name = name @value = nil @raw_value = nil @charset = charset else # Field.new("field-name", "value") @name = name @value = value @raw_value = nil @charset = charset end @name = FIELD_NAME_MAP[@name.to_s.downcase] || @name end def field=(value) @field = value end def field _, @value = split(@raw_value) if @raw_value && !@value @field ||= create_field(@name, @value, @charset) end def name @name end def value field.value end def value=(val) @field = create_field(name, val, @charset) end def to_s field.to_s end def inspect "#<#{self.class.name} 0x#{(object_id * 2).to_s(16)} #{instance_variables.map do |ivar| "#{ivar}=#{instance_variable_get(ivar).inspect}" end.join(" ")}>" end def update(name, value) @field = create_field(name, value, @charset) end def same( other ) return false unless other.kind_of?(self.class) match_to_s(other.name, self.name) end def ==( other ) return false unless other.kind_of?(self.class) match_to_s(other.name, self.name) && match_to_s(other.value, self.value) end def responsible_for?( val ) name.to_s.casecmp(val.to_s) == 0 end def <=>( other ) self.field_order_id <=> other.field_order_id end def field_order_id @field_order_id ||= (FIELD_ORDER_LOOKUP[self.name.to_s.downcase] || 100) end def method_missing(name, *args, &block) field.send(name, *args, &block) end if RUBY_VERSION >= '1.9.2' def respond_to_missing?(method_name, include_private) field.respond_to?(method_name, include_private) || super end else def respond_to?(method_name, include_private = false) field.respond_to?(method_name, include_private) || super end end FIELD_ORDER = %w[ return-path received resent-date resent-from resent-sender resent-to resent-cc resent-bcc resent-message-id date from sender reply-to to cc bcc message-id in-reply-to references subject comments keywords mime-version content-type content-transfer-encoding content-location content-disposition content-description ] FIELD_ORDER_LOOKUP = Hash[FIELD_ORDER.each_with_index.to_a] private def split(raw_field) match_data = raw_field.mb_chars.match(FIELD_SPLIT) [match_data[1].to_s.mb_chars.strip, match_data[2].to_s.mb_chars.strip.to_s] rescue STDERR.puts "WARNING: Could not parse (and so ignoring) '#{raw_field}'" end # 2.2.3. Long Header Fields # # The process of moving from this folded multiple-line representation # of a header field to its single line representation is called # "unfolding". Unfolding is accomplished by simply removing any CRLF # that is immediately followed by WSP. Each header field should be # treated in its unfolded form for further syntactic and semantic # evaluation. def unfold(string) string.gsub(/[\r\n \t]+/m, ' ') end def create_field(name, value, charset) value = unfold(value) if value.is_a?(String) begin new_field(name, value, charset) rescue Mail::Field::ParseError => e field = Mail::UnstructuredField.new(name, value) field.errors << [name, value, e] field end end def new_field(name, value, charset) lower_case_name = name.to_s.downcase if field_klass = FIELDS_MAP[lower_case_name] field_klass.new(value, charset) else OptionalField.new(name, value, charset) end end end end mail-2.6.4/lib/mail/field_list.rb000066400000000000000000000015431267453234600166170ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # Field List class provides an enhanced array that keeps a list of # email fields in order. And allows you to insert new fields without # having to worry about the order they will appear in. class FieldList < Array include Enumerable # Insert the field in sorted order. # # Heavily based on bisect.insort from Python, which is: # Copyright (C) 2001-2013 Python Software Foundation. # Licensed under # From def <<( new_field ) lo = 0 hi = size while lo < hi mid = (lo + hi).div(2) if new_field < self[mid] hi = mid else lo = mid + 1 end end insert(lo, new_field) end end end mail-2.6.4/lib/mail/fields.rb000066400000000000000000000043041267453234600157450ustar00rootroot00000000000000# frozen_string_literal: true module Mail register_autoload :UnstructuredField, 'mail/fields/unstructured_field' register_autoload :StructuredField, 'mail/fields/structured_field' register_autoload :OptionalField, 'mail/fields/optional_field' register_autoload :BccField, 'mail/fields/bcc_field' register_autoload :CcField, 'mail/fields/cc_field' register_autoload :CommentsField, 'mail/fields/comments_field' register_autoload :ContentDescriptionField, 'mail/fields/content_description_field' register_autoload :ContentDispositionField, 'mail/fields/content_disposition_field' register_autoload :ContentIdField, 'mail/fields/content_id_field' register_autoload :ContentLocationField, 'mail/fields/content_location_field' register_autoload :ContentTransferEncodingField, 'mail/fields/content_transfer_encoding_field' register_autoload :ContentTypeField, 'mail/fields/content_type_field' register_autoload :DateField, 'mail/fields/date_field' register_autoload :FromField, 'mail/fields/from_field' register_autoload :InReplyToField, 'mail/fields/in_reply_to_field' register_autoload :KeywordsField, 'mail/fields/keywords_field' register_autoload :MessageIdField, 'mail/fields/message_id_field' register_autoload :MimeVersionField, 'mail/fields/mime_version_field' register_autoload :ReceivedField, 'mail/fields/received_field' register_autoload :ReferencesField, 'mail/fields/references_field' register_autoload :ReplyToField, 'mail/fields/reply_to_field' register_autoload :ResentBccField, 'mail/fields/resent_bcc_field' register_autoload :ResentCcField, 'mail/fields/resent_cc_field' register_autoload :ResentDateField, 'mail/fields/resent_date_field' register_autoload :ResentFromField, 'mail/fields/resent_from_field' register_autoload :ResentMessageIdField, 'mail/fields/resent_message_id_field' register_autoload :ResentSenderField, 'mail/fields/resent_sender_field' register_autoload :ResentToField, 'mail/fields/resent_to_field' register_autoload :ReturnPathField, 'mail/fields/return_path_field' register_autoload :SenderField, 'mail/fields/sender_field' register_autoload :SubjectField, 'mail/fields/subject_field' register_autoload :ToField, 'mail/fields/to_field' end mail-2.6.4/lib/mail/fields/000077500000000000000000000000001267453234600154175ustar00rootroot00000000000000mail-2.6.4/lib/mail/fields/bcc_field.rb000066400000000000000000000040431267453234600176370ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Blind Carbon Copy Field # # The Bcc field inherits from StructuredField and handles the Bcc: header # field in the email. # # Sending bcc to a mail message will instantiate a Mail::Field object that # has a BccField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Bcc field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.bcc = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:bcc] #=> '# '# '# '' # Bcc field does not get output into an email # mail[:bcc].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:bcc].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class BccField < StructuredField include Mail::CommonAddress FIELD_NAME = 'bcc' CAPITALIZED_FIELD = 'Bcc' def initialize(value = '', charset = 'utf-8') @charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def include_in_headers=(include_in_headers) @include_in_headers = include_in_headers end def include_in_headers defined?(@include_in_headers) ? @include_in_headers : self.include_in_headers = false end # Bcc field should not be :encoded by default def encoded if include_in_headers do_encode(CAPITALIZED_FIELD) else '' end end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/cc_field.rb000066400000000000000000000033121267453234600174730ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Carbon Copy Field # # The Cc field inherits from StructuredField and handles the Cc: header # field in the email. # # Sending cc to a mail message will instantiate a Mail::Field object that # has a CcField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Cc field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.cc = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:cc] #=> '# '# '# 'Cc: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:cc].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:cc].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class CcField < StructuredField include Mail::CommonAddress FIELD_NAME = 'cc' CAPITALIZED_FIELD = 'Cc' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/comments_field.rb000066400000000000000000000024461267453234600207420ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Comments Field # # The Comments field inherits from UnstructuredField and handles the Comments: # header field in the email. # # Sending comments to a mail message will instantiate a Mail::Field object that # has a CommentsField as its field type. # # An email header can have as many comments fields as it wants. There is no upper # limit, the comments field is also optional (that is, no comment is needed) # # == Examples: # # mail = Mail.new # mail.comments = 'This is a comment' # mail.comments #=> 'This is a comment' # mail[:comments] #=> '# '# '# ['This is a comment', "This is another comment"] # module Mail class CommentsField < UnstructuredField FIELD_NAME = 'comments' CAPITALIZED_FIELD = 'Comments' def initialize(value = nil, charset = 'utf-8') @charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value)) self.parse self end end end mail-2.6.4/lib/mail/fields/common/000077500000000000000000000000001267453234600167075ustar00rootroot00000000000000mail-2.6.4/lib/mail/fields/common/address_container.rb000066400000000000000000000003521267453234600227230ustar00rootroot00000000000000# frozen_string_literal: true module Mail class AddressContainer < Array def initialize(field, list = []) @field = field super(list) end def << (address) @field << address end end endmail-2.6.4/lib/mail/fields/common/common_address.rb000066400000000000000000000074271267453234600222430ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/fields/common/address_container' module Mail module CommonAddress # :nodoc: def parse(val = value) unless Utilities.blank?(val) @address_list = AddressList.new(encode_if_needed(val)) else nil end end def charset @charset end def encode_if_needed(val) Encodings.address_encode(val, charset) end # Allows you to iterate through each address object in the address_list def each address_list.addresses.each do |address| yield(address) end end # Returns the address string of all the addresses in the address list def addresses list = address_list.addresses.map { |a| a.address } Mail::AddressContainer.new(self, list) end # Returns the formatted string of all the addresses in the address list def formatted list = address_list.addresses.map { |a| a.format } Mail::AddressContainer.new(self, list) end # Returns the display name of all the addresses in the address list def display_names list = address_list.addresses.map { |a| a.display_name } Mail::AddressContainer.new(self, list) end # Returns the actual address objects in the address list def addrs list = address_list.addresses Mail::AddressContainer.new(self, list) end # Returns a hash of group name => address strings for the address list def groups address_list.addresses_grouped_by_group end # Returns the addresses that are part of groups def group_addresses decoded_group_addresses end # Returns a list of decoded group addresses def decoded_group_addresses groups.map { |k,v| v.map { |a| a.decoded } }.flatten end # Returns a list of encoded group addresses def encoded_group_addresses groups.map { |k,v| v.map { |a| a.encoded } }.flatten end # Returns the name of all the groups in a string def group_names # :nodoc: address_list.group_names end def default addresses end def <<(val) case when val.nil? raise ArgumentError, "Need to pass an address to <<" when Utilities.blank?(val) parse(encoded) else self.value = [self.value, val].reject {|a| Utilities.blank?(a) }.join(", ") end end def value=(val) super parse(self.value) end private def do_encode(field_name) return '' if Utilities.blank?(value) address_array = address_list.addresses.reject { |a| encoded_group_addresses.include?(a.encoded) }.compact.map { |a| a.encoded } address_text = address_array.join(", \r\n\s") group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.encoded }.join(", \r\n\s")};" } group_text = group_array.join(" \r\n\s") return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) } "#{field_name}: #{return_array.join(", \r\n\s")}\r\n" end def do_decode return nil if Utilities.blank?(value) address_array = address_list.addresses.reject { |a| decoded_group_addresses.include?(a.decoded) }.map { |a| a.decoded } address_text = address_array.join(", ") group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.decoded }.join(", ")};" } group_text = group_array.join(" ") return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) } return_array.join(", ") end def address_list # :nodoc: @address_list ||= AddressList.new(value) end def get_group_addresses(group_list) if group_list.respond_to?(:addresses) group_list.addresses.map do |address| Mail::Address.new(address) end else [] end end end end mail-2.6.4/lib/mail/fields/common/common_date.rb000066400000000000000000000012321267453234600215170ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail module CommonDate # :nodoc: # Returns a date time object of the parsed date def date_time ::DateTime.parse("#{element.date_string} #{element.time_string}") end def default date_time end def parse(val = value) unless Utilities.blank?(val) @element = Mail::DateTimeElement.new(val) else nil end end private def do_encode(field_name) "#{field_name}: #{value}\r\n" end def do_decode "#{value}" end def element @element ||= Mail::DateTimeElement.new(value) end end end mail-2.6.4/lib/mail/fields/common/common_field.rb000066400000000000000000000017561267453234600217000ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail module CommonField # :nodoc: include Mail::Constants def name=(value) @name = value end def name @name ||= nil end def value=(value) @length = nil @tree = nil @element = nil @value = value end def value @value end def to_s decoded.to_s end def default decoded end def field_length @length ||= "#{name}: #{encode(decoded)}".length end def responsible_for?( val ) name.to_s.casecmp(val.to_s) == 0 end private def strip_field(field_name, value) if value.is_a?(Array) value else value.to_s.sub(/\A#{field_name}:\s+/i, EMPTY) end end FILENAME_RE = /\b(filename|name)=([^;"\r\n]+\s[^;"\r\n]+)/ def ensure_filename_quoted(value) if value.is_a?(String) value.sub FILENAME_RE, '\1="\2"' else value end end end end mail-2.6.4/lib/mail/fields/common/common_message_id.rb000066400000000000000000000016701267453234600227100ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail module CommonMessageId # :nodoc: def element @element ||= Mail::MessageIdsElement.new(value) unless Utilities.blank?(value) end def parse(val = value) unless Utilities.blank?(val) @element = Mail::MessageIdsElement.new(val) else nil end end def message_id element.message_id if element end def message_ids element.message_ids if element end def default return nil unless message_ids if message_ids.length == 1 message_ids[0] else message_ids end end private def do_encode(field_name) %Q{#{field_name}: #{formated_message_ids("\r\n ")}\r\n} end def do_decode formated_message_ids(' ') end def formated_message_ids(join) message_ids.map{ |m| "<#{m}>" }.join(join) if message_ids end end end mail-2.6.4/lib/mail/fields/common/parameter_hash.rb000066400000000000000000000033261267453234600222230ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # ParameterHash is an intelligent Hash that allows you to add # parameter values including the MIME extension paramaters that # have the name*0="blah", name*1="bleh" keys, and will just return # a single key called name="blahbleh" and do any required un-encoding # to make that happen # Parameters are defined in RFC2045, split keys are in RFC2231 class ParameterHash < IndifferentHash include Mail::Utilities def [](key_name) key_pattern = Regexp.escape(key_name.to_s) pairs = [] exact = nil each do |k,v| if k =~ /^#{key_pattern}(\*|$)/i if $1 == ASTERISK pairs << [k, v] else exact = k end end end if pairs.empty? # Just dealing with a single value pair super(exact || key_name) else # Dealing with a multiple value pair or a single encoded value pair string = pairs.sort { |a,b| a.first.to_s <=> b.first.to_s }.map { |v| v.last }.join('') if mt = string.match(/([\w\-]+)'(\w\w)'(.*)/) string = mt[3] encoding = mt[1] else encoding = nil end Mail::Encodings.param_decode(string, encoding) end end def encoded map.sort_by { |a| a.first.to_s }.map! do |key_name, value| unless value.ascii_only? value = Mail::Encodings.param_encode(value) key_name = "#{key_name}*" end %Q{#{key_name}=#{quote_token(value)}} end.join(";\r\n\s") end def decoded map.sort_by { |a| a.first.to_s }.map! do |key_name, value| %Q{#{key_name}=#{quote_token(value)}} end.join("; ") end end end mail-2.6.4/lib/mail/fields/content_description_field.rb000066400000000000000000000006431267453234600231670ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # # module Mail class ContentDescriptionField < UnstructuredField FIELD_NAME = 'content-description' CAPITALIZED_FIELD = 'Content-Description' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end end end mail-2.6.4/lib/mail/fields/content_disposition_field.rb000066400000000000000000000031221267453234600232030ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/fields/common/parameter_hash' module Mail class ContentDispositionField < StructuredField FIELD_NAME = 'content-disposition' CAPITALIZED_FIELD = 'Content-Disposition' def initialize(value = nil, charset = 'utf-8') self.charset = charset value = ensure_filename_quoted(value) super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::ContentDispositionElement.new(val) end end def element @element ||= Mail::ContentDispositionElement.new(value) end def disposition_type element.disposition_type end def parameters @parameters = ParameterHash.new element.parameters.each { |p| @parameters.merge!(p) } unless element.parameters.nil? @parameters end def filename case when !Utilities.blank?(parameters['filename']) @filename = parameters['filename'] when !Utilities.blank?(parameters['name']) @filename = parameters['name'] else @filename = nil end @filename end # TODO: Fix this up def encoded if parameters.length > 0 p = ";\r\n\s#{parameters.encoded}\r\n" else p = "\r\n" end "#{CAPITALIZED_FIELD}: #{disposition_type}" + p end def decoded if parameters.length > 0 p = "; #{parameters.decoded}" else p = "" end "#{disposition_type}" + p end end end mail-2.6.4/lib/mail/fields/content_id_field.rb000066400000000000000000000022231267453234600212340ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # # module Mail class ContentIdField < StructuredField FIELD_NAME = 'content-id' CAPITALIZED_FIELD = "Content-ID" def initialize(value = nil, charset = 'utf-8') self.charset = charset @uniq = 1 if Utilities.blank?(value) value = generate_content_id else value = strip_field(FIELD_NAME, value) end super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::MessageIdsElement.new(val) end end def element @element ||= Mail::MessageIdsElement.new(value) end def name 'Content-ID' end def content_id element.message_id end def to_s "<#{content_id}>" end # TODO: Fix this up def encoded "#{CAPITALIZED_FIELD}: #{to_s}\r\n" end def decoded "#{to_s}" end private def generate_content_id "<#{Mail.random_tag}@#{::Socket.gethostname}.mail>" end end end mail-2.6.4/lib/mail/fields/content_location_field.rb000066400000000000000000000014671267453234600224610ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # # module Mail class ContentLocationField < StructuredField FIELD_NAME = 'content-location' CAPITALIZED_FIELD = 'Content-Location' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::ContentLocationElement.new(val) end end def element @element ||= Mail::ContentLocationElement.new(value) end def location element.location end # TODO: Fix this up def encoded "#{CAPITALIZED_FIELD}: #{location}\r\n" end def decoded location end end end mail-2.6.4/lib/mail/fields/content_transfer_encoding_field.rb000066400000000000000000000017201267453234600243330ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # # module Mail class ContentTransferEncodingField < StructuredField FIELD_NAME = 'content-transfer-encoding' CAPITALIZED_FIELD = 'Content-Transfer-Encoding' def initialize(value = nil, charset = 'utf-8') self.charset = charset value = '7bit' if value.to_s =~ /7-?bits?/i value = '8bit' if value.to_s =~ /8-?bits?/i super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::ContentTransferEncodingElement.new(val) end end def element @element ||= Mail::ContentTransferEncodingElement.new(value) end def encoding element.encoding end # TODO: Fix this up def encoded "#{CAPITALIZED_FIELD}: #{encoding}\r\n" end def decoded encoding end end end mail-2.6.4/lib/mail/fields/content_type_field.rb000066400000000000000000000120021267453234600216150ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/fields/common/parameter_hash' module Mail class ContentTypeField < StructuredField FIELD_NAME = 'content-type' CAPITALIZED_FIELD = 'Content-Type' def initialize(value = nil, charset = 'utf-8') self.charset = charset if value.class == Array @main_type = value[0] @sub_type = value[1] @parameters = ParameterHash.new.merge!(value.last) else @main_type = nil @sub_type = nil @parameters = nil value = strip_field(FIELD_NAME, value) end value = ensure_filename_quoted(value) super(CAPITALIZED_FIELD, value, charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) self.value = val @element = nil element end end def element begin @element ||= Mail::ContentTypeElement.new(value) rescue attempt_to_clean end end def attempt_to_clean # Sanitize the value, handle special cases @element ||= Mail::ContentTypeElement.new(sanatize(value)) rescue # All else fails, just get the MIME media type @element ||= Mail::ContentTypeElement.new(get_mime_type(value)) end def main_type @main_type ||= element.main_type end def sub_type @sub_type ||= element.sub_type end def string "#{main_type}/#{sub_type}" end def default decoded end alias :content_type :string def parameters unless @parameters @parameters = ParameterHash.new element.parameters.each { |p| @parameters.merge!(p) } end @parameters end def ContentTypeField.with_boundary(type) new("#{type}; boundary=#{generate_boundary}") end def ContentTypeField.generate_boundary "--==_mimepart_#{Mail.random_tag}" end def value if @value.class == Array "#{@main_type}/#{@sub_type}; #{stringify(parameters)}" else @value end end def stringify(params) params.map { |k,v| "#{k}=#{Encodings.param_encode(v)}" }.join("; ") end def filename case when parameters['filename'] @filename = parameters['filename'] when parameters['name'] @filename = parameters['name'] else @filename = nil end @filename end # TODO: Fix this up def encoded if parameters.length > 0 p = ";\r\n\s#{parameters.encoded}" else p = "" end "#{CAPITALIZED_FIELD}: #{content_type}#{p}\r\n" end def decoded if parameters.length > 0 p = "; #{parameters.decoded}" else p = "" end "#{content_type}" + p end private def method_missing(name, *args, &block) if name.to_s =~ /(\w+)=/ self.parameters[$1] = args.first @value = "#{content_type}; #{stringify(parameters)}" else super end end # Various special cases from random emails found that I am not going to change # the parser for def sanatize( val ) # TODO: check if there are cases where whitespace is not a separator val = val. gsub(/\s*=\s*/,'='). # remove whitespaces around equal sign tr(' ',';'). squeeze(';'). gsub(';', '; '). #use '; ' as a separator (or EOL) gsub(/;\s*$/,'') #remove trailing to keep examples below if val =~ /(boundary=(\S*))/i val = "#{$`.downcase}boundary=#{$2}#{$'.downcase}" else val.downcase! end case when val.chomp =~ /^\s*([\w\-]+)\/([\w\-]+)\s*;;+(.*)$/i # Handles 'text/plain;; format="flowed"' (double semi colon) "#{$1}/#{$2}; #{$3}" when val.chomp =~ /^\s*([\w\-]+)\/([\w\-]+)\s*;\s?(ISO[\w\-]+)$/i # Microsoft helper: # Handles 'type/subtype;ISO-8559-1' "#{$1}/#{$2}; charset=#{quote_atom($3)}" when val.chomp =~ /^text;?$/i # Handles 'text;' and 'text' "text/plain;" when val.chomp =~ /^(\w+);\s(.*)$/i # Handles 'text; ' "text/plain; #{$2}" when val =~ /([\w\-]+\/[\w\-]+);\scharset="charset="(\w+)""/i # Handles text/html; charset="charset="GB2312"" "#{$1}; charset=#{quote_atom($2)}" when val =~ /([\w\-]+\/[\w\-]+);\s+(.*)/i type = $1 # Handles misquoted param values # e.g: application/octet-stream; name=archiveshelp1[1].htm # and: audio/x-midi;\r\n\sname=Part .exe params = $2.to_s.split(/\s+/) params = params.map { |i| i.to_s.chomp.strip } params = params.map { |i| i.split(/\s*\=\s*/) } params = params.map { |i| "#{i[0]}=#{dquote(i[1].to_s.gsub(/;$/,""))}" }.join('; ') "#{type}; #{params}" when val =~ /^\s*$/ 'text/plain' else '' end end def get_mime_type( val ) case when val =~ /^([\w\-]+)\/([\w\-]+);.+$/i "#{$1}/#{$2}" else 'text/plain' end end end end mail-2.6.4/lib/mail/fields/date_field.rb000066400000000000000000000032141267453234600200240ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Date Field # # The Date field inherits from StructuredField and handles the Date: header # field in the email. # # Sending date to a mail message will instantiate a Mail::Field object that # has a DateField as its field type. This includes all Mail::CommonAddress # module instance methods. # # There must be excatly one Date field in an RFC2822 email. # # == Examples: # # mail = Mail.new # mail.date = 'Mon, 24 Nov 1997 14:22:01 -0800' # mail.date #=> # # mail.date.to_s #=> 'Mon, 24 Nov 1997 14:22:01 -0800' # mail[:date] #=> '# '# '# e raise e unless "invalid date"==e.message end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/from_field.rb000066400000000000000000000033511267453234600200540ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = From Field # # The From field inherits from StructuredField and handles the From: header # field in the email. # # Sending from to a mail message will instantiate a Mail::Field object that # has a FromField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one From field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.from = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:from] #=> '# '# '# 'from: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:from].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:from].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class FromField < StructuredField include Mail::CommonAddress FIELD_NAME = 'from' CAPITALIZED_FIELD = 'From' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/in_reply_to_field.rb000066400000000000000000000034241267453234600214350ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = In-Reply-To Field # # The In-Reply-To field inherits from StructuredField and handles the # In-Reply-To: header field in the email. # # Sending in_reply_to to a mail message will instantiate a Mail::Field object that # has a InReplyToField as its field type. This includes all Mail::CommonMessageId # module instance metods. # # Note that, the #message_ids method will return an array of message IDs without the # enclosing angle brackets which per RFC are not syntactically part of the message id. # # Only one InReplyTo field can appear in a header, though it can have multiple # Message IDs. # # == Examples: # # mail = Mail.new # mail.in_reply_to = '' # mail.in_reply_to #=> '' # mail[:in_reply_to] #=> '# '# '# ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom'] # require 'mail/fields/common/common_message_id' module Mail class InReplyToField < StructuredField include Mail::CommonMessageId FIELD_NAME = 'in-reply-to' CAPITALIZED_FIELD = 'In-Reply-To' def initialize(value = nil, charset = 'utf-8') self.charset = charset value = value.join("\r\n\s") if value.is_a?(Array) super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/keywords_field.rb000066400000000000000000000015531267453234600207620ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # keywords = "Keywords:" phrase *("," phrase) CRLF module Mail class KeywordsField < StructuredField FIELD_NAME = 'keywords' CAPITALIZED_FIELD = 'Keywords' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def parse(val = value) unless Utilities.blank?(val) @phrase_list ||= PhraseList.new(value) end end def phrase_list @phrase_list ||= PhraseList.new(value) end def keywords phrase_list.phrases end def encoded "#{CAPITALIZED_FIELD}: #{keywords.join(",\r\n ")}\r\n" end def decoded keywords.join(', ') end def default keywords end end end mail-2.6.4/lib/mail/fields/message_id_field.rb000066400000000000000000000045171267453234600212160ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Message-ID Field # # The Message-ID field inherits from StructuredField and handles the # Message-ID: header field in the email. # # Sending message_id to a mail message will instantiate a Mail::Field object that # has a MessageIdField as its field type. This includes all Mail::CommonMessageId # module instance metods. # # Only one MessageId field can appear in a header, and syntactically it can only have # one Message ID. The message_ids method call has been left in however as it will only # return the one message id, ie, an array of length 1. # # Note that, the #message_ids method will return an array of message IDs without the # enclosing angle brackets which per RFC are not syntactically part of the message id. # # == Examples: # # mail = Mail.new # mail.message_id = '' # mail.message_id #=> '' # mail[:message_id] #=> '# '# '# 'F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom' # mail[:message_id].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom'] # require 'mail/fields/common/common_message_id' module Mail class MessageIdField < StructuredField include Mail::CommonMessageId FIELD_NAME = 'message-id' CAPITALIZED_FIELD = 'Message-ID' def initialize(value = nil, charset = 'utf-8') self.charset = charset @uniq = 1 if Utilities.blank?(value) self.name = CAPITALIZED_FIELD self.value = generate_message_id else super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) end self.parse self end def name 'Message-ID' end def message_ids [message_id] end def to_s "<#{message_id}>" end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end private def generate_message_id "<#{Mail.random_tag}@#{::Socket.gethostname}.mail>" end end end mail-2.6.4/lib/mail/fields/mime_version_field.rb000066400000000000000000000017041267453234600216050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # # module Mail class MimeVersionField < StructuredField FIELD_NAME = 'mime-version' CAPITALIZED_FIELD = 'Mime-Version' def initialize(value = nil, charset = 'utf-8') self.charset = charset if Utilities.blank?(value) value = '1.0' end super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::MimeVersionElement.new(val) end end def element @element ||= Mail::MimeVersionElement.new(value) end def version "#{element.major}.#{element.minor}" end def major element.major.to_i end def minor element.minor.to_i end def encoded "#{CAPITALIZED_FIELD}: #{version}\r\n" end def decoded version end end end mail-2.6.4/lib/mail/fields/optional_field.rb000066400000000000000000000005361267453234600207400ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # The field names of any optional-field MUST NOT be identical to any # field name specified elsewhere in this standard. # # optional-field = field-name ":" unstructured CRLF require 'mail/fields/unstructured_field' module Mail class OptionalField < UnstructuredField end end mail-2.6.4/lib/mail/fields/received_field.rb000066400000000000000000000033451267453234600207020ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # trace = [return] # 1*received # # return = "Return-Path:" path CRLF # # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) / # obs-path # # received = "Received:" name-val-list ";" date-time CRLF # # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)] # # name-val-pair = item-name CFWS item-value # # item-name = ALPHA *(["-"] (ALPHA / DIGIT)) # # item-value = 1*angle-addr / addr-spec / # atom / domain / msg-id # module Mail class ReceivedField < StructuredField FIELD_NAME = 'received' CAPITALIZED_FIELD = 'Received' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def parse(val = value) unless Utilities.blank?(val) @element = Mail::ReceivedElement.new(val) end end def element @element ||= Mail::ReceivedElement.new(value) end def date_time @datetime ||= ::DateTime.parse("#{element.date_time}") end def info element.info end def formatted_date date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':') end def encoded if Utilities.blank?(value) "#{CAPITALIZED_FIELD}: \r\n" else "#{CAPITALIZED_FIELD}: #{info}; #{formatted_date}\r\n" end end def decoded if Utilities.blank?(value) "" else "#{info}; #{formatted_date}" end end end end mail-2.6.4/lib/mail/fields/references_field.rb000066400000000000000000000034131267453234600212310ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = References Field # # The References field inherits references StructuredField and handles the References: header # field in the email. # # Sending references to a mail message will instantiate a Mail::Field object that # has a ReferencesField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Note that, the #message_ids method will return an array of message IDs without the # enclosing angle brackets which per RFC are not syntactically part of the message id. # # Only one References field can appear in a header, though it can have multiple # Message IDs. # # == Examples: # # mail = Mail.new # mail.references = '' # mail.references #=> '' # mail[:references] #=> '# '# '# ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom'] # require 'mail/fields/common/common_message_id' module Mail class ReferencesField < StructuredField include CommonMessageId FIELD_NAME = 'references' CAPITALIZED_FIELD = 'References' def initialize(value = nil, charset = 'utf-8') self.charset = charset value = value.join("\r\n\s") if value.is_a?(Array) super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/reply_to_field.rb000066400000000000000000000035041267453234600207460ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Reply-To Field # # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header # field in the email. # # Sending reply_to to a mail message will instantiate a Mail::Field object that # has a ReplyToField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Reply-To field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.reply_to = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:reply_to] #=> '# '# '# 'Reply-To: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:reply_to].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:reply_to].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ReplyToField < StructuredField include Mail::CommonAddress FIELD_NAME = 'reply-to' CAPITALIZED_FIELD = 'Reply-To' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_bcc_field.rb000066400000000000000000000035631267453234600212250ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Resent-Bcc Field # # The Resent-Bcc field inherits resent-bcc StructuredField and handles the # Resent-Bcc: header field in the email. # # Sending resent_bcc to a mail message will instantiate a Mail::Field object that # has a ResentBccField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Resent-Bcc field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.resent_bcc = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_bcc] #=> '# '# '# 'Resent-Bcc: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ResentBccField < StructuredField include Mail::CommonAddress FIELD_NAME = 'resent-bcc' CAPITALIZED_FIELD = 'Resent-Bcc' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_cc_field.rb000066400000000000000000000035331267453234600210600ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Resent-Cc Field # # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header # field in the email. # # Sending resent_cc to a mail message will instantiate a Mail::Field object that # has a ResentCcField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Resent-Cc field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.resent_cc = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_cc] #=> '# '# '# 'Resent-Cc: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:resent_cc].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_cc].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ResentCcField < StructuredField include Mail::CommonAddress FIELD_NAME = 'resent-cc' CAPITALIZED_FIELD = 'Resent-Cc' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_date_field.rb000066400000000000000000000015051267453234600214050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # resent-date = "Resent-Date:" date-time CRLF require 'mail/fields/common/common_date' module Mail class ResentDateField < StructuredField include Mail::CommonDate FIELD_NAME = 'resent-date' CAPITALIZED_FIELD = 'Resent-Date' def initialize(value = nil, charset = 'utf-8') self.charset = charset if Utilities.blank?(value) value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z') else value = strip_field(FIELD_NAME, value) value = ::DateTime.parse(value.to_s).strftime('%a, %d %b %Y %H:%M:%S %z') end super(CAPITALIZED_FIELD, value, charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_from_field.rb000066400000000000000000000036101267453234600214320ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Resent-From Field # # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header # field in the email. # # Sending resent_from to a mail message will instantiate a Mail::Field object that # has a ResentFromField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Resent-From field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.resent_from = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_from] #=> '# '# '# 'Resent-From: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:resent_from].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_from].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ResentFromField < StructuredField include Mail::CommonAddress FIELD_NAME = 'resent-from' CAPITALIZED_FIELD = 'Resent-From' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_message_id_field.rb000066400000000000000000000013011267453234600225620ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # resent-msg-id = "Resent-Message-ID:" msg-id CRLF require 'mail/fields/common/common_message_id' module Mail class ResentMessageIdField < StructuredField include CommonMessageId FIELD_NAME = 'resent-message-id' CAPITALIZED_FIELD = 'Resent-Message-ID' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self.parse self end def name 'Resent-Message-ID' end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_sender_field.rb000066400000000000000000000036041267453234600217520ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Resent-Sender Field # # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header # field in the email. # # Sending resent_sender to a mail message will instantiate a Mail::Field object that # has a ResentSenderField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Resent-Sender field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.resent_sender = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_sender #=> ['mikel@test.lindsaar.net'] # mail[:resent_sender] #=> '# '# '# 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail.resent_sender.formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ResentSenderField < StructuredField include Mail::CommonAddress FIELD_NAME = 'resent-sender' CAPITALIZED_FIELD = 'Resent-Sender' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def addresses [address.address] end def address address_list.addresses.first end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/resent_to_field.rb000066400000000000000000000035331267453234600211150ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Resent-To Field # # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header # field in the email. # # Sending resent_to to a mail message will instantiate a Mail::Field object that # has a ResentToField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Resent-To field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.resent_to = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_to] #=> '# '# '# 'Resent-To: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:resent_to].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:resent_to].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ResentToField < StructuredField include Mail::CommonAddress FIELD_NAME = 'resent-to' CAPITALIZED_FIELD = 'Resent-To' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/return_path_field.rb000066400000000000000000000032241267453234600214430ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # 4.4.3. REPLY-TO / RESENT-REPLY-TO # # Note: The "Return-Path" field is added by the mail transport # service, at the time of final deliver. It is intended # to identify a path back to the orginator of the mes- # sage. The "Reply-To" field is added by the message # originator and is intended to direct replies. # # trace = [return] # 1*received # # return = "Return-Path:" path CRLF # # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) / # obs-path # # received = "Received:" name-val-list ";" date-time CRLF # # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)] # # name-val-pair = item-name CFWS item-value # # item-name = ALPHA *(["-"] (ALPHA / DIGIT)) # # item-value = 1*angle-addr / addr-spec / # atom / domain / msg-id # require 'mail/fields/common/common_address' module Mail class ReturnPathField < StructuredField include Mail::CommonAddress FIELD_NAME = 'return-path' CAPITALIZED_FIELD = 'Return-Path' def initialize(value = nil, charset = 'utf-8') value = nil if value == '<>' self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded "#{CAPITALIZED_FIELD}: <#{address}>\r\n" end def decoded do_decode end def address addresses.first end def default address end end end mail-2.6.4/lib/mail/fields/sender_field.rb000066400000000000000000000034471267453234600203770ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = Sender Field # # The Sender field inherits sender StructuredField and handles the Sender: header # field in the email. # # Sending sender to a mail message will instantiate a Mail::Field object that # has a SenderField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one Sender field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.sender = 'Mikel Lindsaar ' # mail.sender #=> 'mikel@test.lindsaar.net' # mail[:sender] #=> '# '# '# "Sender: Mikel Lindsaar \r\n" # mail[:sender].decoded #=> 'Mikel Lindsaar ' # mail[:sender].addresses #=> ['mikel@test.lindsaar.net'] # mail[:sender].formatted #=> ['Mikel Lindsaar '] # require 'mail/fields/common/common_address' module Mail class SenderField < StructuredField include Mail::CommonAddress FIELD_NAME = 'sender' CAPITALIZED_FIELD = 'Sender' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def addresses [address.address] end def address address_list.addresses.first end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end def default address.address end end end mail-2.6.4/lib/mail/fields/structured_field.rb000066400000000000000000000030001267453234600213040ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/fields/common/common_field' module Mail # Provides access to a structured header field # # ===Per RFC 2822: # 2.2.2. Structured Header Field Bodies # # Some field bodies in this standard have specific syntactical # structure more restrictive than the unstructured field bodies # described above. These are referred to as "structured" field bodies. # Structured field bodies are sequences of specific lexical tokens as # described in sections 3 and 4 of this standard. Many of these tokens # are allowed (according to their syntax) to be introduced or end with # comments (as described in section 3.2.3) as well as the space (SP, # ASCII value 32) and horizontal tab (HTAB, ASCII value 9) characters # (together known as the white space characters, WSP), and those WSP # characters are subject to header "folding" and "unfolding" as # described in section 2.2.3. Semantic analysis of structured field # bodies is given along with their syntax. class StructuredField include Mail::CommonField include Mail::Utilities def initialize(name = nil, value = nil, charset = nil) self.name = name self.value = value self.charset = charset self end def charset @charset end def charset=(val) @charset = val end def default decoded end def errors [] end end end mail-2.6.4/lib/mail/fields/subject_field.rb000066400000000000000000000006251267453234600205510ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # subject = "Subject:" unstructured CRLF module Mail class SubjectField < UnstructuredField FIELD_NAME = 'subject' CAPITALIZED_FIELD = "Subject" def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) end end end mail-2.6.4/lib/mail/fields/to_field.rb000066400000000000000000000032771267453234600175420ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # # = To Field # # The To field inherits to StructuredField and handles the To: header # field in the email. # # Sending to to a mail message will instantiate a Mail::Field object that # has a ToField as its field type. This includes all Mail::CommonAddress # module instance metods. # # Only one To field can appear in a header, though it can have multiple # addresses and groups of addresses. # # == Examples: # # mail = Mail.new # mail.to = 'Mikel Lindsaar , ada@test.lindsaar.net' # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:to] #=> '# '# '# 'To: Mikel Lindsaar , ada@test.lindsaar.net\r\n' # mail[:to].decoded #=> 'Mikel Lindsaar , ada@test.lindsaar.net' # mail[:to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # mail[:to].formatted #=> ['Mikel Lindsaar ', 'ada@test.lindsaar.net'] # require 'mail/fields/common/common_address' module Mail class ToField < StructuredField include Mail::CommonAddress FIELD_NAME = 'to' CAPITALIZED_FIELD = 'To' def initialize(value = nil, charset = 'utf-8') self.charset = charset super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset) self end def encoded do_encode(CAPITALIZED_FIELD) end def decoded do_decode end end end mail-2.6.4/lib/mail/fields/unstructured_field.rb000066400000000000000000000145741267453234600216710ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'mail/fields/common/common_field' module Mail # Provides access to an unstructured header field # # ===Per RFC 2822: # 2.2.1. Unstructured Header Field Bodies # # Some field bodies in this standard are defined simply as # "unstructured" (which is specified below as any US-ASCII characters, # except for CR and LF) with no further restrictions. These are # referred to as unstructured field bodies. Semantically, unstructured # field bodies are simply to be treated as a single line of characters # with no further processing (except for header "folding" and # "unfolding" as described in section 2.2.3). class UnstructuredField include Mail::CommonField include Mail::Utilities attr_accessor :charset attr_reader :errors def initialize(name, value, charset = nil) @errors = [] if value.is_a?(Array) # Probably has arrived here from a failed parse of an AddressList Field value = value.join(', ') else # Ensure we are dealing with a string value = value.to_s end if charset self.charset = charset else if value.respond_to?(:encoding) self.charset = value.encoding else self.charset = $KCODE end end self.name = name self.value = value self end def encoded do_encode end def decoded do_decode end def default decoded end def parse # An unstructured field does not parse self end private def do_encode value.nil? ? '' : "#{wrapped_value}\r\n" end def do_decode Utilities.blank?(value) ? nil : Encodings.decode_encode(value, :decode) end # 2.2.3. Long Header Fields # # Each header field is logically a single line of characters comprising # the field name, the colon, and the field body. For convenience # however, and to deal with the 998/78 character limitations per line, # the field body portion of a header field can be split into a multiple # line representation; this is called "folding". The general rule is # that wherever this standard allows for folding white space (not # simply WSP characters), a CRLF may be inserted before any WSP. For # example, the header field: # # Subject: This is a test # # can be represented as: # # Subject: This # is a test # # Note: Though structured field bodies are defined in such a way that # folding can take place between many of the lexical tokens (and even # within some of the lexical tokens), folding SHOULD be limited to # placing the CRLF at higher-level syntactic breaks. For instance, if # a field body is defined as comma-separated values, it is recommended # that folding occur after the comma separating the structured items in # preference to other places where the field could be folded, even if # it is allowed elsewhere. def wrapped_value # :nodoc: wrap_lines(name, fold("#{name}: ".length)) end # 6.2. Display of 'encoded-word's # # When displaying a particular header field that contains multiple # 'encoded-word's, any 'linear-white-space' that separates a pair of # adjacent 'encoded-word's is ignored. (This is to allow the use of # multiple 'encoded-word's to represent long strings of unencoded text, # without having to separate 'encoded-word's where spaces occur in the # unencoded text.) def wrap_lines(name, folded_lines) result = ["#{name}: #{folded_lines.shift}"] result.concat(folded_lines) result.join("\r\n\s") end def fold(prepend = 0) # :nodoc: encoding = normalized_encoding decoded_string = decoded.to_s should_encode = decoded_string.not_ascii_only? if should_encode first = true words = decoded_string.split(/[ \t]/).map do |word| if first first = !first else word = " #{word}" end if word.not_ascii_only? word else word.scan(/.{7}|.+$/) end end.flatten else words = decoded_string.split(/[ \t]/) end folded_lines = [] while !words.empty? limit = 78 - prepend limit = limit - 7 - encoding.length if should_encode line = String.new first_word = true while !words.empty? break unless word = words.first.dup word.encode!(charset) if charset && word.respond_to?(:encode!) word = encode(word) if should_encode word = encode_crlf(word) # Skip to next line if we're going to go past the limit # Unless this is the first word, in which case we're going to add it anyway # Note: This means that a word that's longer than 998 characters is going to break the spec. Please fix if this is a problem for you. # (The fix, it seems, would be to use encoded-word encoding on it, because that way you can break it across multiple lines and # the linebreak will be ignored) break if !line.empty? && (line.length + word.length + 1 > limit) # Remove the word from the queue ... words.shift # Add word separator if first_word first_word = false else line << " " if !should_encode end # ... add it in encoded form to the current line line << word end # Encode the line if necessary line = "=?#{encoding}?Q?#{line}?=" if should_encode # Add the line to the output and reset the prepend folded_lines << line prepend = 0 end folded_lines end def encode(value) value = [value].pack(CAPITAL_M).gsub(EQUAL_LF, EMPTY) value.gsub!(/"/, '=22') value.gsub!(/\(/, '=28') value.gsub!(/\)/, '=29') value.gsub!(/\?/, '=3F') value.gsub!(/_/, '=5F') value.gsub!(/ /, '_') value end def encode_crlf(value) value.gsub!(CR, CR_ENCODED) value.gsub!(LF, LF_ENCODED) value end def normalized_encoding encoding = charset.to_s.upcase.gsub('_', '-') encoding = 'UTF-8' if encoding == 'UTF8' # Ruby 1.8.x and $KCODE == 'u' encoding end end end mail-2.6.4/lib/mail/header.rb000066400000000000000000000217061267453234600157340ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # Provides access to a header object. # # ===Per RFC2822 # # 2.2. Header Fields # # Header fields are lines composed of a field name, followed by a colon # (":"), followed by a field body, and terminated by CRLF. A field # name MUST be composed of printable US-ASCII characters (i.e., # characters that have values between 33 and 126, inclusive), except # colon. A field body may be composed of any US-ASCII characters, # except for CR and LF. However, a field body may contain CRLF when # used in header "folding" and "unfolding" as described in section # 2.2.3. All field bodies MUST conform to the syntax described in # sections 3 and 4 of this standard. class Header include Constants include Utilities include Enumerable @@maximum_amount = 1000 # Large amount of headers in Email might create extra high CPU load # Use this parameter to limit number of headers that will be parsed by # mail library. # Default: 1000 def self.maximum_amount @@maximum_amount end def self.maximum_amount=(value) @@maximum_amount = value end # Creates a new header object. # # Accepts raw text or nothing. If given raw text will attempt to parse # it and split it into the various fields, instantiating each field as # it goes. # # If it finds a field that should be a structured field (such as content # type), but it fails to parse it, it will simply make it an unstructured # field and leave it alone. This will mean that the data is preserved but # no automatic processing of that field will happen. If you find one of # these cases, please make a patch and send it in, or at the least, send # me the example so we can fix it. def initialize(header_text = nil, charset = nil) @charset = charset self.raw_source = ::Mail::Utilities.to_crlf(header_text).lstrip split_header if header_text end def initialize_copy(original) super @fields = @fields.dup end # The preserved raw source of the header as you passed it in, untouched # for your Regexing glory. def raw_source @raw_source end # Returns an array of all the fields in the header in order that they # were read in. def fields @fields ||= FieldList.new end # 3.6. Field definitions # # It is important to note that the header fields are not guaranteed to # be in a particular order. They may appear in any order, and they # have been known to be reordered occasionally when transported over # the Internet. However, for the purposes of this standard, header # fields SHOULD NOT be reordered when a message is transported or # transformed. More importantly, the trace header fields and resent # header fields MUST NOT be reordered, and SHOULD be kept in blocks # prepended to the message. See sections 3.6.6 and 3.6.7 for more # information. # # Populates the fields container with Field objects in the order it # receives them in. # # Acceps an array of field string values, for example: # # h = Header.new # h.fields = ['From: mikel@me.com', 'To: bob@you.com'] def fields=(unfolded_fields) @fields = Mail::FieldList.new warn "Warning: more than #{self.class.maximum_amount} header fields only using the first #{self.class.maximum_amount}" if unfolded_fields.length > self.class.maximum_amount unfolded_fields[0..(self.class.maximum_amount-1)].each do |field| field = Field.new(field, nil, charset) if limited_field?(field.name) && (selected = select_field_for(field.name)) && selected.any? selected.first.update(field.name, field.value) else @fields << field end end end def errors @fields.map(&:errors).flatten(1) end # 3.6. Field definitions # # The following table indicates limits on the number of times each # field may occur in a message header as well as any special # limitations on the use of those fields. An asterisk next to a value # in the minimum or maximum column indicates that a special restriction # appears in the Notes column. # # # # As per RFC, many fields can appear more than once, we will return a string # of the value if there is only one header, or if there is more than one # matching header, will return an array of values in order that they appear # in the header ordered from top to bottom. # # Example: # # h = Header.new # h.fields = ['To: mikel@me.com', 'X-Mail-SPAM: 15', 'X-Mail-SPAM: 20'] # h['To'] #=> 'mikel@me.com' # h['X-Mail-SPAM'] #=> ['15', '20'] def [](name) name = dasherize(name) name.downcase! selected = select_field_for(name) case when selected.length > 1 selected.map { |f| f } when !Utilities.blank?(selected) selected.first else nil end end # Sets the FIRST matching field in the header to passed value, or deletes # the FIRST field matched from the header if passed nil # # Example: # # h = Header.new # h.fields = ['To: mikel@me.com', 'X-Mail-SPAM: 15', 'X-Mail-SPAM: 20'] # h['To'] = 'bob@you.com' # h['To'] #=> 'bob@you.com' # h['X-Mail-SPAM'] = '10000' # h['X-Mail-SPAM'] # => ['15', '20', '10000'] # h['X-Mail-SPAM'] = nil # h['X-Mail-SPAM'] # => nil def []=(name, value) name = dasherize(name) if name.include?(':') raise ArgumentError, "Header names may not contain a colon: #{name.inspect}" end fn = name.downcase selected = select_field_for(fn) case # User wants to delete the field when !Utilities.blank?(selected) && value == nil fields.delete_if { |f| selected.include?(f) } # User wants to change the field when !Utilities.blank?(selected) && limited_field?(fn) selected.first.update(fn, value) # User wants to create the field else # Need to insert in correct order for trace fields self.fields << Field.new(name.to_s, value, charset) end if dasherize(fn) == "content-type" # Update charset if specified in Content-Type params = self[:content_type].parameters rescue nil @charset = params[:charset] if params && params[:charset] end end def charset @charset end def charset=(val) params = self[:content_type].parameters rescue nil if params params[:charset] = val end @charset = val end LIMITED_FIELDS = %w[ date from sender reply-to to cc bcc message-id in-reply-to references subject return-path content-type mime-version content-transfer-encoding content-description content-id content-disposition content-location] def encoded buffer = String.new buffer.force_encoding('us-ascii') if buffer.respond_to?(:force_encoding) fields.each do |field| buffer << field.encoded end buffer end def to_s encoded end def decoded raise NoMethodError, 'Can not decode an entire header as there could be character set conflicts, try calling #decoded on the various fields.' end def field_summary fields.map { |f| "<#{f.name}: #{f.value}>" }.join(", ") end # Returns true if the header has a Message-ID defined (empty or not) def has_message_id? !fields.select { |f| f.responsible_for?('Message-ID') }.empty? end # Returns true if the header has a Content-ID defined (empty or not) def has_content_id? !fields.select { |f| f.responsible_for?('Content-ID') }.empty? end # Returns true if the header has a Date defined (empty or not) def has_date? !fields.select { |f| f.responsible_for?('Date') }.empty? end # Returns true if the header has a MIME version defined (empty or not) def has_mime_version? !fields.select { |f| f.responsible_for?('Mime-Version') }.empty? end private def raw_source=(val) @raw_source = val end # Splits an unfolded and line break cleaned header into individual field # strings. def split_header self.fields = raw_source.split(HEADER_SPLIT) end def select_field_for(name) fields.select { |f| f.responsible_for?(name) } end def limited_field?(name) LIMITED_FIELDS.include?(name.to_s.downcase) end # Enumerable support; yield each field in order to the block if there is one, # or return an Enumerator for them if there isn't. def each( &block ) return self.fields.each( &block ) if block self.fields.each end end end mail-2.6.4/lib/mail/indifferent_hash.rb000066400000000000000000000074421267453234600200050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true # This is an almost cut and paste from ActiveSupport v3.0.6, copied in here so that Mail # itself does not depend on ActiveSupport to avoid versioning conflicts module Mail class IndifferentHash < Hash def initialize(constructor = {}) if constructor.is_a?(Hash) super() update(constructor) else super(constructor) end end def default(key = nil) if key.is_a?(Symbol) && include?(key = key.to_s) self[key] else super end end def self.new_from_hash_copying_default(hash) IndifferentHash.new(hash).tap do |new_hash| new_hash.default = hash.default end end alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) alias_method :regular_update, :update unless method_defined?(:regular_update) # Assigns a new value to the hash: # # hash = HashWithIndifferentAccess.new # hash[:key] = "value" # def []=(key, value) regular_writer(convert_key(key), convert_value(value)) end alias_method :store, :[]= # Updates the instantized hash with values from the second: # # hash_1 = HashWithIndifferentAccess.new # hash_1[:key] = "value" # # hash_2 = HashWithIndifferentAccess.new # hash_2[:key] = "New Value!" # # hash_1.update(hash_2) # => {"key"=>"New Value!"} # def update(other_hash) other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } self end alias_method :merge!, :update # Checks the hash for a key matching the argument passed in: # # hash = HashWithIndifferentAccess.new # hash["key"] = "value" # hash.key? :key # => true # hash.key? "key" # => true # def key?(key) super(convert_key(key)) end alias_method :include?, :key? alias_method :has_key?, :key? alias_method :member?, :key? # Fetches the value for the specified key, same as doing hash[key] def fetch(key, *extras) super(convert_key(key), *extras) end # Returns an array of the values at the specified indices: # # hash = HashWithIndifferentAccess.new # hash[:a] = "x" # hash[:b] = "y" # hash.values_at("a", "b") # => ["x", "y"] # def values_at(*indices) indices.collect {|key| self[convert_key(key)]} end # Returns an exact copy of the hash. def dup IndifferentHash.new(self) end # Merges the instantized and the specified hashes together, giving precedence to the values from the second hash # Does not overwrite the existing hash. def merge(hash) self.dup.update(hash) end # Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second. # This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess. def reverse_merge(other_hash) super self.class.new_from_hash_copying_default(other_hash) end def reverse_merge!(other_hash) replace(reverse_merge( other_hash )) end # Removes a specified key from the hash. def delete(key) super(convert_key(key)) end def stringify_keys!; self end def stringify_keys; dup end def symbolize_keys; to_hash.symbolize_keys end def to_options!; self end def to_hash Hash.new(default).merge!(self) end protected def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end def convert_value(value) if value.class == Hash self.class.new_from_hash_copying_default(value) elsif value.is_a?(Array) value.dup.replace(value.map { |e| convert_value(e) }) else value end end end end mail-2.6.4/lib/mail/mail.rb000066400000000000000000000210271267453234600154220ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # Allows you to create a new Mail::Message object. # # You can make an email via passing a string or passing a block. # # For example, the following two examples will create the same email # message: # # Creating via a string: # # string = "To: mikel@test.lindsaar.net\r\n" # string << "From: bob@test.lindsaar.net\r\n" # string << "Subject: This is an email\r\n" # string << "\r\n" # string << "This is the body" # Mail.new(string) # # Or creating via a block: # # message = Mail.new do # to 'mikel@test.lindsaar.net' # from 'bob@test.lindsaar.net' # subject 'This is an email' # body 'This is the body' # end # # Or creating via a hash (or hash like object): # # message = Mail.new({:to => 'mikel@test.lindsaar.net', # 'from' => 'bob@test.lindsaar.net', # :subject => 'This is an email', # :body => 'This is the body' }) # # Note, the hash keys can be strings or symbols, the passed in object # does not need to be a hash, it just needs to respond to :each_pair # and yield each key value pair. # # As a side note, you can also create a new email through creating # a Mail::Message object directly and then passing in values via string, # symbol or direct method calls. See Mail::Message for more information. # # mail = Mail.new # mail.to = 'mikel@test.lindsaar.net' # mail[:from] = 'bob@test.lindsaar.net' # mail['subject'] = 'This is an email' # mail.body = 'This is the body' def self.new(*args, &block) Message.new(args, &block) end # Sets the default delivery method and retriever method for all new Mail objects. # The delivery_method and retriever_method default to :smtp and :pop3, with defaults # set. # # So sending a new email, if you have an SMTP server running on localhost is # as easy as: # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'bob@test.lindsaar.net' # subject 'hi there!' # body 'this is a body' # end # # If you do not specify anything, you will get the following equivalent code set in # every new mail object: # # Mail.defaults do # delivery_method :smtp, { :address => "localhost", # :port => 25, # :domain => 'localhost.localdomain', # :user_name => nil, # :password => nil, # :authentication => nil, # :enable_starttls_auto => true } # # retriever_method :pop3, { :address => "localhost", # :port => 995, # :user_name => nil, # :password => nil, # :enable_ssl => true } # end # # Mail.delivery_method.new #=> Mail::SMTP instance # Mail.retriever_method.new #=> Mail::POP3 instance # # Each mail object inherits the default set in Mail.delivery_method, however, on # a per email basis, you can override the method: # # mail.delivery_method :sendmail # # Or you can override the method and pass in settings: # # mail.delivery_method :sendmail, { :address => 'some.host' } # # You can also just modify the settings: # # mail.delivery_settings = { :address => 'some.host' } # # The passed in hash is just merged against the defaults with +merge!+ and the result # assigned the mail object. So the above example will change only the :address value # of the global smtp_settings to be 'some.host', keeping all other values def self.defaults(&block) Configuration.instance.instance_eval(&block) end # Returns the delivery method selected, defaults to an instance of Mail::SMTP def self.delivery_method Configuration.instance.delivery_method end # Returns the retriever method selected, defaults to an instance of Mail::POP3 def self.retriever_method Configuration.instance.retriever_method end # Send an email using the default configuration. You do need to set a default # configuration first before you use self.deliver, if you don't, an appropriate # error will be raised telling you to. # # If you do not specify a delivery type, SMTP will be used. # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'This is a test email' # body 'Not much to say here' # end # # You can also do: # # mail = Mail.read('email.eml') # mail.deliver! # # And your email object will be created and sent. def self.deliver(*args, &block) mail = self.new(args, &block) mail.deliver mail end # Find emails from the default retriever # See Mail::Retriever for a complete documentation. def self.find(*args, &block) retriever_method.find(*args, &block) end # Finds and then deletes retrieved emails from the default retriever # See Mail::Retriever for a complete documentation. def self.find_and_delete(*args, &block) retriever_method.find_and_delete(*args, &block) end # Receive the first email(s) from the default retriever # See Mail::Retriever for a complete documentation. def self.first(*args, &block) retriever_method.first(*args, &block) end # Receive the first email(s) from the default retriever # See Mail::Retriever for a complete documentation. def self.last(*args, &block) retriever_method.last(*args, &block) end # Receive all emails from the default retriever # See Mail::Retriever for a complete documentation. def self.all(*args, &block) retriever_method.all(*args, &block) end # Reads in an email message from a path and instantiates it as a new Mail::Message def self.read(filename) self.new(File.open(filename, 'rb') { |f| f.read }) end # Delete all emails from the default retriever # See Mail::Retriever for a complete documentation. def self.delete_all(*args, &block) retriever_method.delete_all(*args, &block) end # Instantiates a new Mail::Message using a string def Mail.read_from_string(mail_as_string) Mail.new(mail_as_string) end def Mail.connection(&block) retriever_method.connection(&block) end # Initialize the observers and interceptors arrays @@delivery_notification_observers = [] @@delivery_interceptors = [] # You can register an object to be informed of every email that is sent through # this method. # # Your object needs to respond to a single method #delivered_email(mail) # which receives the email that is sent. def self.register_observer(observer) unless @@delivery_notification_observers.include?(observer) @@delivery_notification_observers << observer end end # Unregister the given observer, allowing mail to resume operations # without it. def self.unregister_observer(observer) @@delivery_notification_observers.delete(observer) end # You can register an object to be given every mail object that will be sent, # before it is sent. So if you want to add special headers or modify any # email that gets sent through the Mail library, you can do so. # # Your object needs to respond to a single method #delivering_email(mail) # which receives the email that is about to be sent. Make your modifications # directly to this object. def self.register_interceptor(interceptor) unless @@delivery_interceptors.include?(interceptor) @@delivery_interceptors << interceptor end end # Unregister the given interceptor, allowing mail to resume operations # without it. def self.unregister_interceptor(interceptor) @@delivery_interceptors.delete(interceptor) end def self.inform_observers(mail) @@delivery_notification_observers.each do |observer| observer.delivered_email(mail) end end def self.inform_interceptors(mail) @@delivery_interceptors.each do |interceptor| interceptor.delivering_email(mail) end end protected RANDOM_TAG='%x%x_%x%x%d%x' def self.random_tag t = Time.now sprintf(RANDOM_TAG, t.to_i, t.tv_usec, $$, Thread.current.object_id.abs, self.uniq, rand(255)) end private def self.something_random (Thread.current.object_id * rand(255) / Time.now.to_f).to_s.slice(-3..-1).to_i end def self.uniq @@uniq += 1 end @@uniq = self.something_random end mail-2.6.4/lib/mail/matchers/000077500000000000000000000000001267453234600157575ustar00rootroot00000000000000mail-2.6.4/lib/mail/matchers/attachment_matchers.rb000066400000000000000000000010611267453234600223200ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Matchers def any_attachment AnyAttachmentMatcher.new end def an_attachment_with_filename(filename) AttachmentFilenameMatcher.new(filename) end class AnyAttachmentMatcher def ===(other) other.attachment? end end class AttachmentFilenameMatcher attr_reader :filename def initialize(filename) @filename = filename end def ===(other) other.attachment? && other.filename == filename end end end end mail-2.6.4/lib/mail/matchers/has_sent_mail.rb000066400000000000000000000117641267453234600211230ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Matchers def have_sent_email HasSentEmailMatcher.new(self) end class HasSentEmailMatcher def initialize(_context) end def matches?(subject) matching_deliveries = filter_matched_deliveries(Mail::TestMailer.deliveries) !(matching_deliveries.empty?) end def from(sender) @sender = sender self end def to(recipient_or_list) @recipients ||= [] if recipient_or_list.kind_of?(Array) @recipients += recipient_or_list else @recipients << recipient_or_list end self end def cc(recipient_or_list) @copy_recipients ||= [] if recipient_or_list.kind_of?(Array) @copy_recipients += recipient_or_list else @copy_recipients << recipient_or_list end self end def bcc(recipient_or_list) @blind_copy_recipients ||= [] @blind_copy_recipients.concat(Array(recipient_or_list)) self end def with_attachments(attachments) @attachments ||= [] @attachments.concat(Array(attachments)) self end def with_no_attachments @having_attachments = false self end def with_any_attachments @having_attachments = true self end def with_subject(subject) @subject = subject self end def matching_subject(subject_matcher) @subject_matcher = subject_matcher self end def with_body(body) @body = body self end def matching_body(body_matcher) @body_matcher = body_matcher self end def description result = "send a matching email" result end def failure_message result = "Expected email to be sent " result += explain_expectations result += dump_deliveries result end def failure_message_when_negated result = "Expected no email to be sent " result += explain_expectations result += dump_deliveries result end protected def filter_matched_deliveries(deliveries) candidate_deliveries = deliveries modifiers = %w(sender recipients copy_recipients blind_copy_recipients subject subject_matcher body body_matcher having_attachments attachments) modifiers.each do |modifier_name| next unless instance_variable_defined?("@#{modifier_name}") candidate_deliveries = candidate_deliveries.select{|matching_delivery| self.send("matches_on_#{modifier_name}?", matching_delivery)} end candidate_deliveries end def matches_on_sender?(delivery) delivery.from.include?(@sender) end def matches_on_recipients?(delivery) @recipients.all? {|recipient| delivery.to.include?(recipient) } end def matches_on_copy_recipients?(delivery) @copy_recipients.all? {|recipient| delivery.cc.include?(recipient) } end def matches_on_blind_copy_recipients?(delivery) @blind_copy_recipients.all? {|recipient| delivery.bcc.include?(recipient) } end def matches_on_subject?(delivery) delivery.subject == @subject end def matches_on_subject_matcher?(delivery) @subject_matcher.match delivery.subject end def matches_on_having_attachments?(delivery) @having_attachments && delivery.attachments.any? || (!@having_attachments && delivery.attachments.none?) end def matches_on_attachments?(delivery) @attachments.each_with_index.inject( true ) do |sent_attachments, (attachment, index)| sent_attachments &&= (attachment === delivery.attachments[index]) end end def matches_on_body?(delivery) delivery.body == @body end def matches_on_body_matcher?(delivery) @body_matcher.match delivery.body.raw_source end def explain_expectations result = '' result += "from #{@sender} " if instance_variable_defined?('@sender') result += "to #{@recipients.inspect} " if instance_variable_defined?('@recipients') result += "cc #{@copy_recipients.inspect} " if instance_variable_defined?('@copy_recipients') result += "bcc #{@blind_copy_recipients.inspect} " if instance_variable_defined?('@blind_copy_recipients') result += "with subject \"#{@subject}\" " if instance_variable_defined?('@subject') result += "with subject matching \"#{@subject_matcher}\" " if instance_variable_defined?('@subject_matcher') result += "with body \"#{@body}\" " if instance_variable_defined?('@body') result += "with body matching \"#{@body_matcher}\" " if instance_variable_defined?('@body_matcher') result end def dump_deliveries "(actual deliveries: " + Mail::TestMailer.deliveries.inspect + ")" end end end end mail-2.6.4/lib/mail/message.rb000066400000000000000000002053761267453234600161370ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require "yaml" module Mail # The Message class provides a single point of access to all things to do with an # email message. # # You create a new email message by calling the Mail::Message.new method, or just # Mail.new # # A Message object by default has the following objects inside it: # # * A Header object which contains all information and settings of the header of the email # * Body object which contains all parts of the email that are not part of the header, this # includes any attachments, body text, MIME parts etc. # # ==Per RFC2822 # # 2.1. General Description # # At the most basic level, a message is a series of characters. A # message that is conformant with this standard is comprised of # characters with values in the range 1 through 127 and interpreted as # US-ASCII characters [ASCII]. For brevity, this document sometimes # refers to this range of characters as simply "US-ASCII characters". # # Note: This standard specifies that messages are made up of characters # in the US-ASCII range of 1 through 127. There are other documents, # specifically the MIME document series [RFC2045, RFC2046, RFC2047, # RFC2048, RFC2049], that extend this standard to allow for values # outside of that range. Discussion of those mechanisms is not within # the scope of this standard. # # Messages are divided into lines of characters. A line is a series of # characters that is delimited with the two characters carriage-return # and line-feed; that is, the carriage return (CR) character (ASCII # value 13) followed immediately by the line feed (LF) character (ASCII # value 10). (The carriage-return/line-feed pair is usually written in # this document as "CRLF".) # # A message consists of header fields (collectively called "the header # of the message") followed, optionally, by a body. The header is a # sequence of lines of characters with special syntax as defined in # this standard. The body is simply a sequence of characters that # follows the header and is separated from the header by an empty line # (i.e., a line with nothing preceding the CRLF). class Message include Constants include Utilities # ==Making an email # # You can make an new mail object via a block, passing a string, file or direct assignment. # # ===Making an email via a block # # mail = Mail.new do # from 'mikel@test.lindsaar.net' # to 'you@test.lindsaar.net' # subject 'This is a test email' # body File.read('body.txt') # end # # mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@... # # ===Making an email via passing a string # # mail = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Hello\r\n\r\nHi there!") # mail.body.to_s #=> 'Hi there!' # mail.subject #=> 'Hello' # mail.to #=> 'mikel@test.lindsaar.net' # # ===Making an email from a file # # mail = Mail.read('path/to/file.eml') # mail.body.to_s #=> 'Hi there!' # mail.subject #=> 'Hello' # mail.to #=> 'mikel@test.lindsaar.net' # # ===Making an email via assignment # # You can assign values to a mail object via four approaches: # # * Message#field_name=(value) # * Message#field_name(value) # * Message#['field_name']=(value) # * Message#[:field_name]=(value) # # Examples: # # mail = Mail.new # mail['from'] = 'mikel@test.lindsaar.net' # mail[:to] = 'you@test.lindsaar.net' # mail.subject 'This is a test email' # mail.body = 'This is a body' # # mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@... # def initialize(*args, &block) @body = nil @body_raw = nil @separate_parts = false @text_part = nil @html_part = nil @errors = nil @header = nil @charset = self.class.default_charset @defaulted_charset = true @smtp_envelope_from = nil @smtp_envelope_to = nil @perform_deliveries = true @raise_delivery_errors = true @delivery_handler = nil @delivery_method = Mail.delivery_method.dup @transport_encoding = Mail::Encodings.get_encoding('7bit') @mark_for_delete = false if args.flatten.first.respond_to?(:each_pair) init_with_hash(args.flatten.first) else init_with_string(args.flatten[0].to_s) end if block_given? instance_eval(&block) end self end # If you assign a delivery handler, mail will call :deliver_mail on the # object you assign to delivery_handler, it will pass itself as the # single argument. # # If you define a delivery_handler, then you are responsible for the # following actions in the delivery cycle: # # * Appending the mail object to Mail.deliveries as you see fit. # * Checking the mail.perform_deliveries flag to decide if you should # actually call :deliver! the mail object or not. # * Checking the mail.raise_delivery_errors flag to decide if you # should raise delivery errors if they occur. # * Actually calling :deliver! (with the bang) on the mail object to # get it to deliver itself. # # A simplest implementation of a delivery_handler would be # # class MyObject # # def initialize # @mail = Mail.new('To: mikel@test.lindsaar.net') # @mail.delivery_handler = self # end # # attr_accessor :mail # # def deliver_mail(mail) # yield # end # end # # Then doing: # # obj = MyObject.new # obj.mail.deliver # # Would cause Mail to call obj.deliver_mail passing itself as a parameter, # which then can just yield and let Mail do its own private do_delivery # method. attr_accessor :delivery_handler # If set to false, mail will go through the motions of doing a delivery, # but not actually call the delivery method or append the mail object to # the Mail.deliveries collection. Useful for testing. # # Mail.deliveries.size #=> 0 # mail.delivery_method :smtp # mail.perform_deliveries = false # mail.deliver # Mail::SMTP not called here # Mail.deliveries.size #=> 0 # # If you want to test and query the Mail.deliveries collection to see what # mail you sent, you should set perform_deliveries to true and use # the :test mail delivery_method: # # Mail.deliveries.size #=> 0 # mail.delivery_method :test # mail.perform_deliveries = true # mail.deliver # Mail.deliveries.size #=> 1 # # This setting is ignored by mail (though still available as a flag) if you # define a delivery_handler attr_accessor :perform_deliveries # If set to false, mail will silently catch and ignore any exceptions # raised through attempting to deliver an email. # # This setting is ignored by mail (though still available as a flag) if you # define a delivery_handler attr_accessor :raise_delivery_errors def self.default_charset; @@default_charset; end def self.default_charset=(charset); @@default_charset = charset; end self.default_charset = 'UTF-8' def register_for_delivery_notification(observer) STDERR.puts("Message#register_for_delivery_notification is deprecated, please call Mail.register_observer instead") Mail.register_observer(observer) end def inform_observers Mail.inform_observers(self) end def inform_interceptors Mail.inform_interceptors(self) end # Delivers an mail object. # # Examples: # # mail = Mail.read('file.eml') # mail.deliver def deliver inform_interceptors if delivery_handler delivery_handler.deliver_mail(self) { do_delivery } else do_delivery end inform_observers self end # This method bypasses checking perform_deliveries and raise_delivery_errors, # so use with caution. # # It still however fires off the interceptors and calls the observers callbacks if they are defined. # # Returns self def deliver! inform_interceptors response = delivery_method.deliver!(self) inform_observers delivery_method.settings[:return_response] ? response : self end def delivery_method(method = nil, settings = {}) unless method @delivery_method else @delivery_method = Configuration.instance.lookup_delivery_method(method).new(settings) end end def reply(*args, &block) self.class.new.tap do |reply| if message_id bracketed_message_id = "<#{message_id}>" reply.in_reply_to = bracketed_message_id if !references.nil? refs = [references].flatten.map { |r| "<#{r}>" } refs << bracketed_message_id reply.references = refs.join(' ') elsif !in_reply_to.nil? && !in_reply_to.kind_of?(Array) reply.references = "<#{in_reply_to}> #{bracketed_message_id}" end reply.references ||= bracketed_message_id end if subject reply.subject = subject =~ /^Re:/i ? subject : "RE: #{subject}" end if reply_to || from reply.to = self[reply_to ? :reply_to : :from].to_s end if to reply.from = self[:to].formatted.first.to_s end unless args.empty? if args.flatten.first.respond_to?(:each_pair) reply.send(:init_with_hash, args.flatten.first) else reply.send(:init_with_string, args.flatten[0].to_s.strip) end end if block_given? reply.instance_eval(&block) end end end # Provides the operator needed for sort et al. # # Compares this mail object with another mail object, this is done by date, so an # email that is older than another will appear first. # # Example: # # mail1 = Mail.new do # date(Time.now) # end # mail2 = Mail.new do # date(Time.now - 86400) # 1 day older # end # [mail2, mail1].sort #=> [mail2, mail1] def <=>(other) if other.nil? 1 else self.date <=> other.date end end # Two emails are the same if they have the same fields and body contents. One # gotcha here is that Mail will insert Message-IDs when calling encoded, so doing # mail1.encoded == mail2.encoded is most probably not going to return what you think # as the assigned Message-IDs by Mail (if not already defined as the same) will ensure # that the two objects are unique, and this comparison will ALWAYS return false. # # So the == operator has been defined like so: Two messages are the same if they have # the same content, ignoring the Message-ID field, unless BOTH emails have a defined and # different Message-ID value, then they are false. # # So, in practice the == operator works like this: # # m1 = Mail.new("Subject: Hello\r\n\r\nHello") # m2 = Mail.new("Subject: Hello\r\n\r\nHello") # m1 == m2 #=> true # # m1 = Mail.new("Subject: Hello\r\n\r\nHello") # m2 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello") # m1 == m2 #=> true # # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello") # m2 = Mail.new("Subject: Hello\r\n\r\nHello") # m1 == m2 #=> true # # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello") # m2 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello") # m1 == m2 #=> true # # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello") # m2 = Mail.new("Message-ID: \r\nSubject: Hello\r\n\r\nHello") # m1 == m2 #=> false def ==(other) return false unless other.respond_to?(:encoded) if self.message_id && other.message_id self.encoded == other.encoded else self_message_id, other_message_id = self.message_id, other.message_id begin self.message_id, other.message_id = '', '' self.encoded == other.encoded ensure self.message_id, other.message_id = self_message_id, other_message_id end end end def initialize_copy(original) super @header = @header.dup end # Provides access to the raw source of the message as it was when it # was instantiated. This is set at initialization and so is untouched # by the parsers or decoder / encoders # # Example: # # mail = Mail.new('This is an invalid email message') # mail.raw_source #=> "This is an invalid email message" def raw_source @raw_source end # Sets the envelope from for the email def set_envelope( val ) @raw_envelope = val @envelope = Mail::Envelope.new( val ) end # The raw_envelope is the From mikel@test.lindsaar.net Mon May 2 16:07:05 2009 # type field that you can see at the top of any email that has come # from a mailbox def raw_envelope @raw_envelope end def envelope_from @envelope ? @envelope.from : nil end def envelope_date @envelope ? @envelope.date : nil end # Sets the header of the message object. # # Example: # # mail.header = 'To: mikel@test.lindsaar.net\r\nFrom: Bob@bob.com' # mail.header #=> <#Mail::Header def header=(value) @header = Mail::Header.new(value, charset) end # Returns the header object of the message object. Or, if passed # a parameter sets the value. # # Example: # # mail = Mail::Message.new('To: mikel\r\nFrom: you') # mail.header #=> # 1 # message.errors.first[0] #=> "Content-Transfer-Encoding" # message.errors.first[1] #=> "weirdo" # message.errors.first[3] #=> # # This is a good first defence on detecting spam by the way. Some spammers send # invalid emails to try and get email parsers to give up parsing them. def errors header.errors end # Returns the Bcc value of the mail object as an array of strings of # address specs. # # Example: # # mail.bcc = 'Mikel ' # mail.bcc #=> ['mikel@test.lindsaar.net'] # mail.bcc = 'Mikel , ada@test.lindsaar.net' # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.bcc 'Mikel ' # mail.bcc #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.bcc 'Mikel ' # mail.bcc << 'ada@test.lindsaar.net' # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def bcc( val = nil ) default :bcc, val end # Sets the Bcc value of the mail object, pass in a string of the field # # Example: # # mail.bcc = 'Mikel ' # mail.bcc #=> ['mikel@test.lindsaar.net'] # mail.bcc = 'Mikel , ada@test.lindsaar.net' # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def bcc=( val ) header[:bcc] = val end # Returns the Cc value of the mail object as an array of strings of # address specs. # # Example: # # mail.cc = 'Mikel ' # mail.cc #=> ['mikel@test.lindsaar.net'] # mail.cc = 'Mikel , ada@test.lindsaar.net' # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.cc 'Mikel ' # mail.cc #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.cc 'Mikel ' # mail.cc << 'ada@test.lindsaar.net' # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def cc( val = nil ) default :cc, val end # Sets the Cc value of the mail object, pass in a string of the field # # Example: # # mail.cc = 'Mikel ' # mail.cc #=> ['mikel@test.lindsaar.net'] # mail.cc = 'Mikel , ada@test.lindsaar.net' # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def cc=( val ) header[:cc] = val end def comments( val = nil ) default :comments, val end def comments=( val ) header[:comments] = val end def content_description( val = nil ) default :content_description, val end def content_description=( val ) header[:content_description] = val end def content_disposition( val = nil ) default :content_disposition, val end def content_disposition=( val ) header[:content_disposition] = val end def content_id( val = nil ) default :content_id, val end def content_id=( val ) header[:content_id] = val end def content_location( val = nil ) default :content_location, val end def content_location=( val ) header[:content_location] = val end def content_transfer_encoding( val = nil ) default :content_transfer_encoding, val end def content_transfer_encoding=( val ) header[:content_transfer_encoding] = val end def content_type( val = nil ) default :content_type, val end def content_type=( val ) header[:content_type] = val end def date( val = nil ) default :date, val end def date=( val ) header[:date] = val end def transport_encoding( val = nil) if val self.transport_encoding = val else @transport_encoding end end def transport_encoding=( val ) @transport_encoding = Mail::Encodings.get_encoding(val) end # Returns the From value of the mail object as an array of strings of # address specs. # # Example: # # mail.from = 'Mikel ' # mail.from #=> ['mikel@test.lindsaar.net'] # mail.from = 'Mikel , ada@test.lindsaar.net' # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.from 'Mikel ' # mail.from #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.from 'Mikel ' # mail.from << 'ada@test.lindsaar.net' # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def from( val = nil ) default :from, val end # Sets the From value of the mail object, pass in a string of the field # # Example: # # mail.from = 'Mikel ' # mail.from #=> ['mikel@test.lindsaar.net'] # mail.from = 'Mikel , ada@test.lindsaar.net' # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def from=( val ) header[:from] = val end def in_reply_to( val = nil ) default :in_reply_to, val end def in_reply_to=( val ) header[:in_reply_to] = val end def keywords( val = nil ) default :keywords, val end def keywords=( val ) header[:keywords] = val end # Returns the Message-ID of the mail object. Note, per RFC 2822 the Message ID # consists of what is INSIDE the < > usually seen in the mail header, so this method # will return only what is inside. # # Example: # # mail.message_id = '<1234@message.id>' # mail.message_id #=> '1234@message.id' # # Also allows you to set the Message-ID by passing a string as a parameter # # mail.message_id '<1234@message.id>' # mail.message_id #=> '1234@message.id' def message_id( val = nil ) default :message_id, val end # Sets the Message-ID. Note, per RFC 2822 the Message ID consists of what is INSIDE # the < > usually seen in the mail header, so this method will return only what is inside. # # mail.message_id = '<1234@message.id>' # mail.message_id #=> '1234@message.id' def message_id=( val ) header[:message_id] = val end # Returns the MIME version of the email as a string # # Example: # # mail.mime_version = '1.0' # mail.mime_version #=> '1.0' # # Also allows you to set the MIME version by passing a string as a parameter. # # Example: # # mail.mime_version '1.0' # mail.mime_version #=> '1.0' def mime_version( val = nil ) default :mime_version, val end # Sets the MIME version of the email by accepting a string # # Example: # # mail.mime_version = '1.0' # mail.mime_version #=> '1.0' def mime_version=( val ) header[:mime_version] = val end def received( val = nil ) if val header[:received] = val else header[:received] end end def received=( val ) header[:received] = val end def references( val = nil ) default :references, val end def references=( val ) header[:references] = val end # Returns the Reply-To value of the mail object as an array of strings of # address specs. # # Example: # # mail.reply_to = 'Mikel ' # mail.reply_to #=> ['mikel@test.lindsaar.net'] # mail.reply_to = 'Mikel , ada@test.lindsaar.net' # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.reply_to 'Mikel ' # mail.reply_to #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.reply_to 'Mikel ' # mail.reply_to << 'ada@test.lindsaar.net' # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def reply_to( val = nil ) default :reply_to, val end # Sets the Reply-To value of the mail object, pass in a string of the field # # Example: # # mail.reply_to = 'Mikel ' # mail.reply_to #=> ['mikel@test.lindsaar.net'] # mail.reply_to = 'Mikel , ada@test.lindsaar.net' # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def reply_to=( val ) header[:reply_to] = val end # Returns the Resent-Bcc value of the mail object as an array of strings of # address specs. # # Example: # # mail.resent_bcc = 'Mikel ' # mail.resent_bcc #=> ['mikel@test.lindsaar.net'] # mail.resent_bcc = 'Mikel , ada@test.lindsaar.net' # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.resent_bcc 'Mikel ' # mail.resent_bcc #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.resent_bcc 'Mikel ' # mail.resent_bcc << 'ada@test.lindsaar.net' # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_bcc( val = nil ) default :resent_bcc, val end # Sets the Resent-Bcc value of the mail object, pass in a string of the field # # Example: # # mail.resent_bcc = 'Mikel ' # mail.resent_bcc #=> ['mikel@test.lindsaar.net'] # mail.resent_bcc = 'Mikel , ada@test.lindsaar.net' # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_bcc=( val ) header[:resent_bcc] = val end # Returns the Resent-Cc value of the mail object as an array of strings of # address specs. # # Example: # # mail.resent_cc = 'Mikel ' # mail.resent_cc #=> ['mikel@test.lindsaar.net'] # mail.resent_cc = 'Mikel , ada@test.lindsaar.net' # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.resent_cc 'Mikel ' # mail.resent_cc #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.resent_cc 'Mikel ' # mail.resent_cc << 'ada@test.lindsaar.net' # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_cc( val = nil ) default :resent_cc, val end # Sets the Resent-Cc value of the mail object, pass in a string of the field # # Example: # # mail.resent_cc = 'Mikel ' # mail.resent_cc #=> ['mikel@test.lindsaar.net'] # mail.resent_cc = 'Mikel , ada@test.lindsaar.net' # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_cc=( val ) header[:resent_cc] = val end def resent_date( val = nil ) default :resent_date, val end def resent_date=( val ) header[:resent_date] = val end # Returns the Resent-From value of the mail object as an array of strings of # address specs. # # Example: # # mail.resent_from = 'Mikel ' # mail.resent_from #=> ['mikel@test.lindsaar.net'] # mail.resent_from = 'Mikel , ada@test.lindsaar.net' # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.resent_from ['Mikel '] # mail.resent_from #=> 'mikel@test.lindsaar.net' # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.resent_from 'Mikel ' # mail.resent_from << 'ada@test.lindsaar.net' # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_from( val = nil ) default :resent_from, val end # Sets the Resent-From value of the mail object, pass in a string of the field # # Example: # # mail.resent_from = 'Mikel ' # mail.resent_from #=> ['mikel@test.lindsaar.net'] # mail.resent_from = 'Mikel , ada@test.lindsaar.net' # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_from=( val ) header[:resent_from] = val end def resent_message_id( val = nil ) default :resent_message_id, val end def resent_message_id=( val ) header[:resent_message_id] = val end # Returns the Resent-Sender value of the mail object, as a single string of an address # spec. A sender per RFC 2822 must be a single address, so you can not append to # this address. # # Example: # # mail.resent_sender = 'Mikel ' # mail.resent_sender #=> 'mikel@test.lindsaar.net' # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.resent_sender 'Mikel ' # mail.resent_sender #=> 'mikel@test.lindsaar.net' def resent_sender( val = nil ) default :resent_sender, val end # Sets the Resent-Sender value of the mail object, pass in a string of the field # # Example: # # mail.resent_sender = 'Mikel ' # mail.resent_sender #=> 'mikel@test.lindsaar.net' def resent_sender=( val ) header[:resent_sender] = val end # Returns the Resent-To value of the mail object as an array of strings of # address specs. # # Example: # # mail.resent_to = 'Mikel ' # mail.resent_to #=> ['mikel@test.lindsaar.net'] # mail.resent_to = 'Mikel , ada@test.lindsaar.net' # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.resent_to 'Mikel ' # mail.resent_to #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.resent_to 'Mikel ' # mail.resent_to << 'ada@test.lindsaar.net' # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_to( val = nil ) default :resent_to, val end # Sets the Resent-To value of the mail object, pass in a string of the field # # Example: # # mail.resent_to = 'Mikel ' # mail.resent_to #=> ['mikel@test.lindsaar.net'] # mail.resent_to = 'Mikel , ada@test.lindsaar.net' # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def resent_to=( val ) header[:resent_to] = val end # Returns the return path of the mail object, or sets it if you pass a string def return_path( val = nil ) default :return_path, val end # Sets the return path of the object def return_path=( val ) header[:return_path] = val end # Returns the Sender value of the mail object, as a single string of an address # spec. A sender per RFC 2822 must be a single address. # # Example: # # mail.sender = 'Mikel ' # mail.sender #=> 'mikel@test.lindsaar.net' # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.sender 'Mikel ' # mail.sender #=> 'mikel@test.lindsaar.net' def sender( val = nil ) default :sender, val end # Sets the Sender value of the mail object, pass in a string of the field # # Example: # # mail.sender = 'Mikel ' # mail.sender #=> 'mikel@test.lindsaar.net' def sender=( val ) header[:sender] = val end # Returns the SMTP Envelope From value of the mail object, as a single # string of an address spec. # # Defaults to Return-Path, Sender, or the first From address. # # Example: # # mail.smtp_envelope_from = 'Mikel ' # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net' # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.smtp_envelope_from 'Mikel ' # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net' def smtp_envelope_from( val = nil ) if val self.smtp_envelope_from = val else @smtp_envelope_from || return_path || sender || from_addrs.first end end # Sets the From address on the SMTP Envelope. # # Example: # # mail.smtp_envelope_from = 'Mikel ' # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net' def smtp_envelope_from=( val ) @smtp_envelope_from = val end # Returns the SMTP Envelope To value of the mail object. # # Defaults to #destinations: To, Cc, and Bcc addresses. # # Example: # # mail.smtp_envelope_to = 'Mikel ' # mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net' # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.smtp_envelope_to ['Mikel ', 'Lindsaar '] # mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', 'lindsaar@test.lindsaar.net'] def smtp_envelope_to( val = nil ) if val self.smtp_envelope_to = val else @smtp_envelope_to || destinations end end # Sets the To addresses on the SMTP Envelope. # # Example: # # mail.smtp_envelope_to = 'Mikel ' # mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net' # # mail.smtp_envelope_to = ['Mikel ', 'Lindsaar '] # mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', 'lindsaar@test.lindsaar.net'] def smtp_envelope_to=( val ) @smtp_envelope_to = case val when Array, NilClass val else [val] end end # Returns the decoded value of the subject field, as a single string. # # Example: # # mail.subject = "G'Day mate" # mail.subject #=> "G'Day mate" # mail.subject = '=?UTF-8?Q?This_is_=E3=81=82_string?=' # mail.subject #=> "This is あ string" # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.subject "G'Day mate" # mail.subject #=> "G'Day mate" def subject( val = nil ) default :subject, val end # Sets the Subject value of the mail object, pass in a string of the field # # Example: # # mail.subject = '=?UTF-8?Q?This_is_=E3=81=82_string?=' # mail.subject #=> "This is あ string" def subject=( val ) header[:subject] = val end # Returns the To value of the mail object as an array of strings of # address specs. # # Example: # # mail.to = 'Mikel ' # mail.to #=> ['mikel@test.lindsaar.net'] # mail.to = 'Mikel , ada@test.lindsaar.net' # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] # # Also allows you to set the value by passing a value as a parameter # # Example: # # mail.to 'Mikel ' # mail.to #=> ['mikel@test.lindsaar.net'] # # Additionally, you can append new addresses to the returned Array like # object. # # Example: # # mail.to 'Mikel ' # mail.to << 'ada@test.lindsaar.net' # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def to( val = nil ) default :to, val end # Sets the To value of the mail object, pass in a string of the field # # Example: # # mail.to = 'Mikel ' # mail.to #=> ['mikel@test.lindsaar.net'] # mail.to = 'Mikel , ada@test.lindsaar.net' # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net'] def to=( val ) header[:to] = val end # Returns the default value of the field requested as a symbol. # # Each header field has a :default method which returns the most common use case for # that field, for example, the date field types will return a DateTime object when # sent :default, the subject, or unstructured fields will return a decoded string of # their value, the address field types will return a single addr_spec or an array of # addr_specs if there is more than one. def default( sym, val = nil ) if val header[sym] = val else header[sym].default if header[sym] end end # Sets the body object of the message object. # # Example: # # mail.body = 'This is the body' # mail.body #=> # 2 # mail.parts.last.content_type.content_type #=> 'This is a body' def body=(value) body_lazy(value) end # Returns the body of the message object. Or, if passed # a parameter sets the value. # # Example: # # mail = Mail::Message.new('To: mikel\r\n\r\nThis is the body') # mail.body #=> # 3 # mail.destinations.first #=> 'mikel@test.lindsaar.net' def destinations [to_addrs, cc_addrs, bcc_addrs].compact.flatten end # Returns an array of addresses (the encoded value) in the From field, # if no From field, returns an empty array def from_addrs from ? [from].flatten : [] end # Returns an array of addresses (the encoded value) in the To field, # if no To field, returns an empty array def to_addrs to ? [to].flatten : [] end # Returns an array of addresses (the encoded value) in the Cc field, # if no Cc field, returns an empty array def cc_addrs cc ? [cc].flatten : [] end # Returns an array of addresses (the encoded value) in the Bcc field, # if no Bcc field, returns an empty array def bcc_addrs bcc ? [bcc].flatten : [] end # Allows you to add an arbitrary header # # Example: # # mail['foo'] = '1234' # mail['foo'].to_s #=> '1234' def []=(name, value) if name.to_s == 'body' self.body = value elsif name.to_s =~ /content[-_]type/i header[name] = value elsif name.to_s == 'charset' self.charset = value else header[name] = value end end # Allows you to read an arbitrary header # # Example: # # mail['foo'] = '1234' # mail['foo'].to_s #=> '1234' def [](name) header[underscoreize(name)] end # Method Missing in this implementation allows you to set any of the # standard fields directly as you would the "to", "subject" etc. # # Those fields used most often (to, subject et al) are given their # own method for ease of documentation and also to avoid the hook # call to method missing. # # This will only catch the known fields listed in: # # Mail::Field::KNOWN_FIELDS # # as per RFC 2822, any ruby string or method name could pretty much # be a field name, so we don't want to just catch ANYTHING sent to # a message object and interpret it as a header. # # This method provides all three types of header call to set, read # and explicitly set with the = operator # # Examples: # # mail.comments = 'These are some comments' # mail.comments #=> 'These are some comments' # # mail.comments 'These are other comments' # mail.comments #=> 'These are other comments' # # # mail.date = 'Tue, 1 Jul 2003 10:52:37 +0200' # mail.date.to_s #=> 'Tue, 1 Jul 2003 10:52:37 +0200' # # mail.date 'Tue, 1 Jul 2003 10:52:37 +0200' # mail.date.to_s #=> 'Tue, 1 Jul 2003 10:52:37 +0200' # # # mail.resent_msg_id = '<1234@resent_msg_id.lindsaar.net>' # mail.resent_msg_id #=> '<1234@resent_msg_id.lindsaar.net>' # # mail.resent_msg_id '<4567@resent_msg_id.lindsaar.net>' # mail.resent_msg_id #=> '<4567@resent_msg_id.lindsaar.net>' def method_missing(name, *args, &block) #:nodoc: # Only take the structured fields, as we could take _anything_ really # as it could become an optional field... "but therin lies the dark side" field_name = underscoreize(name).chomp("=") if Mail::Field::KNOWN_FIELDS.include?(field_name) if args.empty? header[field_name] else header[field_name] = args.first end else super # otherwise pass it on end #:startdoc: end # Returns an FieldList of all the fields in the header in the order that # they appear in the header def header_fields header.fields end # Returns true if the message has a message ID field, the field may or may # not have a value, but the field exists or not. def has_message_id? header.has_message_id? end # Returns true if the message has a Date field, the field may or may # not have a value, but the field exists or not. def has_date? header.has_date? end # Returns true if the message has a Mime-Version field, the field may or may # not have a value, but the field exists or not. def has_mime_version? header.has_mime_version? end def has_content_type? tmp = header[:content_type].main_type rescue nil !!tmp end def has_charset? tmp = header[:content_type].parameters rescue nil !!(has_content_type? && tmp && tmp['charset']) end def has_content_transfer_encoding? header[:content_transfer_encoding] && Utilities.blank?(header[:content_transfer_encoding].errors) end def has_transfer_encoding? # :nodoc: STDERR.puts(":has_transfer_encoding? is deprecated in Mail 1.4.3. Please use has_content_transfer_encoding?\n#{caller}") has_content_transfer_encoding? end # Creates a new empty Message-ID field and inserts it in the correct order # into the Header. The MessageIdField object will automatically generate # a unique message ID if you try and encode it or output it to_s without # specifying a message id. # # It will preserve the message ID you specify if you do. def add_message_id(msg_id_val = '') header['message-id'] = msg_id_val end # Creates a new empty Date field and inserts it in the correct order # into the Header. The DateField object will automatically generate # DateTime.now's date if you try and encode it or output it to_s without # specifying a date yourself. # # It will preserve any date you specify if you do. def add_date(date_val = '') header['date'] = date_val end # Creates a new empty Mime Version field and inserts it in the correct order # into the Header. The MimeVersion object will automatically generate # set itself to '1.0' if you try and encode it or output it to_s without # specifying a version yourself. # # It will preserve any date you specify if you do. def add_mime_version(ver_val = '') header['mime-version'] = ver_val end # Adds a content type and charset if the body is US-ASCII # # Otherwise raises a warning def add_content_type header[:content_type] = 'text/plain' end # Adds a content type and charset if the body is US-ASCII # # Otherwise raises a warning def add_charset if !body.empty? # Only give a warning if this isn't an attachment, has non US-ASCII and the user # has not specified an encoding explicitly. if @defaulted_charset && body.raw_source.not_ascii_only? && !self.attachment? warning = "Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect.\n" STDERR.puts(warning) end header[:content_type].parameters['charset'] = @charset end end # Adds a content transfer encoding # # Otherwise raises a warning def add_content_transfer_encoding if body.only_us_ascii? header[:content_transfer_encoding] = '7bit' else warning = "Non US-ASCII detected and no content-transfer-encoding defined.\nDefaulting to 8bit, set your own if this is incorrect.\n" STDERR.puts(warning) header[:content_transfer_encoding] = '8bit' end end def add_transfer_encoding # :nodoc: STDERR.puts(":add_transfer_encoding is deprecated in Mail 1.4.3. Please use add_content_transfer_encoding\n#{caller}") add_content_transfer_encoding end def transfer_encoding # :nodoc: STDERR.puts(":transfer_encoding is deprecated in Mail 1.4.3. Please use content_transfer_encoding\n#{caller}") content_transfer_encoding end # Returns the MIME media type of part we are on, this is taken from the content-type header def mime_type has_content_type? ? header[:content_type].string : nil rescue nil end def message_content_type STDERR.puts(":message_content_type is deprecated in Mail 1.4.3. Please use mime_type\n#{caller}") mime_type end # Returns the character set defined in the content type field def charset if @header has_content_type? ? content_type_parameters['charset'] : @charset else @charset end end # Sets the charset to the supplied value. def charset=(value) @defaulted_charset = false @charset = value @header.charset = value end # Returns the main content type def main_type has_content_type? ? header[:content_type].main_type : nil rescue nil end # Returns the sub content type def sub_type has_content_type? ? header[:content_type].sub_type : nil rescue nil end # Returns the content type parameters def mime_parameters STDERR.puts(':mime_parameters is deprecated in Mail 1.4.3, please use :content_type_parameters instead') content_type_parameters end # Returns the content type parameters def content_type_parameters has_content_type? ? header[:content_type].parameters : nil rescue nil end # Returns true if the message is multipart def multipart? has_content_type? ? !!(main_type =~ /^multipart$/i) : false end # Returns true if the message is a multipart/report def multipart_report? multipart? && sub_type =~ /^report$/i end # Returns true if the message is a multipart/report; report-type=delivery-status; def delivery_status_report? multipart_report? && content_type_parameters['report-type'] =~ /^delivery-status$/i end # returns the part in a multipart/report email that has the content-type delivery-status def delivery_status_part @delivery_stats_part ||= parts.select { |p| p.delivery_status_report_part? }.first end def bounced? delivery_status_part and delivery_status_part.bounced? end def action delivery_status_part and delivery_status_part.action end def final_recipient delivery_status_part and delivery_status_part.final_recipient end def error_status delivery_status_part and delivery_status_part.error_status end def diagnostic_code delivery_status_part and delivery_status_part.diagnostic_code end def remote_mta delivery_status_part and delivery_status_part.remote_mta end def retryable? delivery_status_part and delivery_status_part.retryable? end # Returns the current boundary for this message part def boundary content_type_parameters ? content_type_parameters['boundary'] : nil end # Returns a parts list object of all the parts in the message def parts body.parts end # Returns an AttachmentsList object, which holds all of the attachments in # the receiver object (either the entire email or a part within) and all # of its descendants. # # It also allows you to add attachments to the mail object directly, like so: # # mail.attachments['filename.jpg'] = File.read('/path/to/filename.jpg') # # If you do this, then Mail will take the file name and work out the MIME media type # set the Content-Type, Content-Disposition, Content-Transfer-Encoding and # base64 encode the contents of the attachment all for you. # # You can also specify overrides if you want by passing a hash instead of a string: # # mail.attachments['filename.jpg'] = {:mime_type => 'application/x-gzip', # :content => File.read('/path/to/filename.jpg')} # # If you want to use a different encoding than Base64, you can pass an encoding in, # but then it is up to you to pass in the content pre-encoded, and don't expect # Mail to know how to decode this data: # # file_content = SpecialEncode(File.read('/path/to/filename.jpg')) # mail.attachments['filename.jpg'] = {:mime_type => 'application/x-gzip', # :encoding => 'SpecialEncoding', # :content => file_content } # # You can also search for specific attachments: # # # By Filename # mail.attachments['filename.jpg'] #=> Mail::Part object or nil # # # or by index # mail.attachments[0] #=> Mail::Part (first attachment) # def attachments parts.attachments end def has_attachments? !attachments.empty? end # Accessor for html_part def html_part(&block) if block_given? self.html_part = Mail::Part.new(:content_type => 'text/html', &block) else @html_part || find_first_mime_type('text/html') end end # Accessor for text_part def text_part(&block) if block_given? self.text_part = Mail::Part.new(:content_type => 'text/plain', &block) else @text_part || find_first_mime_type('text/plain') end end # Helper to add a html part to a multipart/alternative email. If this and # text_part are both defined in a message, then it will be a multipart/alternative # message and set itself that way. def html_part=(msg) # Assign the html part and set multipart/alternative if there's a text part. if msg msg = Mail::Part.new(:body => msg) unless msg.kind_of?(Mail::Message) @html_part = msg @html_part.content_type = 'text/html' unless @html_part.has_content_type? add_multipart_alternate_header if text_part add_part @html_part # If nil, delete the html part and back out of multipart/alternative. elsif @html_part parts.delete_if { |p| p.object_id == @html_part.object_id } @html_part = nil if text_part self.content_type = nil body.boundary = nil end end end # Helper to add a text part to a multipart/alternative email. If this and # html_part are both defined in a message, then it will be a multipart/alternative # message and set itself that way. def text_part=(msg) # Assign the text part and set multipart/alternative if there's an html part. if msg msg = Mail::Part.new(:body => msg) unless msg.kind_of?(Mail::Message) @text_part = msg @text_part.content_type = 'text/plain' unless @text_part.has_content_type? add_multipart_alternate_header if html_part add_part @text_part # If nil, delete the text part and back out of multipart/alternative. elsif @text_part parts.delete_if { |p| p.object_id == @text_part.object_id } @text_part = nil if html_part self.content_type = nil body.boundary = nil end end end # Adds a part to the parts list or creates the part list def add_part(part) if !body.multipart? && !Utilities.blank?(self.body.decoded) @text_part = Mail::Part.new('Content-Type: text/plain;') @text_part.body = body.decoded self.body << @text_part add_multipart_alternate_header end add_boundary self.body << part end # Allows you to add a part in block form to an existing mail message object # # Example: # # mail = Mail.new do # part :content_type => "multipart/alternative", :content_disposition => "inline" do |p| # p.part :content_type => "text/plain", :body => "test text\nline #2" # p.part :content_type => "text/html", :body => "test HTML
\nline #2" # end # end def part(params = {}) new_part = Part.new(params) yield new_part if block_given? add_part(new_part) end # Adds a file to the message. You have two options with this method, you can # just pass in the absolute path to the file you want and Mail will read the file, # get the filename from the path you pass in and guess the MIME media type, or you # can pass in the filename as a string, and pass in the file content as a blob. # # Example: # # m = Mail.new # m.add_file('/path/to/filename.png') # # m = Mail.new # m.add_file(:filename => 'filename.png', :content => File.read('/path/to/file.jpg')) # # Note also that if you add a file to an existing message, Mail will convert that message # to a MIME multipart email, moving whatever plain text body you had into its own text # plain part. # # Example: # # m = Mail.new do # body 'this is some text' # end # m.multipart? #=> false # m.add_file('/path/to/filename.png') # m.multipart? #=> true # m.parts.first.content_type.content_type #=> 'text/plain' # m.parts.last.content_type.content_type #=> 'image/png' # # See also #attachments def add_file(values) convert_to_multipart unless self.multipart? || Utilities.blank?(self.body.decoded) add_multipart_mixed_header if values.is_a?(String) basename = File.basename(values) filedata = File.open(values, 'rb') { |f| f.read } else basename = values[:filename] filedata = values unless filedata[:content] filedata = values.merge(:content=>File.open(values[:filename], 'rb') { |f| f.read }) end end self.attachments[basename] = filedata end def convert_to_multipart text = body.decoded self.body = '' text_part = Mail::Part.new({:content_type => 'text/plain;', :body => text}) text_part.charset = charset unless @defaulted_charset self.body << text_part end # Encodes the message, calls encode on all its parts, gets an email message # ready to send def ready_to_send! identify_and_set_transfer_encoding parts.sort!([ "text/plain", "text/enriched", "text/html", "multipart/alternative" ]) parts.each do |part| part.transport_encoding = transport_encoding part.ready_to_send! end add_required_fields end def encode! STDERR.puts("Deprecated in 1.1.0 in favour of :ready_to_send! as it is less confusing with encoding and decoding.") ready_to_send! end # Outputs an encoded string representation of the mail message including # all headers, attachments, etc. This is an encoded email in US-ASCII, # so it is able to be directly sent to an email server. def encoded ready_to_send! buffer = header.encoded buffer << "\r\n" buffer << body.encoded(content_transfer_encoding) buffer end def without_attachments! return self unless has_attachments? parts.delete_if { |p| p.attachment? } body_raw = if parts.empty? '' else body.encoded end @body = Mail::Body.new(body_raw) self end def to_yaml(opts = {}) hash = {} hash['headers'] = {} header.fields.each do |field| hash['headers'][field.name] = field.value end hash['delivery_handler'] = delivery_handler.to_s if delivery_handler hash['transport_encoding'] = transport_encoding.to_s special_variables = [:@header, :@delivery_handler, :@transport_encoding] if multipart? hash['multipart_body'] = [] body.parts.map { |part| hash['multipart_body'] << part.to_yaml } special_variables.push(:@body, :@text_part, :@html_part) end (instance_variables.map(&:to_sym) - special_variables).each do |var| hash[var.to_s] = instance_variable_get(var) end hash.to_yaml(opts) end def self.from_yaml(str) hash = YAML.load(str) m = self.new(:headers => hash['headers']) hash.delete('headers') hash.each do |k,v| case when k == 'delivery_handler' begin m.delivery_handler = Object.const_get(v) unless Utilities.blank?(v) rescue NameError end when k == 'transport_encoding' m.transport_encoding(v) when k == 'multipart_body' v.map {|part| m.add_part Mail::Part.from_yaml(part) } when k =~ /^@/ m.instance_variable_set(k.to_sym, v) end end m end def self.from_hash(hash) Mail::Message.new(hash) end def to_s encoded end def inspect "#<#{self.class}:#{self.object_id}, Multipart: #{multipart?}, Headers: #{header.field_summary}>" end def decoded case when self.text? decode_body_as_text when self.attachment? decode_body when !self.multipart? body.decoded else raise NoMethodError, 'Can not decode an entire message, try calling #decoded on the various fields and body or parts if it is a multipart message.' end end def read if self.attachment? decode_body else raise NoMethodError, 'Can not call read on a part unless it is an attachment.' end end def decode_body body.decoded end # Returns true if this part is an attachment, # false otherwise. def attachment? !!find_attachment end # Returns the attachment data if there is any def attachment @attachment end # Returns the filename of the attachment def filename find_attachment end def all_parts parts.map { |p| [p, p.all_parts] }.flatten end def find_first_mime_type(mt) all_parts.detect { |p| p.mime_type == mt && !p.attachment? } end # Skips the deletion of this message. All other messages # flagged for delete still will be deleted at session close (i.e. when # #find exits). Only has an effect if you're using #find_and_delete # or #find with :delete_after_find set to true. def skip_deletion @mark_for_delete = false end # Sets whether this message should be deleted at session close (i.e. # after #find). Message will only be deleted if messages are retrieved # using the #find_and_delete method, or by calling #find with # :delete_after_find set to true. def mark_for_delete=(value = true) @mark_for_delete = value end # Returns whether message will be marked for deletion. # If so, the message will be deleted at session close (i.e. after #find # exits), but only if also using the #find_and_delete method, or by # calling #find with :delete_after_find set to true. # # Side-note: Just to be clear, this method will return true even if # the message hasn't yet been marked for delete on the mail server. # However, if this method returns true, it *will be* marked on the # server after each block yields back to #find or #find_and_delete. def is_marked_for_delete? return @mark_for_delete end def text? has_content_type? ? !!(main_type =~ /^text$/i) : false end private HEADER_SEPARATOR = /#{CRLF}#{CRLF}|#{CRLF}#{WSP}*#{CRLF}(?!#{WSP})/m # 2.1. General Description # A message consists of header fields (collectively called "the header # of the message") followed, optionally, by a body. The header is a # sequence of lines of characters with special syntax as defined in # this standard. The body is simply a sequence of characters that # follows the header and is separated from the header by an empty line # (i.e., a line with nothing preceding the CRLF). # # Additionally, I allow for the case where someone might have put whitespace # on the "gap line" def parse_message header_part, body_part = raw_source.lstrip.split(HEADER_SEPARATOR, 2) self.header = header_part self.body = body_part end def raw_source=(value) value = value.dup.force_encoding(Encoding::BINARY) if RUBY_VERSION >= "1.9.1" @raw_source = ::Mail::Utilities.to_crlf(value) end # see comments to body=. We take data and process it lazily def body_lazy(value) process_body_raw if @body_raw && value case when value == nil || value.length<=0 @body = Mail::Body.new('') @body_raw = nil add_encoding_to_body when @body && @body.multipart? @body << Mail::Part.new(value) add_encoding_to_body else @body_raw = value # process_body_raw end end def process_body_raw @body = Mail::Body.new(@body_raw) @body_raw = nil separate_parts if @separate_parts add_encoding_to_body end def set_envelope_header raw_string = raw_source.to_s if match_data = raw_source.to_s.match(/\AFrom\s(#{TEXT}+)#{CRLF}/m) set_envelope(match_data[1]) self.raw_source = raw_string.sub(match_data[0], "") end end def separate_parts body.split!(boundary) end def add_encoding_to_body if has_content_transfer_encoding? @body.encoding = content_transfer_encoding end end def identify_and_set_transfer_encoding if body && body.multipart? self.content_transfer_encoding = @transport_encoding else self.content_transfer_encoding = body.get_best_encoding(@transport_encoding) end end def add_required_fields add_required_message_fields add_multipart_mixed_header if body.multipart? add_content_type unless has_content_type? add_charset if text? && !has_charset? add_content_transfer_encoding unless has_content_transfer_encoding? end def add_required_message_fields add_date unless has_date? add_mime_version unless has_mime_version? add_message_id unless has_message_id? end def add_multipart_alternate_header header['content-type'] = ContentTypeField.with_boundary('multipart/alternative').value header['content_type'].parameters[:charset] = @charset body.boundary = boundary end def add_boundary unless body.boundary && boundary header['content-type'] = 'multipart/mixed' unless header['content-type'] header['content-type'].parameters[:boundary] = ContentTypeField.generate_boundary header['content_type'].parameters[:charset] = @charset body.boundary = boundary end end def add_multipart_mixed_header unless header['content-type'] header['content-type'] = ContentTypeField.with_boundary('multipart/mixed').value header['content_type'].parameters[:charset] = @charset body.boundary = boundary end end def init_with_hash(hash) passed_in_options = IndifferentHash.new(hash) self.raw_source = '' @header = Mail::Header.new @body = Mail::Body.new @body_raw = nil # We need to store the body until last, as we need all headers added first body_content = nil passed_in_options.each_pair do |k,v| k = underscoreize(k).to_sym if k.class == String if k == :headers self.headers(v) elsif k == :body body_content = v else self[k] = v end end if body_content self.body = body_content if has_content_transfer_encoding? body.encoding = content_transfer_encoding end end end def init_with_string(string) self.raw_source = string set_envelope_header parse_message @separate_parts = multipart? end # Returns the filename of the attachment (if it exists) or returns nil def find_attachment content_type_name = header[:content_type].filename rescue nil content_disp_name = header[:content_disposition].filename rescue nil content_loc_name = header[:content_location].location rescue nil case when content_type && content_type_name filename = content_type_name when content_disposition && content_disp_name filename = content_disp_name when content_location && content_loc_name filename = content_loc_name else filename = nil end filename = Mail::Encodings.decode_encode(filename, :decode) if filename rescue filename filename end def do_delivery begin if perform_deliveries delivery_method.deliver!(self) end rescue => e # Net::SMTP errors or sendmail pipe errors raise e if raise_delivery_errors end end def decode_body_as_text Encodings.transcode_charset decode_body, charset, 'UTF-8' end end end mail-2.6.4/lib/mail/multibyte.rb000066400000000000000000000033031267453234600165130ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail #:nodoc: module Multibyte require 'mail/multibyte/exceptions' require 'mail/multibyte/chars' require 'mail/multibyte/unicode' # The proxy class returned when calling mb_chars. You can use this accessor to configure your own proxy # class so you can support other encodings. See the Mail::Multibyte::Chars implementation for # an example how to do this. # # Example: # Mail::Multibyte.proxy_class = CharsForUTF32 def self.proxy_class=(klass) @proxy_class = klass end # Returns the current proxy class def self.proxy_class @proxy_class ||= Mail::Multibyte::Chars end # Regular expressions that describe valid byte sequences for a character VALID_CHARACTER = { # Borrowed from the Kconv library by Shinji KONO - (also as seen on the W3C site) 'UTF-8' => /\A(?: [\x00-\x7f] | [\xc2-\xdf] [\x80-\xbf] | \xe0 [\xa0-\xbf] [\x80-\xbf] | [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] | \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] | [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] | \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf])\z /xn, # Quick check for valid Shift-JIS characters, disregards the odd-even pairing 'Shift_JIS' => /\A(?: [\x00-\x7e\xa1-\xdf] | [\x81-\x9f\xe0-\xef] [\x40-\x7e\x80-\x9e\x9f-\xfc])\z /xn } end end require 'mail/multibyte/utils'mail-2.6.4/lib/mail/multibyte/000077500000000000000000000000001267453234600161675ustar00rootroot00000000000000mail-2.6.4/lib/mail/multibyte/chars.rb000066400000000000000000000423451267453234600176240ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail #:nodoc: module Multibyte #:nodoc: # Chars enables you to work transparently with UTF-8 encoding in the Ruby String class without having extensive # knowledge about the encoding. A Chars object accepts a string upon initialization and proxies String methods in an # encoding safe manner. All the normal String methods are also implemented on the proxy. # # String methods are proxied through the Chars object, and can be accessed through the +mb_chars+ method. Methods # which would normally return a String object now return a Chars object so methods can be chained. # # "The Perfect String ".mb_chars.downcase.strip.normalize # => "the perfect string" # # Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made. # If certain methods do explicitly check the class, call +to_s+ before you pass chars objects to them. # # bad.explicit_checking_method "T".mb_chars.downcase.to_s # # The default Chars implementation assumes that the encoding of the string is UTF-8, if you want to handle different # encodings you can write your own multibyte string handler and configure it through # Mail::Multibyte.proxy_class. # # class CharsForUTF32 # def size # @wrapped_string.size / 4 # end # # def self.accepts?(string) # string.length % 4 == 0 # end # end # # Mail::Multibyte.proxy_class = CharsForUTF32 class Chars attr_reader :wrapped_string alias to_s wrapped_string alias to_str wrapped_string if RUBY_VERSION >= "1.9" # Creates a new Chars instance by wrapping _string_. def initialize(string) @wrapped_string = string @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen? end else def initialize(string) #:nodoc: @wrapped_string = string end end # Forward all undefined methods to the wrapped string. def method_missing(method, *args, &block) if method.to_s =~ /!$/ @wrapped_string.__send__(method, *args, &block) self else result = @wrapped_string.__send__(method, *args, &block) result.kind_of?(String) ? chars(result) : result end end # Returns +true+ if _obj_ responds to the given method. Private methods are included in the search # only if the optional second parameter evaluates to +true+. def respond_to?(method, include_private=false) super || @wrapped_string.respond_to?(method, include_private) || false end # Enable more predictable duck-typing on String-like classes. See Object#acts_like?. def acts_like_string? true end # Returns +true+ when the proxy class can handle the string. Returns +false+ otherwise. def self.consumes?(string) # Unpack is a little bit faster than regular expressions. string.unpack('U*') true rescue ArgumentError false end include Comparable # Returns -1, 0, or 1, depending on whether the Chars object is to be sorted before, # equal or after the object on the right side of the operation. It accepts any object # that implements +to_s+: # # 'é'.mb_chars <=> 'ü'.mb_chars # => -1 # # See String#<=> for more details. def <=>(other) @wrapped_string <=> other.to_s end if RUBY_VERSION < "1.9" # Returns +true+ if the Chars class can and should act as a proxy for the string _string_. Returns # +false+ otherwise. def self.wants?(string) $KCODE == 'UTF8' && consumes?(string) end # Returns a new Chars object containing the _other_ object concatenated to the string. # # Example: # ('Café'.mb_chars + ' périferôl').to_s # => "Café périferôl" def +(other) chars(@wrapped_string + other) end # Like String#=~ only it returns the character offset (in codepoints) instead of the byte offset. # # Example: # 'Café périferôl'.mb_chars =~ /ô/ # => 12 def =~(other) translate_offset(@wrapped_string =~ other) end # Inserts the passed string at specified codepoint offsets. # # Example: # 'Café'.mb_chars.insert(4, ' périferôl').to_s # => "Café périferôl" def insert(offset, fragment) unpacked = Unicode.u_unpack(@wrapped_string) unless offset > unpacked.length @wrapped_string.replace( Unicode.u_unpack(@wrapped_string).insert(offset, *Unicode.u_unpack(fragment)).pack('U*') ) else raise IndexError, "index #{offset} out of string" end self end # Returns +true+ if contained string contains _other_. Returns +false+ otherwise. # # Example: # 'Café'.mb_chars.include?('é') # => true def include?(other) # We have to redefine this method because Enumerable defines it. @wrapped_string.include?(other) end # Returns the position _needle_ in the string, counting in codepoints. Returns +nil+ if _needle_ isn't found. # # Example: # 'Café périferôl'.mb_chars.index('ô') # => 12 # 'Café périferôl'.mb_chars.index(/\w/u) # => 0 def index(needle, offset=0) wrapped_offset = first(offset).wrapped_string.length index = @wrapped_string.index(needle, wrapped_offset) index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil end # Returns the position _needle_ in the string, counting in # codepoints, searching backward from _offset_ or the end of the # string. Returns +nil+ if _needle_ isn't found. # # Example: # 'Café périferôl'.mb_chars.rindex('é') # => 6 # 'Café périferôl'.mb_chars.rindex(/\w/u) # => 13 def rindex(needle, offset=nil) offset ||= length wrapped_offset = first(offset).wrapped_string.length index = @wrapped_string.rindex(needle, wrapped_offset) index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil end # Returns the number of codepoints in the string def size Unicode.u_unpack(@wrapped_string).size end alias_method :length, :size # Strips entire range of Unicode whitespace from the right of the string. def rstrip chars(@wrapped_string.gsub(Unicode::TRAILERS_PAT, '')) end # Strips entire range of Unicode whitespace from the left of the string. def lstrip chars(@wrapped_string.gsub(Unicode::LEADERS_PAT, '')) end # Strips entire range of Unicode whitespace from the right and left of the string. def strip rstrip.lstrip end # Returns the codepoint of the first character in the string. # # Example: # 'こんにちは'.mb_chars.ord # => 12371 def ord Unicode.u_unpack(@wrapped_string)[0] end # Works just like String#rjust, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.rjust(8).to_s # # => " ¾ cup" # # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # # => "   ¾ cup" def rjust(integer, padstr=' ') justify(integer, :right, padstr) end # Works just like String#ljust, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.rjust(8).to_s # # => "¾ cup " # # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # # => "¾ cup   " def ljust(integer, padstr=' ') justify(integer, :left, padstr) end # Works just like String#center, only integer specifies characters instead of bytes. # # Example: # # "¾ cup".mb_chars.center(8).to_s # # => " ¾ cup " # # "¾ cup".mb_chars.center(8, " ").to_s # Use non-breaking whitespace # # => " ¾ cup  " def center(integer, padstr=' ') justify(integer, :center, padstr) end else def =~(other) @wrapped_string =~ other end end # Works just like String#split, with the exception that the items in the resulting list are Chars # instances instead of String. This makes chaining methods easier. # # Example: # 'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFERÔL"] def split(*args) @wrapped_string.split(*args).map { |i| i.mb_chars } end # Like String#[]=, except instead of byte offsets you specify character offsets. # # Example: # # s = "Müller" # s.mb_chars[2] = "e" # Replace character with offset 2 # s # # => "Müeler" # # s = "Müller" # s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1 # s # # => "Möler" def []=(*args) replace_by = args.pop # Indexed replace with regular expressions already works if args.first.is_a?(Regexp) @wrapped_string[*args] = replace_by else result = Unicode.u_unpack(@wrapped_string) if args[0].is_a?(Fixnum) raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length min = args[0] max = args[1].nil? ? min : (min + args[1] - 1) range = Range.new(min, max) replace_by = [replace_by].pack('U') if replace_by.is_a?(Fixnum) elsif args.first.is_a?(Range) raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length range = args[0] else needle = args[0].to_s min = index(needle) max = min + Unicode.u_unpack(needle).length - 1 range = Range.new(min, max) end result[range] = Unicode.u_unpack(replace_by) @wrapped_string.replace(result.pack('U*')) end end # Reverses all characters in the string. # # Example: # 'Café'.mb_chars.reverse.to_s # => 'éfaC' def reverse chars(Unicode.g_unpack(@wrapped_string).reverse.flatten.pack('U*')) end # Implements Unicode-aware slice with codepoints. Slicing on one point returns the codepoints for that # character. # # Example: # 'こんにちは'.mb_chars.slice(2..3).to_s # => "にち" def slice(*args) if args.size > 2 raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native elsif (args.size == 2 && !(args.first.is_a?(Numeric) || args.first.is_a?(Regexp))) raise TypeError, "cannot convert #{args.first.class} into Integer" # Do as if we were native elsif (args.size == 2 && !args[1].is_a?(Numeric)) raise TypeError, "cannot convert #{args[1].class} into Integer" # Do as if we were native elsif args[0].kind_of? Range cps = Unicode.u_unpack(@wrapped_string).slice(*args) result = cps.nil? ? nil : cps.pack('U*') elsif args[0].kind_of? Regexp result = @wrapped_string.slice(*args) elsif args.size == 1 && args[0].kind_of?(Numeric) character = Unicode.u_unpack(@wrapped_string)[args[0]] result = character && [character].pack('U') else cps = Unicode.u_unpack(@wrapped_string).slice(*args) result = cps && cps.pack('U*') end result && chars(result) end alias_method :[], :slice # Limit the byte size of the string to a number of bytes without breaking characters. Usable # when the storage for a string is limited for some reason. # # Example: # s = 'こんにちは' # s.mb_chars.limit(7) # => "こに" def limit(limit) slice(0...translate_offset(limit)) end # Convert characters in the string to uppercase. # # Example: # 'Laurent, où sont les tests ?'.mb_chars.upcase.to_s # => "LAURENT, OÙ SONT LES TESTS ?" def upcase chars(Unicode.apply_mapping(@wrapped_string, :uppercase_mapping)) end # Convert characters in the string to lowercase. # # Example: # 'VĚDA A VÝZKUM'.mb_chars.downcase.to_s # => "věda a výzkum" def downcase chars(Unicode.apply_mapping(@wrapped_string, :lowercase_mapping)) end # Converts the first character to uppercase and the remainder to lowercase. # # Example: # 'über'.mb_chars.capitalize.to_s # => "Über" def capitalize (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase end # Capitalizes the first letter of every word, when possible. # # Example: # "ÉL QUE SE ENTERÓ".mb_chars.titleize # => "Él Que Se Enteró" # "日本語".mb_chars.titleize # => "日本語" def titleize chars(downcase.to_s.gsub(/\b('?\S)/u) { Unicode.apply_mapping $1, :uppercase_mapping }) end alias_method :titlecase, :titleize # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for # passing strings to databases and validations. # # * form - The form you want to normalize in. Should be one of the following: # :c, :kc, :d, or :kd. Default is # Mail::Multibyte::Unicode.default_normalization_form def normalize(form = nil) chars(Unicode.normalize(@wrapped_string, form)) end # Performs canonical decomposition on all the characters. # # Example: # 'é'.length # => 2 # 'é'.mb_chars.decompose.to_s.length # => 3 def decompose chars(Unicode.decompose_codepoints(:canonical, Unicode.u_unpack(@wrapped_string)).pack('U*')) end # Performs composition on all the characters. # # Example: # 'é'.length # => 3 # 'é'.mb_chars.compose.to_s.length # => 2 def compose chars(Unicode.compose_codepoints(Unicode.u_unpack(@wrapped_string)).pack('U*')) end # Returns the number of grapheme clusters in the string. # # Example: # 'क्षि'.mb_chars.length # => 4 # 'क्षि'.mb_chars.g_length # => 3 def g_length Unicode.g_unpack(@wrapped_string).length end # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string. # # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1. def tidy_bytes(force = false) chars(Unicode.tidy_bytes(@wrapped_string, force)) end %w(capitalize downcase lstrip reverse rstrip slice strip tidy_bytes upcase).each do |method| # Only define a corresponding bang method for methods defined in the proxy; On 1.9 the proxy will # exclude lstrip!, rstrip! and strip! because they are already work as expected on multibyte strings. if public_method_defined?(method) define_method("#{method}!") do |*args| @wrapped_string = send(args.nil? ? method : method, *args).to_s self end end end protected def translate_offset(byte_offset) #:nodoc: return nil if byte_offset.nil? return 0 if @wrapped_string == '' if @wrapped_string.respond_to?(:force_encoding) @wrapped_string = @wrapped_string.dup.force_encoding(Encoding::ASCII_8BIT) end begin @wrapped_string[0...byte_offset].unpack('U*').length rescue ArgumentError byte_offset -= 1 retry end end def justify(integer, way, padstr=' ') #:nodoc: raise ArgumentError, "zero width padding" if padstr.length == 0 padsize = integer - size padsize = padsize > 0 ? padsize : 0 case way when :right result = @wrapped_string.dup.insert(0, padding(padsize, padstr)) when :left result = @wrapped_string.dup.insert(-1, padding(padsize, padstr)) when :center lpad = padding((padsize / 2.0).floor, padstr) rpad = padding((padsize / 2.0).ceil, padstr) result = @wrapped_string.dup.insert(0, lpad).insert(-1, rpad) end chars(result) end def padding(padsize, padstr=' ') #:nodoc: if padsize != 0 chars(padstr * ((padsize / Unicode.u_unpack(padstr).size) + 1)).slice(0, padsize) else '' end end def chars(string) #:nodoc: self.class.new(string) end end end end mail-2.6.4/lib/mail/multibyte/exceptions.rb000066400000000000000000000003211267453234600206710ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail #:nodoc: module Multibyte #:nodoc: # Raised when a problem with the encoding was found. class EncodingError < StandardError; end end endmail-2.6.4/lib/mail/multibyte/unicode.rb000066400000000000000000000362311267453234600201470ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Multibyte module Unicode # Adapted from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/multibyte/unicode.rb # under the MIT license # The Unicode version that is supported by the implementation UNICODE_VERSION = '7.0.0' # Holds data about a codepoint in the Unicode database. class Codepoint attr_accessor :code, :combining_class, :decomp_type, :decomp_mapping, :uppercase_mapping, :lowercase_mapping # Initializing Codepoint object with default values def initialize @combining_class = 0 @uppercase_mapping = 0 @lowercase_mapping = 0 end def swapcase_mapping uppercase_mapping > 0 ? uppercase_mapping : lowercase_mapping end end extend self # A list of all available normalization forms. See http://www.unicode.org/reports/tr15/tr15-29.html for more # information about normalization. NORMALIZATION_FORMS = [:c, :kc, :d, :kd] # The default normalization used for operations that require normalization. It can be set to any of the # normalizations in NORMALIZATION_FORMS. # # Example: # Mail::Multibyte::Unicode.default_normalization_form = :c attr_accessor :default_normalization_form @default_normalization_form = :kc # Hangul character boundaries and properties HANGUL_SBASE = 0xAC00 HANGUL_LBASE = 0x1100 HANGUL_VBASE = 0x1161 HANGUL_TBASE = 0x11A7 HANGUL_LCOUNT = 19 HANGUL_VCOUNT = 21 HANGUL_TCOUNT = 28 HANGUL_NCOUNT = HANGUL_VCOUNT * HANGUL_TCOUNT HANGUL_SCOUNT = 11172 HANGUL_SLAST = HANGUL_SBASE + HANGUL_SCOUNT HANGUL_JAMO_FIRST = 0x1100 HANGUL_JAMO_LAST = 0x11FF # All the unicode whitespace WHITESPACE = [ (0x0009..0x000D).to_a, # White_Space # Cc [5] .. 0x0020, # White_Space # Zs SPACE 0x0085, # White_Space # Cc 0x00A0, # White_Space # Zs NO-BREAK SPACE 0x1680, # White_Space # Zs OGHAM SPACE MARK 0x180E, # White_Space # Zs MONGOLIAN VOWEL SEPARATOR (0x2000..0x200A).to_a, # White_Space # Zs [11] EN QUAD..HAIR SPACE 0x2028, # White_Space # Zl LINE SEPARATOR 0x2029, # White_Space # Zp PARAGRAPH SEPARATOR 0x202F, # White_Space # Zs NARROW NO-BREAK SPACE 0x205F, # White_Space # Zs MEDIUM MATHEMATICAL SPACE 0x3000, # White_Space # Zs IDEOGRAPHIC SPACE ].flatten.freeze # BOM (byte order mark) can also be seen as whitespace, it's a non-rendering character used to distinguish # between little and big endian. This is not an issue in utf-8, so it must be ignored. LEADERS_AND_TRAILERS = WHITESPACE + [65279] # ZERO-WIDTH NO-BREAK SPACE aka BOM # Returns a regular expression pattern that matches the passed Unicode codepoints def self.codepoints_to_pattern(array_of_codepoints) #:nodoc: array_of_codepoints.collect{ |e| [e].pack 'U*' }.join('|') end TRAILERS_PAT = /(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+\Z/u LEADERS_PAT = /\A(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+/u # Unpack the string at codepoints boundaries. Raises an EncodingError when the encoding of the string isn't # valid UTF-8. # # Example: # Unicode.u_unpack('Café') # => [67, 97, 102, 233] def u_unpack(string) begin string.unpack 'U*' rescue ArgumentError raise EncodingError, 'malformed UTF-8 character' end end # Detect whether the codepoint is in a certain character class. Returns +true+ when it's in the specified # character class and +false+ otherwise. Valid character classes are: :cr, :lf, :l, # :v, :lv, :lvt and :t. # # Primarily used by the grapheme cluster support. def in_char_class?(codepoint, classes) classes.detect { |c| database.boundary[c] === codepoint } ? true : false end # Unpack the string at grapheme boundaries. Returns a list of character lists. # # Example: # Unicode.g_unpack('क्षि') # => [[2325, 2381], [2359], [2367]] # Unicode.g_unpack('Café') # => [[67], [97], [102], [233]] def g_unpack(string) codepoints = u_unpack(string) unpacked = [] pos = 0 marker = 0 eoc = codepoints.length while(pos < eoc) pos += 1 previous = codepoints[pos-1] current = codepoints[pos] if ( # CR X LF ( previous == database.boundary[:cr] and current == database.boundary[:lf] ) or # L X (L|V|LV|LVT) ( database.boundary[:l] === previous and in_char_class?(current, [:l,:v,:lv,:lvt]) ) or # (LV|V) X (V|T) ( in_char_class?(previous, [:lv,:v]) and in_char_class?(current, [:v,:t]) ) or # (LVT|T) X (T) ( in_char_class?(previous, [:lvt,:t]) and database.boundary[:t] === current ) or # X Extend (database.boundary[:extend] === current) ) else unpacked << codepoints[marker..pos-1] marker = pos end end unpacked end # Reverse operation of g_unpack. # # Example: # Unicode.g_pack(Unicode.g_unpack('क्षि')) # => 'क्षि' def g_pack(unpacked) (unpacked.flatten).pack('U*') end # Re-order codepoints so the string becomes canonical. def reorder_characters(codepoints) length = codepoints.length- 1 pos = 0 while pos < length do cp1, cp2 = database.codepoints[codepoints[pos]], database.codepoints[codepoints[pos+1]] if (cp1.combining_class > cp2.combining_class) && (cp2.combining_class > 0) codepoints[pos..pos+1] = cp2.code, cp1.code pos += (pos > 0 ? -1 : 1) else pos += 1 end end codepoints end # Decompose composed characters to the decomposed form. def decompose_codepoints(type, codepoints) codepoints.inject([]) do |decomposed, cp| # if it's a hangul syllable starter character if HANGUL_SBASE <= cp and cp < HANGUL_SLAST sindex = cp - HANGUL_SBASE ncp = [] # new codepoints ncp << HANGUL_LBASE + sindex / HANGUL_NCOUNT ncp << HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT tindex = sindex % HANGUL_TCOUNT ncp << (HANGUL_TBASE + tindex) unless tindex == 0 decomposed.concat ncp # if the codepoint is decomposable in with the current decomposition type elsif (ncp = database.codepoints[cp].decomp_mapping) and (!database.codepoints[cp].decomp_type || type == :compatability) decomposed.concat decompose_codepoints(type, ncp.dup) else decomposed << cp end end end # Compose decomposed characters to the composed form. def compose_codepoints(codepoints) pos = 0 eoa = codepoints.length - 1 starter_pos = 0 starter_char = codepoints[0] previous_combining_class = -1 while pos < eoa pos += 1 lindex = starter_char - HANGUL_LBASE # -- Hangul if 0 <= lindex and lindex < HANGUL_LCOUNT vindex = codepoints[starter_pos+1] - HANGUL_VBASE rescue vindex = -1 if 0 <= vindex and vindex < HANGUL_VCOUNT tindex = codepoints[starter_pos+2] - HANGUL_TBASE rescue tindex = -1 if 0 <= tindex and tindex < HANGUL_TCOUNT j = starter_pos + 2 eoa -= 2 else tindex = 0 j = starter_pos + 1 eoa -= 1 end codepoints[starter_pos..j] = (lindex * HANGUL_VCOUNT + vindex) * HANGUL_TCOUNT + tindex + HANGUL_SBASE end starter_pos += 1 starter_char = codepoints[starter_pos] # -- Other characters else current_char = codepoints[pos] current = database.codepoints[current_char] if current.combining_class > previous_combining_class if ref = database.composition_map[starter_char] composition = ref[current_char] else composition = nil end unless composition.nil? codepoints[starter_pos] = composition starter_char = composition codepoints.delete_at pos eoa -= 1 pos -= 1 previous_combining_class = -1 else previous_combining_class = current.combining_class end else previous_combining_class = current.combining_class end if current.combining_class == 0 starter_pos = pos starter_char = codepoints[pos] end end end codepoints end # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string. # # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1. def tidy_bytes(string, force = false) if force return string.unpack("C*").map do |b| tidy_byte(b) end.flatten.compact.pack("C*").unpack("U*").pack("U*") end bytes = string.unpack("C*") conts_expected = 0 last_lead = 0 bytes.each_index do |i| byte = bytes[i] is_cont = byte > 127 && byte < 192 is_lead = byte > 191 && byte < 245 is_unused = byte > 240 is_restricted = byte > 244 # Impossible or highly unlikely byte? Clean it. if is_unused || is_restricted bytes[i] = tidy_byte(byte) elsif is_cont # Not expecting contination byte? Clean up. Otherwise, now expect one less. conts_expected == 0 ? bytes[i] = tidy_byte(byte) : conts_expected -= 1 else if conts_expected > 0 # Expected continuation, but got ASCII or leading? Clean backwards up to # the leading byte. (1..(i - last_lead)).each {|j| bytes[i - j] = tidy_byte(bytes[i - j])} conts_expected = 0 end if is_lead # Final byte is leading? Clean it. if i == bytes.length - 1 bytes[i] = tidy_byte(bytes.last) else # Valid leading byte? Expect continuations determined by position of # first zero bit, with max of 3. conts_expected = byte < 224 ? 1 : byte < 240 ? 2 : 3 last_lead = i end end end end bytes.empty? ? "" : bytes.flatten.compact.pack("C*").unpack("U*").pack("U*") end # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for # passing strings to databases and validations. # # * string - The string to perform normalization on. # * form - The form you want to normalize in. Should be one of the following: # :c, :kc, :d, or :kd. Default is # Mail::Multibyte.default_normalization_form def normalize(string, form=nil) form ||= @default_normalization_form # See http://www.unicode.org/reports/tr15, Table 1 codepoints = u_unpack(string) case form when :d reorder_characters(decompose_codepoints(:canonical, codepoints)) when :c compose_codepoints(reorder_characters(decompose_codepoints(:canonical, codepoints))) when :kd reorder_characters(decompose_codepoints(:compatability, codepoints)) when :kc compose_codepoints(reorder_characters(decompose_codepoints(:compatability, codepoints))) else raise ArgumentError, "#{form} is not a valid normalization variant", caller end.pack('U*') end def apply_mapping(string, mapping) #:nodoc: u_unpack(string).map do |codepoint| cp = database.codepoints[codepoint] if cp and (ncp = cp.send(mapping)) and ncp > 0 ncp else codepoint end end.pack('U*') end # Holds static data from the Unicode database class UnicodeDatabase ATTRIBUTES = :codepoints, :composition_exclusion, :composition_map, :boundary, :cp1252 attr_writer(*ATTRIBUTES) def initialize @codepoints = Hash.new(Codepoint.new) @composition_exclusion = [] @composition_map = {} @boundary = {} @cp1252 = {} end # Lazy load the Unicode database so it's only loaded when it's actually used ATTRIBUTES.each do |attr_name| class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{attr_name} # def codepoints load # load @#{attr_name} # @codepoints end # end EOS end # Loads the Unicode database and returns all the internal objects of UnicodeDatabase. def load begin @codepoints, @composition_exclusion, @composition_map, @boundary, @cp1252 = File.open(self.class.filename, 'rb') { |f| Marshal.load f.read } rescue => e raise IOError.new("Couldn't load the Unicode tables for UTF8Handler (#{e.message}), Mail::Multibyte is unusable") end # Redefine the === method so we can write shorter rules for grapheme cluster breaks @boundary.each do |k,_| @boundary[k].instance_eval do def ===(other) detect { |i| i === other } ? true : false end end if @boundary[k].kind_of?(Array) end # define attr_reader methods for the instance variables class << self attr_reader(*ATTRIBUTES) end end # Returns the directory in which the data files are stored def self.dirname File.dirname(__FILE__) + '/../values/' end # Returns the filename for the data file for this version def self.filename File.expand_path File.join(dirname, "unicode_tables.dat") end end private def tidy_byte(byte) if byte < 160 [database.cp1252[byte] || byte].pack("U").unpack("C*") elsif byte < 192 [194, byte] else [195, byte - 64] end end def database @database ||= UnicodeDatabase.new end end end end mail-2.6.4/lib/mail/multibyte/utils.rb000066400000000000000000000032261267453234600176570ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail #:nodoc: module Multibyte #:nodoc: if RUBY_VERSION >= "1.9" # Returns a regular expression that matches valid characters in the current encoding def self.valid_character VALID_CHARACTER[Encoding.default_external.to_s] end else def self.valid_character case $KCODE when 'UTF8' VALID_CHARACTER['UTF-8'] when 'SJIS' VALID_CHARACTER['Shift_JIS'] end end end if 'string'.respond_to?(:valid_encoding?) # Verifies the encoding of a string def self.verify(string) string.valid_encoding? end else def self.verify(string) if expression = valid_character # Splits the string on character boundaries, which are determined based on $KCODE. string.split(//).all? { |c| expression =~ c } else true end end end # Verifies the encoding of the string and raises an exception when it's not valid def self.verify!(string) raise EncodingError.new("Found characters with invalid encoding") unless verify(string) end if 'string'.respond_to?(:force_encoding) # Removes all invalid characters from the string. # # Note: this method is a no-op in Ruby 1.9 def self.clean(string) string end else def self.clean(string) if expression = valid_character # Splits the string on character boundaries, which are determined based on $KCODE. string.split(//).grep(expression).join else string end end end end end mail-2.6.4/lib/mail/network.rb000066400000000000000000000013571267453234600161750ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/network/retriever_methods/base' module Mail register_autoload :SMTP, 'mail/network/delivery_methods/smtp' register_autoload :FileDelivery, 'mail/network/delivery_methods/file_delivery' register_autoload :Sendmail, 'mail/network/delivery_methods/sendmail' register_autoload :Exim, 'mail/network/delivery_methods/exim' register_autoload :SMTPConnection, 'mail/network/delivery_methods/smtp_connection' register_autoload :TestMailer, 'mail/network/delivery_methods/test_mailer' register_autoload :POP3, 'mail/network/retriever_methods/pop3' register_autoload :IMAP, 'mail/network/retriever_methods/imap' register_autoload :TestRetriever, 'mail/network/retriever_methods/test_retriever' end mail-2.6.4/lib/mail/network/000077500000000000000000000000001267453234600156425ustar00rootroot00000000000000mail-2.6.4/lib/mail/network/delivery_methods/000077500000000000000000000000001267453234600212105ustar00rootroot00000000000000mail-2.6.4/lib/mail/network/delivery_methods/exim.rb000066400000000000000000000025321267453234600225010ustar00rootroot00000000000000# frozen_string_literal: true module Mail # A delivery method implementation which sends via exim. # # To use this, first find out where the exim binary is on your computer, # if you are on a mac or unix box, it is usually in /usr/sbin/exim, this will # be your exim location. # # Mail.defaults do # delivery_method :exim # end # # Or if your exim binary is not at '/usr/sbin/exim' # # Mail.defaults do # delivery_method :exim, :location => '/absolute/path/to/your/exim' # end # # Then just deliver the email as normal: # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing exim' # body 'testing exim' # end # # Or by calling deliver on a Mail message # # mail = Mail.new do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing exim' # body 'testing exim' # end # # mail.deliver! class Exim < Sendmail def initialize(values) self.settings = { :location => '/usr/sbin/exim', :arguments => '-i -t' }.merge(values) end def self.call(path, arguments, destinations, mail) popen "#{path} #{arguments}" do |io| io.puts ::Mail::Utilities.to_lf(mail.encoded) io.flush end end end end mail-2.6.4/lib/mail/network/delivery_methods/file_delivery.rb000066400000000000000000000024501267453234600243600ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/check_delivery_params' module Mail # FileDelivery class delivers emails into multiple files based on the destination # address. Each file is appended to if it already exists. # # So if you have an email going to fred@test, bob@test, joe@anothertest, and you # set your location path to /path/to/mails then FileDelivery will create the directory # if it does not exist, and put one copy of the email in three files, called # by their message id # # Make sure the path you specify with :location is writable by the Ruby process # running Mail. class FileDelivery include Mail::CheckDeliveryParams if RUBY_VERSION >= '1.9.1' require 'fileutils' else require 'ftools' end def initialize(values) self.settings = { :location => './mails' }.merge!(values) end attr_accessor :settings def deliver!(mail) check_delivery_params(mail) if ::File.respond_to?(:makedirs) ::File.makedirs settings[:location] else ::FileUtils.mkdir_p settings[:location] end mail.destinations.uniq.each do |to| ::File.open(::File.join(settings[:location], File.basename(to.to_s)), 'a') { |f| "#{f.write(mail.encoded)}\r\n\r\n" } end end end end mail-2.6.4/lib/mail/network/delivery_methods/sendmail.rb000066400000000000000000000053251267453234600233360ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/check_delivery_params' module Mail # A delivery method implementation which sends via sendmail. # # To use this, first find out where the sendmail binary is on your computer, # if you are on a mac or unix box, it is usually in /usr/sbin/sendmail, this will # be your sendmail location. # # Mail.defaults do # delivery_method :sendmail # end # # Or if your sendmail binary is not at '/usr/sbin/sendmail' # # Mail.defaults do # delivery_method :sendmail, :location => '/absolute/path/to/your/sendmail' # end # # Then just deliver the email as normal: # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # Or by calling deliver on a Mail message # # mail = Mail.new do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # mail.deliver! class Sendmail include Mail::CheckDeliveryParams def initialize(values) self.settings = { :location => '/usr/sbin/sendmail', :arguments => '-i' }.merge(values) end attr_accessor :settings def deliver!(mail) smtp_from, smtp_to, message = check_delivery_params(mail) from = "-f #{self.class.shellquote(smtp_from)}" to = smtp_to.map { |_to| self.class.shellquote(_to) }.join(' ') arguments = "#{settings[:arguments]} #{from} --" self.class.call(settings[:location], arguments, to, message) end def self.call(path, arguments, destinations, encoded_message) popen "#{path} #{arguments} #{destinations}" do |io| io.puts ::Mail::Utilities.to_lf(encoded_message) io.flush end end if RUBY_VERSION < '1.9.0' def self.popen(command, &block) IO.popen "#{command} 2>&1", 'w+', &block end else def self.popen(command, &block) IO.popen command, 'w+', :err => :out, &block end end # The following is an adaptation of ruby 1.9.2's shellwords.rb file, # it is modified to include '+' in the allowed list to allow for # sendmail to accept email addresses as the sender with a + in them. def self.shellquote(address) # Process as a single byte sequence because not all shell # implementations are multibyte aware. # # A LF cannot be escaped with a backslash because a backslash + LF # combo is regarded as line continuation and simply ignored. Strip it. escaped = address.gsub(/([^A-Za-z0-9_\s\+\-.,:\/@])/n, "\\\\\\1").gsub("\n", '') %("#{escaped}") end end end mail-2.6.4/lib/mail/network/delivery_methods/smtp.rb000066400000000000000000000120051267453234600225160ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/check_delivery_params' module Mail # == Sending Email with SMTP # # Mail allows you to send emails using SMTP. This is done by wrapping Net::SMTP in # an easy to use manner. # # === Sending via SMTP server on Localhost # # Sending locally (to a postfix or sendmail server running on localhost) requires # no special setup. Just to Mail.deliver &block or message.deliver! and it will # be sent in this method. # # === Sending via MobileMe # # Mail.defaults do # delivery_method :smtp, { :address => "smtp.me.com", # :port => 587, # :domain => 'your.host.name', # :user_name => '', # :password => '', # :authentication => 'plain', # :enable_starttls_auto => true } # end # # === Sending via GMail # # Mail.defaults do # delivery_method :smtp, { :address => "smtp.gmail.com", # :port => 587, # :domain => 'your.host.name', # :user_name => '', # :password => '', # :authentication => 'plain', # :enable_starttls_auto => true } # end # # === Certificate verification # # When using TLS, some mail servers provide certificates that are self-signed # or whose names do not exactly match the hostname given in the address. # OpenSSL will reject these by default. The best remedy is to use the correct # hostname or update the certificate authorities trusted by your ruby. If # that isn't possible, you can control this behavior with # an :openssl_verify_mode setting. Its value may be either an OpenSSL # verify mode constant (OpenSSL::SSL::VERIFY_NONE), or a string containing # the name of an OpenSSL verify mode (none, peer, client_once, # fail_if_no_peer_cert). # # === Others # # Feel free to send me other examples that were tricky # # === Delivering the email # # Once you have the settings right, sending the email is done by: # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # Or by calling deliver on a Mail message # # mail = Mail.new do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # mail.deliver! class SMTP include Mail::CheckDeliveryParams def initialize(values) self.settings = { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true, :openssl_verify_mode => nil, :ssl => nil, :tls => nil }.merge!(values) end attr_accessor :settings # Send the message via SMTP. # The from and to attributes are optional. If not set, they are retrieve from the Message. def deliver!(mail) smtp_from, smtp_to, message = check_delivery_params(mail) smtp = Net::SMTP.new(settings[:address], settings[:port]) if settings[:tls] || settings[:ssl] if smtp.respond_to?(:enable_tls) smtp.enable_tls(ssl_context) end elsif settings[:enable_starttls_auto] if smtp.respond_to?(:enable_starttls_auto) smtp.enable_starttls_auto(ssl_context) end end response = nil smtp.start(settings[:domain], settings[:user_name], settings[:password], settings[:authentication]) do |smtp_obj| response = smtp_obj.sendmail(message, smtp_from, smtp_to) end if settings[:return_response] response else self end end private # Allow SSL context to be configured via settings, for Ruby >= 1.9 # Just returns openssl verify mode for Ruby 1.8.x def ssl_context openssl_verify_mode = settings[:openssl_verify_mode] if openssl_verify_mode.kind_of?(String) openssl_verify_mode = "OpenSSL::SSL::VERIFY_#{openssl_verify_mode.upcase}".constantize end context = Net::SMTP.default_ssl_context context.verify_mode = openssl_verify_mode context.ca_path = settings[:ca_path] if settings[:ca_path] context.ca_file = settings[:ca_file] if settings[:ca_file] context end end end mail-2.6.4/lib/mail/network/delivery_methods/smtp_connection.rb000066400000000000000000000035411267453234600247420ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/check_delivery_params' module Mail # == Sending Email with SMTP # # Mail allows you to send emails using an open SMTP connection. This is done by # passing a created Net::SMTP object. This way we can get better performance to # our local mail server by reducing the number of connections at any one time. # # === Sending via SMTP server on Localhost # # To send mail open a connection with Net::Smtp using any options you like # === Delivering the email # # Once you have the settings right, sending the email is done by: # # smtp_conn = Net::SMTP.start(settings[:address], settings[:port]) # Mail.defaults do # delivery_method :smtp_connection, { :connection => smtp_conn } # end # # Mail.deliver do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # Or by calling deliver on a Mail message # # mail = Mail.new do # to 'mikel@test.lindsaar.net' # from 'ada@test.lindsaar.net' # subject 'testing sendmail' # body 'testing sendmail' # end # # mail.deliver! class SMTPConnection include Mail::CheckDeliveryParams def initialize(values) raise ArgumentError.new('A Net::SMTP object is required for this delivery method') if values[:connection].nil? self.smtp = values[:connection] self.settings = values end attr_accessor :smtp attr_accessor :settings # Send the message via SMTP. # The from and to attributes are optional. If not set, they are retrieve from the Message. def deliver!(mail) smtp_from, smtp_to, message = check_delivery_params(mail) response = smtp.sendmail(message, smtp_from, smtp_to) settings[:return_response] ? response : self end end end mail-2.6.4/lib/mail/network/delivery_methods/test_mailer.rb000066400000000000000000000022431267453234600240460ustar00rootroot00000000000000# frozen_string_literal: true require 'mail/check_delivery_params' module Mail # The TestMailer is a bare bones mailer that does nothing. It is useful # when you are testing. # # It also provides a template of the minimum methods you require to implement # if you want to make a custom mailer for Mail class TestMailer include Mail::CheckDeliveryParams # Provides a store of all the emails sent with the TestMailer so you can check them. def TestMailer.deliveries @@deliveries ||= [] end # Allows you to over write the default deliveries store from an array to some # other object. If you just want to clear the store, # call TestMailer.deliveries.clear. # # If you place another object here, please make sure it responds to: # # * << (message) # * clear # * length # * size # * and other common Array methods def TestMailer.deliveries=(val) @@deliveries = val end def initialize(values) @settings = values.dup end attr_accessor :settings def deliver!(mail) check_delivery_params(mail) Mail::TestMailer.deliveries << mail end end end mail-2.6.4/lib/mail/network/retriever_methods/000077500000000000000000000000001267453234600213745ustar00rootroot00000000000000mail-2.6.4/lib/mail/network/retriever_methods/base.rb000066400000000000000000000037051267453234600226400ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class Retriever # Get the oldest received email(s) # # Possible options: # count: number of emails to retrieve. The default value is 1. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # def first(options = {}, &block) options ||= {} options[:what] = :first options[:count] ||= 1 find(options, &block) end # Get the most recent received email(s) # # Possible options: # count: number of emails to retrieve. The default value is 1. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # def last(options = {}, &block) options ||= {} options[:what] = :last options[:count] ||= 1 find(options, &block) end # Get all emails. # # Possible options: # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # def all(options = {}, &block) options ||= {} options[:count] = :all find(options, &block) end # Find emails in the mailbox, and then deletes them. Without any options, the # five last received emails are returned. # # Possible options: # what: last or first emails. The default is :first. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an # instance of Message, not an array of Message instances. # delete_after_find: flag for whether to delete each retreived email after find. Default # is true. Call #find if you would like this to default to false. # def find_and_delete(options = {}, &block) options ||= {} options[:delete_after_find] ||= true find(options, &block) end end end mail-2.6.4/lib/mail/network/retriever_methods/imap.rb000066400000000000000000000167601267453234600226610ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # The IMAP retriever allows to get the last, first or all emails from a IMAP server. # Each email retrieved (RFC2822) is given as an instance of +Message+. # # While being retrieved, emails can be yielded if a block is given. # # === Example of retrieving Emails from GMail: # # Mail.defaults do # retriever_method :imap, { :address => "imap.googlemail.com", # :port => 993, # :user_name => '', # :password => '', # :enable_ssl => true } # end # # Mail.all #=> Returns an array of all emails # Mail.first #=> Returns the first unread email # Mail.last #=> Returns the last unread email # # You can also pass options into Mail.find to locate an email in your imap mailbox # with the following options: # # mailbox: name of the mailbox used for email retrieval. The default is 'INBOX'. # what: last or first emails. The default is :first. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an # instance of Message, not an array of Message instances. # keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string, # or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list # The default is 'ALL' # # Mail.find(:what => :first, :count => 10, :order => :asc, :keys=>'ALL') # #=> Returns the first 10 emails in ascending order # class IMAP < Retriever require 'net/imap' unless defined?(Net::IMAP) def initialize(values) self.settings = { :address => "localhost", :port => 143, :user_name => nil, :password => nil, :authentication => nil, :enable_ssl => false }.merge!(values) end attr_accessor :settings # Find emails in a IMAP mailbox. Without any options, the 10 last received emails are returned. # # Possible options: # mailbox: mailbox to search the email(s) in. The default is 'INBOX'. # what: last or first emails. The default is :first. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an # instance of Message, not an array of Message instances. # read_only: will ensure that no writes are made to the inbox during the session. Specifically, if this is # set to true, the code will use the EXAMINE command to retrieve the mail. If set to false, which # is the default, a SELECT command will be used to retrieve the mail # This is helpful when you don't want your messages to be set to read automatically. Default is false. # delete_after_find: flag for whether to delete each retreived email after find. Default # is false. Use #find_and_delete if you would like this to default to true. # keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string, # or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list # The default is 'ALL' # def find(options={}, &block) options = validate_options(options) start do |imap| options[:read_only] ? imap.examine(options[:mailbox]) : imap.select(options[:mailbox]) uids = imap.uid_search(options[:keys]) uids.reverse! if options[:what].to_sym == :last uids = uids.first(options[:count]) if options[:count].is_a?(Integer) uids.reverse! if (options[:what].to_sym == :last && options[:order].to_sym == :asc) || (options[:what].to_sym != :last && options[:order].to_sym == :desc) if block_given? uids.each do |uid| uid = options[:uid].to_i unless options[:uid].nil? fetchdata = imap.uid_fetch(uid, ['RFC822'])[0] new_message = Mail.new(fetchdata.attr['RFC822']) new_message.mark_for_delete = true if options[:delete_after_find] if block.arity == 3 yield new_message, imap, uid else yield new_message end imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED]) if options[:delete_after_find] && new_message.is_marked_for_delete? break unless options[:uid].nil? end imap.expunge if options[:delete_after_find] else emails = [] uids.each do |uid| uid = options[:uid].to_i unless options[:uid].nil? fetchdata = imap.uid_fetch(uid, ['RFC822'])[0] emails << Mail.new(fetchdata.attr['RFC822']) imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED]) if options[:delete_after_find] break unless options[:uid].nil? end imap.expunge if options[:delete_after_find] emails.size == 1 && options[:count] == 1 ? emails.first : emails end end end # Delete all emails from a IMAP mailbox def delete_all(mailbox='INBOX') mailbox ||= 'INBOX' mailbox = Net::IMAP.encode_utf7(mailbox) start do |imap| imap.uid_search(['ALL']).each do |uid| imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED]) end imap.expunge end end # Returns the connection object of the retrievable (IMAP or POP3) def connection(&block) raise ArgumentError.new('Mail::Retrievable#connection takes a block') unless block_given? start do |imap| yield imap end end private # Set default options def validate_options(options) options ||= {} options[:mailbox] ||= 'INBOX' options[:count] ||= 10 options[:order] ||= :asc options[:what] ||= :first options[:keys] ||= 'ALL' options[:uid] ||= nil options[:delete_after_find] ||= false options[:mailbox] = Net::IMAP.encode_utf7(options[:mailbox]) options[:read_only] ||= false options end # Start an IMAP session and ensures that it will be closed in any case. def start(config=Mail::Configuration.instance, &block) raise ArgumentError.new("Mail::Retrievable#imap_start takes a block") unless block_given? imap = Net::IMAP.new(settings[:address], settings[:port], settings[:enable_ssl], nil, false) if settings[:authentication].nil? imap.login(settings[:user_name], settings[:password]) else # Note that Net::IMAP#authenticate('LOGIN', ...) is not equal with Net::IMAP#login(...)! # (see also http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/imap/rdoc/classes/Net/IMAP.html#M000718) imap.authenticate(settings[:authentication], settings[:user_name], settings[:password]) end yield imap ensure if defined?(imap) && imap && !imap.disconnected? imap.disconnect end end end end mail-2.6.4/lib/mail/network/retriever_methods/pop3.rb000066400000000000000000000123011267453234600225770ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail # The Pop3 retriever allows to get the last, first or all emails from a POP3 server. # Each email retrieved (RFC2822) is given as an instance of +Message+. # # While being retrieved, emails can be yielded if a block is given. # # === Example of retrieving Emails from GMail: # # Mail.defaults do # retriever_method :pop3, { :address => "pop.gmail.com", # :port => 995, # :user_name => '', # :password => '', # :enable_ssl => true } # end # # Mail.all #=> Returns an array of all emails # Mail.first #=> Returns the first unread email # Mail.last #=> Returns the last unread email # # You can also pass options into Mail.find to locate an email in your pop mailbox # with the following options: # # what: last or first emails. The default is :first. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an # instance of Message, not an array of Message instances. # # Mail.find(:what => :first, :count => 10, :order => :asc) # #=> Returns the first 10 emails in ascending order # class POP3 < Retriever require 'net/pop' unless defined?(Net::POP) def initialize(values) self.settings = { :address => "localhost", :port => 110, :user_name => nil, :password => nil, :authentication => nil, :enable_ssl => false }.merge!(values) end attr_accessor :settings # Find emails in a POP3 mailbox. Without any options, the 5 last received emails are returned. # # Possible options: # what: last or first emails. The default is :first. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an # instance of Message, not an array of Message instances. # delete_after_find: flag for whether to delete each retreived email after find. Default # is false. Use #find_and_delete if you would like this to default to true. # def find(options = {}, &block) options = validate_options(options) start do |pop3| mails = pop3.mails pop3.reset # Clears all "deleted" marks. This prevents non-explicit/accidental deletions due to server settings. mails.sort! { |m1, m2| m2.number <=> m1.number } if options[:what] == :last mails = mails.first(options[:count]) if options[:count].is_a? Integer if options[:what].to_sym == :last && options[:order].to_sym == :desc || options[:what].to_sym == :first && options[:order].to_sym == :asc || mails.reverse! end if block_given? mails.each do |mail| new_message = Mail.new(mail.pop) new_message.mark_for_delete = true if options[:delete_after_find] yield new_message mail.delete if options[:delete_after_find] && new_message.is_marked_for_delete? # Delete if still marked for delete end else emails = [] mails.each do |mail| emails << Mail.new(mail.pop) mail.delete if options[:delete_after_find] end emails.size == 1 && options[:count] == 1 ? emails.first : emails end end end # Delete all emails from a POP3 server def delete_all start do |pop3| unless pop3.mails.empty? pop3.delete_all pop3.finish end end end # Returns the connection object of the retrievable (IMAP or POP3) def connection(&block) raise ArgumentError.new('Mail::Retrievable#connection takes a block') unless block_given? start do |pop3| yield pop3 end end private # Set default options def validate_options(options) options ||= {} options[:count] ||= 10 options[:order] ||= :asc options[:what] ||= :first options[:delete_after_find] ||= false options end # Start a POP3 session and ensure that it will be closed in any case. Any messages # marked for deletion via #find_and_delete or with the :delete_after_find option # will be deleted when the session is closed. def start(config = Configuration.instance, &block) raise ArgumentError.new("Mail::Retrievable#pop3_start takes a block") unless block_given? pop3 = Net::POP3.new(settings[:address], settings[:port], false) pop3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if settings[:enable_ssl] pop3.start(settings[:user_name], settings[:password]) yield pop3 ensure if defined?(pop3) && pop3 && pop3.started? pop3.finish end end end end mail-2.6.4/lib/mail/network/retriever_methods/test_retriever.rb000066400000000000000000000023351267453234600247720ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class TestRetriever < Retriever def self.emails @@emails end def self.emails=(val) @@emails = val end def initialize(values) @@emails = [] end def find(options = {}, &block) options[:count] ||= :all options[:order] ||= :asc options[:what] ||= :first emails_index = (0...@@emails.size).to_a emails_index.reverse! if options[:what] == :last emails_index = case count = options[:count] when :all then emails_index when Fixnum then emails_index[0, count] else raise 'Invalid count option value: ' + count.inspect end if options[:what] == :last && options[:order] == :asc || options[:what] == :first && options[:order] == :desc emails_index.reverse! end emails_index.each { |idx| @@emails[idx].mark_for_delete = true } if options[:delete_after_find] emails = emails_index.map { |idx| @@emails[idx] } emails.each { |email| yield email } if block_given? @@emails.reject!(&:is_marked_for_delete?) if options[:delete_after_find] emails.size == 1 && options[:count] == 1 ? emails.first : emails end end end mail-2.6.4/lib/mail/parsers.rb000066400000000000000000000022031267453234600161520ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Parsers # Low-level ragel based parsers require 'mail/parsers/ragel' AddressListStruct = Struct.new(:addresses, :group_names, :error) AddressStruct = Struct.new(:raw, :domain, :comments, :local, :obs_domain_list, :display_name, :group, :error) ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error) ContentLocationStruct = Struct.new(:location, :error) ContentTransferEncodingStruct = Struct.new(:encoding, :error) ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error) DateTimeStruct = Struct.new(:date_string, :time_string, :error) EnvelopeFromStruct = Struct.new(:address, :ctime_date, :error) MessageIdsStruct = Struct.new(:message_ids, :error) MimeVersionStruct = Struct.new(:major, :minor, :error) PhraseListsStruct = Struct.new(:phrases, :error) ReceivedStruct = Struct.new(:date, :time, :info, :error) require 'mail/parsers/ragel/parser_info' Ragel::FIELD_PARSERS.each do |field_parser| require "mail/parsers/#{field_parser}_parser" end end end mail-2.6.4/lib/mail/parsers/000077500000000000000000000000001267453234600156305ustar00rootroot00000000000000mail-2.6.4/lib/mail/parsers/address_lists_parser.rb000066400000000000000000000100131267453234600223670ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class AddressListsParser include Mail::Utilities def parse(s) address_list = AddressListStruct.new([],[]) if Mail::Utilities.blank?(s) return address_list end actions, error = Ragel.parse(:address_lists, s) if error raise Mail::Field::ParseError.new(Mail::AddressList, s, error) end phrase_s = phrase_e = qstr_s = qstr = comment_s = nil group_name_s = domain_s = group_name = nil local_dot_atom_s = local_dot_atom_e = nil local_dot_atom_pre_comment_e = nil obs_domain_list_s = nil address_s = 0 address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil) actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Phrase when :phrase_s then phrase_s = p when :phrase_e then phrase_e = p-1 # Quoted String. when :qstr_s then qstr_s = p when :qstr_e then qstr = s[qstr_s..(p-1)] # Comment when :comment_s comment_s = p unless comment_s when :comment_e if address address.comments << s[comment_s..(p-2)] end comment_s = nil # Group Name when :group_name_s then group_name_s = p when :group_name_e if qstr group = qstr qstr = nil else group = s[group_name_s..(p-1)] group_name_s = nil end address_list.group_names << group group_name = group # Start next address address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil) address_s = p address.group = group_name # Address when :address_s address_s = p when :address_e # Ignore address end events if they don't have # a matching address start event. next if address_s.nil? if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e if address.domain address.local = s[local_dot_atom_s..local_dot_atom_e] if address else address.local = s[local_dot_atom_s..local_dot_atom_pre_comment_e] if address end end address.raw = s[address_s..(p-1)] address_list.addresses << address if address # Start next address address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil) address.group = group_name address_s = nil # Don't set the display name until the # address has actually started. This allows # us to choose quoted_s version if it # exists and always use the 'full' phrase # version. when :angle_addr_s if qstr address.display_name = qstr qstr = nil elsif phrase_e address.display_name = s[phrase_s..phrase_e].strip phrase_e = phrase_s = nil end # Domain when :domain_s domain_s = p when :domain_e address.domain = s[domain_s..(p-1)].rstrip if address # Local when :local_dot_atom_s then local_dot_atom_s = p when :local_dot_atom_e then local_dot_atom_e = p-1 when :local_dot_atom_pre_comment_e local_dot_atom_pre_comment_e = p-1 when :local_quoted_string_e address.local = '"' + qstr + '"' if address # obs_domain_list when :obs_domain_list_s then obs_domain_list_s = p when :obs_domain_list_e address.obs_domain_list = s[obs_domain_list_s..(p-1)] else raise Mail::Field::ParseError.new(Mail::AddressList, s, "Failed to process unknown action: #{action}") end end if address_list.addresses.empty? && address_list.group_names.empty? raise Mail::Field::ParseError.new(Mail::AddressList, s, "Didn't find any addresses or groups") end address_list end end end mail-2.6.4/lib/mail/parsers/content_disposition_parser.rb000066400000000000000000000037171267453234600236370ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class ContentDispositionParser include Mail::Utilities def parse(s) content_disposition = ContentDispositionStruct.new("", nil) if Mail::Utilities.blank?(s) return content_disposition end actions, error = Ragel.parse(:content_disposition, s) if error raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, error) end content_disposition.parameters = [] disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Disposition Type when :disp_type_s then disp_type_s = p when :disp_type_e content_disposition.disposition_type = s[disp_type_s..(p-1)].downcase # Parameter Attribute when :param_attr_s then param_attr_s = p when :param_attr_e then param_attr = s[param_attr_s..(p-1)] # Quoted String. when :qstr_s then qstr_s = p when :qstr_e then qstr = s[qstr_s..(p-1)] # Parameter Value when :param_val_s then param_val_s = p when :param_val_e if param_attr.nil? raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "no attribute for value") end # Use quoted string value if one exists, otherwise use parameter value if qstr value = qstr else value = s[param_val_s..(p-1)] end content_disposition.parameters << { param_attr => value } param_attr = nil qstr = nil else raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "Failed to process unknown action: #{action}") end end content_disposition end private def cleaned(string) string =~ /(.+);\s*$/ ? $1 : string end end end mail-2.6.4/lib/mail/parsers/content_location_parser.rb000066400000000000000000000020451267453234600230740ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class ContentLocationParser def parse(s) content_location = ContentLocationStruct.new(nil) if Mail::Utilities.blank?(s) return content_location end actions, error = Ragel.parse(:content_location, s) if error raise Mail::Field::ParseError.new(Mail::ContentLocationElement, s, error) end qstr_s = token_string_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Quoted String. when :qstr_s then qstr_s = p when :qstr_e then content_location.location = s[qstr_s..(p-1)] # Token String when :token_string_s then token_string_s = p when :token_string_e content_location.location = s[token_string_s..(p-1)] else raise Mail::Field::ParseError.new(Mail::ContentLocationElement, s, "Failed to process unknown action: #{action}") end end content_location end end end mail-2.6.4/lib/mail/parsers/content_transfer_encoding_parser.rb000066400000000000000000000017251267453234600247620ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class ContentTransferEncodingParser def parse(s) content_transfer_encoding = ContentTransferEncodingStruct.new("") if Mail::Utilities.blank?(s) return content_transfer_encoding end actions, error = Ragel.parse(:content_transfer_encoding, s) if error raise Mail::Field::ParseError.new(Mail::ContentTransferEncodingElement, s, error) end encoding_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Encoding when :encoding_s then encoding_s = p when :encoding_e content_transfer_encoding.encoding = s[encoding_s..(p-1)].downcase else raise Mail::Field::ParseError.new(Mail::ContentTransferEncodingElement, s, "Failed to process unknown action: #{action}") end end content_transfer_encoding end end end mail-2.6.4/lib/mail/parsers/content_type_parser.rb000066400000000000000000000037031267453234600222470ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class ContentTypeParser include Mail::Utilities def parse(s) actions, error = Ragel.parse(:content_type, s) if error raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, error) end content_type = ContentTypeStruct.new(nil,nil,[]) content_type.parameters = [] main_type_s = sub_type_s = param_attr_s = param_attr = nil qstr_s = qstr = param_val_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Main Type when :main_type_s then main_type_s = p when :main_type_e then content_type.main_type = s[main_type_s..(p-1)] content_type.main_type.downcase! # Sub Type when :sub_type_s then sub_type_s = p when :sub_type_e content_type.sub_type = s[sub_type_s..(p-1)] content_type.sub_type.downcase! # Parameter Attribute when :param_attr_s then param_attr_s = p when :param_attr_e then param_attr = s[param_attr_s..(p-1)] # Quoted String. when :qstr_s then qstr_s = p when :qstr_e then qstr = s[qstr_s..(p-1)] # Parameter Value when :param_val_s then param_val_s = p when :param_val_e if param_attr.nil? raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "no attribute for value") end # Use quoted s value if one exists, otherwise use parameter value if qstr value = qstr else value = s[param_val_s..(p-1)] end content_type.parameters << { param_attr => value } param_attr = nil qstr = nil else raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "Failed to process unknown action: #{action}") end end content_type end end end mail-2.6.4/lib/mail/parsers/date_time_parser.rb000066400000000000000000000017621267453234600214720ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class DateTimeParser include Mail::Utilities def parse(s) raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, "nil is an invalid DateTime") if s.nil? date_time = DateTimeStruct.new([]) actions, error = Ragel.parse(:date_time, s) if error raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, error) end date_s = time_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Date when :date_s then date_s = p when :date_e date_time.date_string = s[date_s..(p-1)] # Time when :time_s then time_s = p when :time_e date_time.time_string = s[time_s..(p-1)] else raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, "Failed to process unknown action: #{action}") end end date_time end end end mail-2.6.4/lib/mail/parsers/envelope_from_parser.rb000066400000000000000000000025241267453234600223740ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class EnvelopeFromParser def parse(s) envelope_from = EnvelopeFromStruct.new if Mail::Utilities.blank?(s) return envelope_from end actions, error = Ragel.parse(:envelope_from, s) if error raise Mail::Field::ParseError.new(Mail::EnvelopeFromElement, s, error) end address_s = ctime_date_s = nil envelope_from = EnvelopeFromStruct.new actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Address when :address_s then address_s = p when :address_e envelope_from.address = s[address_s..(p-1)].rstrip # ctime_date when :ctime_date_s then ctime_date_s = p when :ctime_date_e envelope_from.ctime_date = s[ctime_date_s..(p-1)] # ignored actions when :angle_addr_s, :comment_e, :comment_s, :domain_e, :domain_s, :local_dot_atom_e, :local_dot_atom_pre_comment_e, :local_dot_atom_pre_comment_s, :local_dot_atom_s, :qstr_e, :qstr_s nil else raise Mail::Field::ParseError.new(Mail::EnvelopeFromElement, s, "Failed to process unknown action: #{action}") end end envelope_from end end end mail-2.6.4/lib/mail/parsers/message_ids_parser.rb000066400000000000000000000020401267453234600220100ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class MessageIdsParser def parse(s) if Mail::Utilities.blank?(s) return MessageIdsStruct.new end message_ids = MessageIdsStruct.new([]) actions, error = Ragel.parse(:message_ids, s) if error raise Mail::Field::ParseError.new(Mail::MessageIdsElement, s, error) end msg_id_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Message Ids when :msg_id_s then msg_id_s = p when :msg_id_e message_ids.message_ids << s[msg_id_s..(p-1)].rstrip when :domain_e, :domain_s, :local_dot_atom_e, :local_dot_atom_pre_comment_e, :local_dot_atom_pre_comment_s, :local_dot_atom_s # ignored actions else raise Mail::Field::ParseError.new(Mail::MessageIdsElement, s, "Failed to process unknown action: #{action}") end end message_ids end end end mail-2.6.4/lib/mail/parsers/mime_version_parser.rb000066400000000000000000000021731267453234600222300ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class MimeVersionParser include Mail::Utilities def parse(s) if Mail::Utilities.blank?(s) return MimeVersionStruct.new("", nil) end mime_version = MimeVersionStruct.new actions, error = Ragel.parse(:mime_version, s) if error raise Mail::Field::ParseError.new(Mail::MimeVersionElement, s, error) end major_digits_s = minor_digits_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Major Digits when :major_digits_s then major_digits_s = p when :major_digits_e mime_version.major = s[major_digits_s..(p-1)] # Minor Digits when :minor_digits_s then minor_digits_s = p when :minor_digits_e mime_version.minor = s[minor_digits_s..(p-1)] when :comment_e, :comment_s then nil else raise Mail::Field::ParseError.new(Mail::MimeVersionElement, s, "Failed to process unknown action: #{action}") end end mime_version end end end mail-2.6.4/lib/mail/parsers/phrase_lists_parser.rb000066400000000000000000000016651267453234600222410ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class PhraseListsParser def parse(s) raise Mail::Field::ParseError.new(Mail::PhraseList, s, 'nil is invalid') if s.nil? actions, error = Ragel.parse(:phrase_lists, s) if error raise Mail::Field::ParseError.new(Mail::PhraseList, s, error) end phrase_lists = PhraseListsStruct.new([]) phrase_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Phrase when :phrase_s then phrase_s = p when :phrase_e phrase_lists.phrases << s[phrase_s..(p-1)] if phrase_s phrase_s = nil when :comment_e, :comment_s, :qstr_s, :qstr_e then nil else raise Mail::Field::ParseError.new(Mail::PhraseList, s, "Failed to process unknown action: #{action}") end end phrase_lists end end end mail-2.6.4/lib/mail/parsers/ragel.rb000066400000000000000000000005771267453234600172600ustar00rootroot00000000000000# frozen_string_literal: true module Mail module Parsers module Ragel require 'mail/parsers/ragel/parser_info' require "mail/parsers/ragel/ruby" def self.parse(machine, string) @machine_module ||= Ruby @machine_module.parse(machine, string) end def self.machine_module=(m) @machine_module = m end end end end mail-2.6.4/lib/mail/parsers/ragel/000077500000000000000000000000001267453234600167225ustar00rootroot00000000000000mail-2.6.4/lib/mail/parsers/ragel/common.rl000066400000000000000000000160171267453234600205560ustar00rootroot00000000000000%%{ machine common; action comment_begin { fcall comment_tail; } action comment_exit { fret; } # RFC5322: address_lists, date_time, message_ids, phrase_lists, received obs_NO_WS_CTL = 0x01..0x08 | 0x0b | 0x0c | 0x0e..0x1f | 0x7f; LF = "\n"; CR = "\r"; CRLF = "\r\n"; WSP = 0x09 | 0x20; obs_ctext = obs_NO_WS_CTL; VCHAR = 0x21..0x7e; obs_qp = "\\" (0x00 | obs_NO_WS_CTL | LF | CR); obs_FWS = (CRLF? WSP)+; ctext = 0x21..0x27 | 0x2a..0x5b | 0x5d..0x7e | obs_ctext; quoted_pair = ("\\" (VCHAR | WSP)) | obs_qp; FWS = (WSP* CRLF WSP+) | (CRLF WSP+) | obs_FWS; ALPHA = [a-zA-Z]; DIGIT = [0-9]; DQUOTE = '"'; obs_qtext = obs_NO_WS_CTL; atext = ALPHA | DIGIT | "!" | "#" | "$" | "%" | "&" | "'" | "*" | "+" | "-" | "/" | "=" | "?" | "^" | "_" | "`" | "{" | "|" | "}" | "~"; qtext = 0x21 | 0x23..0x5b | 0x5d..0x7e | obs_qtext; obs_dtext = obs_NO_WS_CTL | quoted_pair; qcontent = qtext | quoted_pair; # Handle recursive comments ccontent = ctext | quoted_pair | "(" @comment_begin; comment_tail := ((FWS? ccontent)* >comment_s) FWS? ")" @comment_exit; comment = "(" @comment_begin %comment_e; CFWS = ((FWS? comment)+ FWS?) | FWS; quoted_string = CFWS? (DQUOTE (((FWS? qcontent)* FWS?) >qstr_s %qstr_e) DQUOTE) CFWS?; atom = CFWS? atext+ CFWS?; word = atom | quoted_string; # phrase_lists obs_phrase = (word | "." | "@")+; phrase = (obs_phrase | word+) >phrase_s %phrase_e; phrase_lists = phrase ("," FWS* phrase)*; # address_lists # local_part: domain_text = (DQUOTE (FWS? qcontent)+ FWS? DQUOTE) | atext+; local_dot_atom_text = ("."* domain_text "."*)+; local_dot_atom = CFWS? (local_dot_atom_text >local_dot_atom_s %local_dot_atom_pre_comment_e) CFWS?; obs_local_part = word ("." word)*; local_part = (local_dot_atom >local_dot_atom_s %local_dot_atom_e | (quoted_string %local_quoted_string_e) | obs_local_part); # Treetop parser behavior was to ignore addresses missing '@' inside of angle # brackets. This construction preserves that behavior. local_part_no_capture = (local_dot_atom | quoted_string | obs_local_part); # domain: dot_atom_text = "."* domain_text ("."* domain_text)*; dtext = 0x21..0x5a | 0x5e..0x7e | obs_dtext; dot_atom = CFWS? dot_atom_text (CFWS? >(comment_after_address,1)); domain_literal = CFWS? "[" (FWS? dtext)* FWS? "]" CFWS?; obs_domain = atom ("." atom)*; domain = (dot_atom | domain_literal | obs_domain) >domain_s %domain_e; # addr_spec: # The %(end_addr,N) priority resolves uncertainty when whitespace # after an addr_spec could cause it to be interpreted as a # display name: "bar@example.com ,..." addr_spec_in_angle_brackets = (local_part "@" domain) %(end_addr,1) | local_part_no_capture %(end_addr,0); addr_spec_no_angle_brackets = (local_part "@" domain) %(end_addr,1) | local_part %(end_addr,0); # angle_addr: obs_domain_list = (CFWS | ",")* "@" domain ("," CFWS? ("@" domain)?)*; obs_route = (obs_domain_list ":") >obs_domain_list_s %obs_domain_list_e; obs_angle_addr = CFWS? "<" obs_route? addr_spec_in_angle_brackets ">" CFWS?; angle_addr = CFWS? ("<" >angle_addr_s) addr_spec_in_angle_brackets ">" CFWS? | obs_angle_addr; # Address display_name = phrase; name_addr = display_name? %(end_addr,2) angle_addr; mailbox = (name_addr | addr_spec_no_angle_brackets) >address_s %address_e; obs_mbox_list = (CFWS? ",")* mailbox ("," (mailbox | CFWS)?)*; mailbox_list = (mailbox (("," | ";") mailbox)*) | obs_mbox_list; obs_group_list = (CFWS? ",")+ CFWS?; group_list = mailbox_list | CFWS | obs_group_list; group = (display_name >group_name_s %group_name_e) ":" (group_list?) ";" CFWS?; address = group | mailbox; #obs_addr_list = (CFWS? ",")* address ("," (address | CFWS)?)*; address_lists = address? %(comment_after_address,0) (FWS* ("," | ";") FWS* address?)*; # message_ids obs_id_left = local_part; id_left = dot_atom_text | obs_id_left; # id_right modifications to support multiple '@' in msg_id. msg_id_atext = ALPHA | DIGIT | "!" | "#" | "$" | "%" | "&" | "'" | "*" | "+" | "-" | "/" | "=" | "?" | "^" | "_" | "`" | "{" | "|" | "}" | "~" | "@"; msg_id_dot_atom_text = (msg_id_atext+ "."?)+; obs_id_right = domain; no_fold_literal = "[" (dtext)* "]"; id_right = msg_id_dot_atom_text | no_fold_literal | obs_id_right; msg_id = (CFWS)? (("<" id_left "@" id_right ">") >msg_id_s %msg_id_e) (CFWS)?; message_ids = msg_id (CFWS? msg_id)*; include date_time "date_time.rl"; date_time = (day_of_week ",")? (date >date_s %date_e) <: (time >time_s %time_e) CFWS?; # Added CFWS? to increase robustness # (qmail likes to include a comment style string...?) received_token = word | angle_addr | addr_spec_no_angle_brackets | domain; received = ((CFWS? received_token*) >received_tokens_s %received_tokens_e) ";" date_time; # RFC2045: mime_version, content_type, content_transfer_encoding mime_version = CFWS? (DIGIT+ >major_digits_s %major_digits_e) comment? "." comment? (DIGIT+ >minor_digits_s %minor_digits_e) CFWS?; token = 0x21..0x27 | 0x2a..0x2b | 0x2c..0x2e | 0x30..0x39 | 0x41..0x5a | 0x5e..0x7e; value = (quoted_string | (token -- '"' | 0x3d)+) >param_val_s %param_val_e; attribute = (token+) >param_attr_s %param_attr_e; parameter = CFWS? attribute "=" value CFWS?; ietf_token = token+; custom_x_token = 'x'i "-" token+; extension_token = ietf_token | custom_x_token; discrete_type = 'text'i | 'image'i | 'audio'i | 'video'i | 'application'i | extension_token; composite_type = 'message'i | 'multipart'i | extension_token; iana_token = token+; main_type = (discrete_type | composite_type) >main_type_s %main_type_e; sub_type = (extension_token | iana_token) >sub_type_s %sub_type_e; content_type = main_type "/" sub_type (((CFWS? ";"+) | CFWS) parameter CFWS?)*; encoding = ('7bits' | '8bits' | '7bit' | '8bit' | 'binary' | 'quoted-printable' | 'base64' | ietf_token | custom_x_token) >encoding_s %encoding_e; content_transfer_encoding = CFWS? encoding CFWS? ";"? CFWS?; # RFC2183: content_disposition # TODO: recognize filename, size, creation date, etc. disposition_type = 'inline'i | 'attachment'i | extension_token | ''; content_disposition = (disposition_type >disp_type_s %disp_type_e) (CFWS? ";" parameter CFWS?)*; # Envelope From ctime_date = day_name " "+ month " "+ day " " time_of_day " " year; null_sender = ('<>' ' '{0,1}); envelope_from = (addr_spec_no_angle_brackets | null_sender) >address_s %address_e " " (ctime_date >ctime_date_s %ctime_date_e); # content_location location = quoted_string | ((token | 0x3d)+ >token_string_s %token_string_e); content_location = CFWS? location CFWS?; }%% mail-2.6.4/lib/mail/parsers/ragel/date_time.rl000066400000000000000000000020501267453234600212110ustar00rootroot00000000000000%%{ machine date_time; # day_of_week day_name = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"; obs_day_of_week = CFWS? day_name CFWS?; day_of_week = (FWS? day_name) | obs_day_of_week; # date obs_day = CFWS? (DIGIT | (DIGIT DIGIT)) CFWS?; day = (FWS? DIGIT DIGIT? FWS) | obs_day; month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"; obs_year = CFWS? (DIGIT DIGIT DIGIT*) CFWS?; year = FWS DIGIT DIGIT DIGIT DIGIT FWS | obs_year; date = day month year; # time obs_hour = CFWS? (DIGIT DIGIT) CFWS?; hour = DIGIT DIGIT | obs_hour; obs_minute = CFWS? (DIGIT DIGIT) CFWS?; minute = DIGIT DIGIT | obs_minute; obs_second = CFWS? (DIGIT DIGIT) CFWS?; second = DIGIT DIGIT | obs_second; obs_zone = "UT" | "GMT" | "EST" | "EDT" | "CST" | "CDT" | "MST" | "MDT" | "PST" | "PDT" | 0x41..0x49 | 0x4B..0x5A | 0x61..0x69 | 0x6B..0x7A; time_of_day = hour ":" minute (":" second)?; zone = FWS ((("+" | "-") DIGIT DIGIT DIGIT DIGIT) | obs_zone); time = time_of_day zone; }%% mail-2.6.4/lib/mail/parsers/ragel/parser_info.rb000066400000000000000000000025551267453234600215650ustar00rootroot00000000000000module Mail module Parsers module Ragel ACTIONS = [ :addr_spec, :address_e, :address_s, :angle_addr_s, :comment_e, :comment_s, :ctime_date_e, :ctime_date_s, :date_e, :date_s, :disp_type_e, :disp_type_s, :domain_e, :domain_s, :encoding_e, :encoding_s, :group_name_e, :group_name_s, :local_dot_atom_e, :local_dot_atom_pre_comment_e, :local_dot_atom_s, :local_quoted_string_e, :main_type_e, :main_type_s, :major_digits_e, :major_digits_s, :minor_digits_e, :minor_digits_s, :msg_id_e, :msg_id_s, :obs_domain_list_e, :obs_domain_list_s, :param_attr_e, :param_attr_s, :param_val_e, :param_val_s, :phrase_e, :phrase_s, :qstr_e, :qstr_s, :received_tokens_e, :received_tokens_s, :sub_type_e, :sub_type_s, :time_e, :time_s, :token_string_e, :token_string_s ] FIELD_PARSERS = %w[ address_lists phrase_lists date_time received message_ids envelope_from mime_version content_type content_disposition content_transfer_encoding content_location ] end end end mail-2.6.4/lib/mail/parsers/ragel/ruby.rb000066400000000000000000000023151267453234600202310ustar00rootroot00000000000000module Mail module Parsers module Ragel module Ruby def self.silence_warnings old, $VERBOSE = $VERBOSE, nil yield ensure $VERBOSE = old end # Ragel-generated parsers give a lot of warnings # and may cause logs to balloon in size silence_warnings do Mail::Parsers::Ragel::FIELD_PARSERS.each do |field_parser| require "mail/parsers/ragel/ruby/machines/#{field_parser}_machine" end end MACHINE_LIST = { :address_lists => AddressListsMachine, :phrase_lists => PhraseListsMachine, :date_time => DateTimeMachine, :received => ReceivedMachine, :message_ids => MessageIdsMachine, :envelope_from => EnvelopeFromMachine, :mime_version => MimeVersionMachine, :content_type => ContentTypeMachine, :content_disposition => ContentDispositionMachine, :content_transfer_encoding => ContentTransferEncodingMachine, :content_location => ContentLocationMachine } def self.parse(machine, string) MACHINE_LIST[machine].parse(string) end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/000077500000000000000000000000001267453234600177035ustar00rootroot00000000000000mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/000077500000000000000000000000001267453234600214725ustar00rootroot00000000000000mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb000066400000000000000000021326651267453234600263650ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" module Mail module Parsers module Ragel module AddressListsMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" class << self attr_accessor :_address_lists_trans_keys private :_address_lists_trans_keys, :_address_lists_trans_keys= end self._address_lists_trans_keys = [ 0, 0, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, 0, 127, 1, 127, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 59, 10, 10, 9, 32, 9, 59, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, -128, -1, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 33, 126, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 1, 127, 10, 10, 9, 32, 0, 127, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 33, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 33, 126, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 33, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 126, 9, 126, 9, 59, 9, 59, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 59, 9, 59, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 59, 9, 59, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 59, 9, 59, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 64, 9, 64, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 64, 9, 64, 0, 0, 0 ] class << self attr_accessor :_address_lists_key_spans private :_address_lists_key_spans, :_address_lists_key_spans= end self._address_lists_key_spans = [ 0, 118, 1, 24, 1, 24, 118, 1, 24, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 1, 24, 1, 24, 1, 24, 118, 118, 1, 24, 1, 24, 118, 118, 1, 24, 118, 118, 1, 24, 118, 1, 24, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 51, 1, 24, 51, 118, 118, 1, 24, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 1, 24, 118, 118, 1, 24, 118, 1, 24, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 51, 1, 24, 51, 118, 118, 1, 24, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 128, 127, 1, 24, 118, 118, 94, 118, 51, 1, 24, 51, 127, 127, 1, 24, 128, 1, 24, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 128, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 51, 1, 24, 51, 118, 1, 24, 118, 118, 118, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 118, 128, 127, 1, 24, 128, 127, 1, 24, 118, 1, 24, 118, 118, 94, 118, 56, 1, 24, 56, 127, 127, 1, 24, 128, 1, 24, 118, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 50, 1, 24, 50, 56, 1, 24, 56, 118, 118, 1, 24, 118, 94, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 50, 1, 24, 50, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 128, 127, 1, 24, 118, 118, 94, 118, 51, 1, 24, 51, 127, 127, 1, 24, 128, 1, 24, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 128, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 51, 1, 24, 51, 118, 1, 24, 118, 118, 118, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 118, 128, 127, 1, 24, 128, 127, 1, 24, 118, 1, 24, 118, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 1, 24, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 51, 1, 24, 51, 1, 24, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 50, 1, 24, 50, 56, 1, 24, 56, 118, 118, 1, 24, 118, 94, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 50, 1, 24, 50, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 128, 127, 1, 24, 118, 118, 94, 118, 51, 1, 24, 51, 127, 127, 1, 24, 128, 1, 24, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 51, 1, 24, 51, 118, 1, 24, 118, 118, 118, 118, 128, 127, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 118, 1, 24, 118, 128, 127, 1, 24, 118, 1, 24, 118, 118, 94, 118, 56, 1, 24, 56, 127, 127, 1, 24, 128, 1, 24, 118, 94, 118, 56, 1, 24, 56, 127, 127, 1, 24, 128, 1, 24, 118, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 50, 1, 24, 50, 56, 1, 24, 56, 118, 118, 1, 24, 118, 94, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 50, 1, 24, 50, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 118, 118, 1, 24, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 1, 24, 118, 128, 127, 1, 24, 118, 118, 94, 1, 24, 127, 127, 1, 24, 128, 1, 24, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 1, 24, 1, 24, 118, 118, 1, 24, 1, 24, 118, 1, 24, 118, 118, 118, 128, 127, 1, 24, 1, 24, 127, 127, 1, 24, 128, 127, 1, 24, 127, 127, 1, 24, 1, 24, 128, 127, 1, 24, 1, 24, 118, 118, 1, 24, 94, 1, 24, 127, 127, 1, 24, 128, 1, 24, 118, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 50, 1, 24, 50, 56, 1, 24, 56, 118, 118, 1, 24, 118, 94, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 50, 1, 24, 50, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 1, 24, 1, 24, 118, 118, 1, 24, 118, 94, 127, 127, 1, 24, 128, 1, 24, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 1, 24, 1, 24, 118, 118, 1, 24, 118, 118, 128, 127, 1, 24, 1, 24, 127, 127, 1, 24, 128, 127, 1, 24, 127, 127, 1, 24, 1, 24, 128, 127, 1, 24, 1, 24, 118, 118, 1, 24, 94, 1, 24, 127, 127, 1, 24, 128, 1, 24, 118, 127, 127, 1, 24, 128, 118, 118, 118, 51, 51, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 51, 51, 118, 118, 118, 118, 118, 118, 118, 118, 51, 51, 118, 118, 118, 118, 118, 118, 118, 51, 51, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 56, 56, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 56, 56, 0 ] class << self attr_accessor :_address_lists_index_offsets private :_address_lists_index_offsets, :_address_lists_index_offsets= end self._address_lists_index_offsets = [ 0, 0, 119, 121, 146, 148, 173, 292, 294, 319, 447, 575, 577, 602, 731, 850, 969, 1088, 1090, 1115, 1234, 1353, 1472, 1474, 1499, 1618, 1675, 1677, 1702, 1759, 1878, 1880, 1905, 2024, 2081, 2083, 2108, 2165, 2167, 2192, 2194, 2219, 2221, 2246, 2365, 2484, 2486, 2511, 2513, 2538, 2657, 2776, 2778, 2803, 2922, 3041, 3043, 3068, 3187, 3189, 3214, 3342, 3470, 3472, 3497, 3626, 3745, 3864, 3983, 3985, 4010, 4129, 4248, 4367, 4369, 4394, 4513, 4570, 4572, 4597, 4654, 4773, 4775, 4800, 4919, 4976, 4978, 5003, 5060, 5112, 5114, 5139, 5191, 5310, 5429, 5431, 5456, 5584, 5712, 5714, 5739, 5858, 5977, 5979, 6004, 6123, 6242, 6361, 6363, 6388, 6507, 6626, 6628, 6653, 6772, 6774, 6799, 6918, 7037, 7039, 7064, 7183, 7185, 7210, 7338, 7466, 7468, 7493, 7622, 7741, 7860, 7979, 7981, 8006, 8125, 8244, 8363, 8365, 8390, 8509, 8566, 8568, 8593, 8650, 8769, 8771, 8796, 8915, 8972, 8974, 8999, 9056, 9108, 9110, 9135, 9187, 9306, 9425, 9427, 9452, 9580, 9708, 9710, 9735, 9854, 9973, 9975, 10000, 10119, 10238, 10357, 10359, 10384, 10503, 10622, 10624, 10649, 10768, 10887, 11006, 11008, 11033, 11152, 11271, 11273, 11298, 11417, 11536, 11655, 11657, 11682, 11801, 11920, 12048, 12176, 12178, 12203, 12322, 12441, 12443, 12468, 12587, 12706, 12835, 12963, 12965, 12990, 13109, 13228, 13323, 13442, 13494, 13496, 13521, 13573, 13701, 13829, 13831, 13856, 13985, 13987, 14012, 14140, 14142, 14167, 14296, 14424, 14552, 14554, 14579, 14708, 14827, 14946, 15065, 15067, 15092, 15211, 15339, 15467, 15469, 15494, 15623, 15751, 15753, 15778, 15897, 16016, 16018, 16043, 16162, 16281, 16400, 16402, 16427, 16546, 16598, 16600, 16625, 16677, 16796, 16798, 16823, 16942, 17061, 17180, 17299, 17418, 17537, 17539, 17564, 17683, 17811, 17939, 17941, 17966, 18085, 18204, 18333, 18461, 18463, 18488, 18617, 18745, 18747, 18772, 18891, 18893, 18918, 19037, 19156, 19251, 19370, 19427, 19429, 19454, 19511, 19639, 19767, 19769, 19794, 19923, 19925, 19950, 20069, 20188, 20307, 20309, 20334, 20453, 20508, 20510, 20535, 20590, 20709, 20711, 20736, 20855, 20974, 21102, 21230, 21232, 21257, 21376, 21431, 21433, 21458, 21513, 21608, 21737, 21739, 21764, 21883, 22002, 22130, 22132, 22157, 22286, 22414, 22542, 22544, 22569, 22698, 22817, 22945, 23073, 23075, 23100, 23219, 23276, 23278, 23303, 23360, 23489, 23491, 23516, 23635, 23754, 23756, 23781, 23900, 24028, 24156, 24158, 24183, 24302, 24431, 24559, 24561, 24586, 24714, 24842, 24844, 24869, 24988, 25045, 25047, 25072, 25129, 25258, 25386, 25388, 25413, 25470, 25472, 25497, 25554, 25673, 25730, 25732, 25757, 25814, 25933, 26052, 26054, 26079, 26198, 26249, 26251, 26276, 26327, 26384, 26386, 26411, 26468, 26587, 26706, 26708, 26733, 26852, 26947, 27066, 27068, 27093, 27212, 27331, 27459, 27587, 27589, 27614, 27733, 27784, 27786, 27811, 27862, 27957, 28086, 28088, 28113, 28232, 28351, 28479, 28481, 28506, 28635, 28754, 28873, 28875, 28900, 29019, 29138, 29140, 29165, 29284, 29403, 29522, 29524, 29549, 29668, 29787, 29915, 30043, 30045, 30070, 30189, 30308, 30310, 30335, 30454, 30573, 30702, 30830, 30832, 30857, 30976, 31095, 31190, 31309, 31361, 31363, 31388, 31440, 31568, 31696, 31698, 31723, 31852, 31854, 31879, 32007, 32009, 32034, 32163, 32291, 32419, 32421, 32446, 32575, 32694, 32813, 32932, 32934, 32959, 33078, 33206, 33334, 33336, 33361, 33490, 33618, 33620, 33645, 33764, 33883, 33885, 33910, 34029, 34148, 34267, 34269, 34294, 34413, 34465, 34467, 34492, 34544, 34663, 34665, 34690, 34809, 34928, 35047, 35166, 35285, 35404, 35406, 35431, 35550, 35678, 35806, 35808, 35833, 35952, 36071, 36200, 36328, 36330, 36355, 36484, 36612, 36614, 36639, 36758, 36760, 36785, 36904, 37023, 37142, 37261, 37263, 37288, 37407, 37526, 37528, 37553, 37672, 37674, 37699, 37827, 37955, 37957, 37982, 38111, 38230, 38349, 38468, 38470, 38495, 38614, 38733, 38852, 38854, 38879, 38998, 39055, 39057, 39082, 39139, 39258, 39260, 39285, 39404, 39461, 39463, 39488, 39545, 39597, 39599, 39624, 39676, 39678, 39703, 39822, 39941, 39943, 39968, 40087, 40142, 40144, 40169, 40224, 40343, 40345, 40370, 40489, 40608, 40736, 40864, 40866, 40891, 41010, 41065, 41067, 41092, 41147, 41242, 41371, 41373, 41398, 41517, 41636, 41764, 41766, 41791, 41920, 42048, 42176, 42178, 42203, 42332, 42451, 42579, 42707, 42709, 42734, 42853, 42910, 42912, 42937, 42994, 43123, 43125, 43150, 43269, 43388, 43390, 43415, 43534, 43662, 43790, 43792, 43817, 43936, 44065, 44193, 44195, 44220, 44348, 44476, 44478, 44503, 44622, 44679, 44681, 44706, 44763, 44892, 45020, 45022, 45047, 45104, 45106, 45131, 45188, 45307, 45364, 45366, 45391, 45448, 45567, 45686, 45688, 45713, 45832, 45883, 45885, 45910, 45961, 46018, 46020, 46045, 46102, 46221, 46340, 46342, 46367, 46486, 46581, 46700, 46702, 46727, 46846, 46965, 47093, 47221, 47223, 47248, 47367, 47418, 47420, 47445, 47496, 47591, 47720, 47722, 47747, 47866, 47985, 48113, 48115, 48140, 48269, 48388, 48507, 48626, 48628, 48653, 48772, 48891, 48893, 48918, 49037, 49156, 49275, 49277, 49302, 49421, 49540, 49542, 49567, 49686, 49805, 49924, 49926, 49951, 50070, 50189, 50317, 50445, 50447, 50472, 50591, 50710, 50712, 50737, 50856, 50975, 51104, 51232, 51234, 51259, 51378, 51497, 51592, 51711, 51763, 51765, 51790, 51842, 51970, 52098, 52100, 52125, 52254, 52256, 52281, 52409, 52411, 52436, 52565, 52693, 52821, 52823, 52848, 52977, 53096, 53224, 53352, 53354, 53379, 53498, 53617, 53619, 53644, 53763, 53882, 54001, 54003, 54028, 54147, 54266, 54385, 54387, 54412, 54531, 54583, 54585, 54610, 54662, 54781, 54783, 54808, 54927, 55046, 55165, 55284, 55413, 55541, 55543, 55568, 55687, 55806, 55808, 55833, 55952, 56080, 56208, 56210, 56235, 56354, 56483, 56611, 56613, 56638, 56766, 56894, 56896, 56921, 57040, 57159, 57161, 57186, 57305, 57434, 57562, 57564, 57589, 57708, 57710, 57735, 57854, 57973, 58068, 58187, 58244, 58246, 58271, 58328, 58456, 58584, 58586, 58611, 58740, 58742, 58767, 58886, 58981, 59100, 59157, 59159, 59184, 59241, 59369, 59497, 59499, 59524, 59653, 59655, 59680, 59799, 59918, 60037, 60039, 60064, 60183, 60238, 60240, 60265, 60320, 60439, 60441, 60466, 60585, 60704, 60832, 60960, 60962, 60987, 61106, 61161, 61163, 61188, 61243, 61338, 61467, 61469, 61494, 61613, 61732, 61860, 61862, 61887, 62016, 62144, 62272, 62274, 62299, 62428, 62547, 62675, 62803, 62805, 62830, 62949, 63006, 63008, 63033, 63090, 63219, 63221, 63246, 63365, 63484, 63486, 63511, 63630, 63758, 63886, 63888, 63913, 64032, 64161, 64289, 64291, 64316, 64444, 64572, 64574, 64599, 64718, 64775, 64777, 64802, 64859, 64988, 65116, 65118, 65143, 65200, 65202, 65227, 65284, 65403, 65460, 65462, 65487, 65544, 65663, 65782, 65784, 65809, 65928, 65979, 65981, 66006, 66057, 66114, 66116, 66141, 66198, 66317, 66436, 66438, 66463, 66582, 66677, 66796, 66798, 66823, 66942, 67061, 67189, 67317, 67319, 67344, 67463, 67514, 67516, 67541, 67592, 67687, 67816, 67818, 67843, 67962, 68081, 68209, 68211, 68236, 68365, 68484, 68603, 68722, 68724, 68749, 68868, 68987, 69106, 69108, 69133, 69135, 69160, 69279, 69398, 69400, 69425, 69544, 69672, 69800, 69802, 69827, 69829, 69854, 69973, 70102, 70230, 70232, 70257, 70376, 70495, 70590, 70592, 70617, 70745, 70873, 70875, 70900, 71029, 71031, 71056, 71184, 71186, 71211, 71340, 71468, 71596, 71598, 71623, 71752, 71871, 71999, 72127, 72129, 72154, 72156, 72181, 72183, 72208, 72327, 72446, 72448, 72473, 72475, 72500, 72619, 72621, 72646, 72765, 72884, 73003, 73132, 73260, 73262, 73287, 73289, 73314, 73442, 73570, 73572, 73597, 73726, 73854, 73856, 73881, 74009, 74137, 74139, 74164, 74166, 74191, 74320, 74448, 74450, 74475, 74477, 74502, 74621, 74740, 74742, 74767, 74862, 74864, 74889, 75017, 75145, 75147, 75172, 75301, 75303, 75328, 75447, 75566, 75685, 75687, 75712, 75831, 75886, 75888, 75913, 75968, 76087, 76089, 76114, 76233, 76352, 76480, 76608, 76610, 76635, 76754, 76809, 76811, 76836, 76891, 76986, 77115, 77117, 77142, 77261, 77380, 77508, 77510, 77535, 77664, 77792, 77920, 77922, 77947, 78076, 78195, 78323, 78451, 78453, 78478, 78597, 78654, 78656, 78681, 78738, 78867, 78869, 78894, 79013, 79132, 79134, 79159, 79278, 79406, 79534, 79536, 79561, 79680, 79809, 79937, 79939, 79964, 80092, 80220, 80222, 80247, 80366, 80423, 80425, 80450, 80507, 80636, 80764, 80766, 80791, 80848, 80850, 80875, 80932, 81051, 81108, 81110, 81135, 81192, 81311, 81430, 81432, 81457, 81576, 81627, 81629, 81654, 81705, 81762, 81764, 81789, 81846, 81965, 82084, 82086, 82111, 82230, 82325, 82444, 82446, 82471, 82590, 82709, 82837, 82965, 82967, 82992, 83111, 83162, 83164, 83189, 83240, 83335, 83464, 83466, 83491, 83610, 83729, 83857, 83859, 83884, 84013, 84132, 84251, 84253, 84278, 84280, 84305, 84424, 84543, 84545, 84570, 84689, 84784, 84912, 85040, 85042, 85067, 85196, 85198, 85223, 85351, 85479, 85481, 85506, 85635, 85754, 85882, 86010, 86012, 86037, 86039, 86064, 86066, 86091, 86210, 86329, 86331, 86356, 86475, 86594, 86723, 86851, 86853, 86878, 86880, 86905, 87033, 87161, 87163, 87188, 87317, 87445, 87447, 87472, 87600, 87728, 87730, 87755, 87757, 87782, 87911, 88039, 88041, 88066, 88068, 88093, 88212, 88331, 88333, 88358, 88453, 88455, 88480, 88608, 88736, 88738, 88763, 88892, 88894, 88919, 89038, 89166, 89294, 89296, 89321, 89450, 89569, 89688, 89807, 89859, 89911, 90030, 90149, 90268, 90387, 90506, 90625, 90744, 90863, 90982, 91101, 91153, 91205, 91324, 91443, 91562, 91681, 91800, 91919, 92038, 92157, 92209, 92261, 92380, 92499, 92618, 92737, 92856, 92975, 93094, 93146, 93198, 93317, 93436, 93555, 93674, 93793, 93912, 94031, 94150, 94269, 94388, 94507, 94564, 94621, 94740, 94859, 94978, 95097, 95216, 95335, 95454, 95573, 95692, 95811, 95930, 96049, 96168, 96287, 96406, 96525, 96644, 96763, 96882, 97001, 97120, 97239, 97296, 97353 ] class << self attr_accessor :_address_lists_indicies private :_address_lists_indicies, :_address_lists_indicies= end self._address_lists_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 6, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 6, 8, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 9, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 10, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 12, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 14, 15, 14, 14, 14, 14, 14, 16, 1, 14, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 1, 19, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 20, 1, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 21, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 23, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 24, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 25, 25, 25, 25, 25, 25, 25, 25, 25, 1, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 1, 29, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 30, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 32, 33, 32, 32, 32, 32, 32, 34, 1, 32, 32, 1, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 1, 37, 32, 1, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 14, 15, 14, 14, 14, 14, 14, 40, 1, 14, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 1, 19, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 41, 1, 1, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 14, 15, 14, 14, 14, 14, 14, 43, 1, 14, 14, 1, 14, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 8, 14, 1, 14, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 44, 1, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 1, 45, 1, 1, 1, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45, 32, 33, 32, 32, 32, 32, 32, 47, 1, 32, 32, 1, 32, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 48, 32, 1, 32, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 49, 1, 1, 1, 50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 51, 52, 51, 51, 51, 51, 51, 53, 1, 51, 51, 54, 51, 55, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 1, 51, 56, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 57, 1, 1, 1, 58, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 51, 52, 51, 51, 51, 51, 51, 59, 1, 51, 51, 60, 51, 55, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 1, 51, 61, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 62, 1, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 63, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 65, 66, 65, 65, 65, 65, 65, 67, 1, 65, 65, 1, 65, 68, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 1, 1, 65, 69, 65, 70, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 1, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 71, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 76, 1, 77, 1, 71, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 78, 1, 1, 1, 79, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 1, 80, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 83, 1, 74, 1, 1, 1, 84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 85, 86, 85, 85, 85, 85, 85, 87, 1, 85, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 88, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 1, 89, 1, 1, 1, 90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 85, 1, 85, 85, 85, 85, 85, 91, 1, 85, 85, 1, 85, 74, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 75, 85, 92, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 89, 1, 1, 1, 90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 1, 1, 1, 1, 1, 1, 1, 91, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 92, 1, 93, 1, 89, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 1, 94, 1, 1, 1, 95, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 94, 1, 1, 1, 1, 1, 1, 1, 96, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 97, 1, 98, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 99, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 100, 1, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101, 1, 102, 1, 1, 1, 103, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 102, 104, 105, 104, 104, 104, 104, 104, 106, 1, 104, 104, 1, 104, 17, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 18, 1, 19, 104, 1, 104, 17, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 1, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 107, 1, 1, 1, 108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 104, 105, 104, 104, 104, 104, 104, 109, 1, 104, 104, 1, 104, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 1, 8, 104, 1, 104, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 1, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 110, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 1, 111, 1, 112, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 112, 1, 113, 1, 1, 1, 114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 113, 115, 116, 115, 115, 115, 115, 115, 117, 1, 115, 115, 118, 115, 119, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 120, 121, 115, 1, 115, 122, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 1, 1, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 123, 1, 1, 1, 124, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 125, 126, 125, 125, 125, 125, 125, 127, 1, 125, 125, 118, 125, 128, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 120, 129, 125, 1, 125, 1, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 1, 1, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 130, 1, 123, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 1, 131, 1, 1, 1, 132, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 131, 133, 134, 133, 133, 133, 133, 133, 135, 1, 133, 133, 136, 133, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 138, 139, 133, 1, 133, 140, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 1, 1, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 141, 1, 1, 1, 142, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 141, 143, 144, 143, 143, 143, 143, 143, 145, 1, 143, 143, 146, 143, 147, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 148, 139, 143, 1, 143, 149, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 150, 1, 151, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 151, 1, 152, 1, 1, 1, 153, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 152, 143, 144, 143, 143, 143, 143, 143, 154, 1, 143, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 139, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 156, 1, 143, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 143, 1, 157, 157, 157, 157, 157, 157, 157, 157, 157, 1, 157, 157, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 159, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 160, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 1, 161, 161, 161, 161, 161, 161, 161, 161, 161, 1, 161, 161, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 164, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 1, 165, 1, 161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 161, 1, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 1, 166, 1, 1, 1, 167, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 166, 168, 169, 168, 168, 168, 168, 168, 170, 1, 168, 168, 1, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 172, 168, 1, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 173, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 173, 143, 144, 143, 143, 143, 143, 143, 175, 1, 143, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 139, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 176, 1, 1, 1, 177, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 176, 143, 144, 143, 143, 143, 143, 143, 178, 1, 143, 143, 1, 143, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 129, 143, 1, 143, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 179, 1, 176, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 176, 1, 180, 1, 1, 1, 181, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 168, 169, 168, 168, 168, 168, 168, 182, 1, 168, 168, 1, 168, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 183, 168, 1, 168, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 184, 1, 1, 1, 185, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 184, 186, 187, 186, 186, 186, 186, 186, 188, 1, 186, 186, 189, 186, 190, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 1, 186, 191, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 192, 1, 1, 1, 193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 192, 186, 187, 186, 186, 186, 186, 186, 194, 1, 186, 186, 195, 186, 190, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 1, 186, 196, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 197, 1, 192, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 192, 1, 198, 1, 1, 1, 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 198, 200, 201, 200, 200, 200, 200, 200, 202, 1, 200, 200, 1, 200, 203, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 1, 1, 200, 204, 200, 205, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 1, 1, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 206, 1, 1, 1, 207, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 1, 208, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 211, 1, 212, 1, 206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206, 1, 213, 1, 1, 1, 214, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 213, 1, 1, 1, 1, 1, 1, 1, 215, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 218, 1, 209, 1, 1, 1, 219, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 209, 220, 221, 220, 220, 220, 220, 220, 222, 1, 220, 220, 1, 220, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 1, 220, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 223, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 209, 1, 224, 1, 1, 1, 225, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 220, 1, 220, 220, 220, 220, 220, 226, 1, 220, 220, 1, 220, 209, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 210, 220, 227, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 224, 1, 1, 1, 225, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 1, 1, 1, 1, 1, 1, 226, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 227, 1, 228, 1, 224, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 229, 1, 1, 1, 230, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 229, 1, 1, 1, 1, 1, 1, 1, 231, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 232, 1, 210, 1, 1, 1, 233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 1, 1, 1, 1, 1, 1, 234, 1, 1, 1, 235, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 236, 1, 237, 1, 210, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 217, 1, 1, 1, 238, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 1, 1, 1, 1, 1, 1, 239, 1, 1, 1, 240, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 241, 1, 242, 1, 1, 1, 243, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 242, 115, 116, 115, 115, 115, 115, 115, 244, 1, 115, 115, 245, 115, 119, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 120, 121, 115, 1, 115, 122, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 1, 1, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 246, 1, 1, 1, 247, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 246, 125, 126, 125, 125, 125, 125, 125, 248, 1, 125, 125, 245, 125, 128, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 120, 129, 125, 1, 125, 1, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 1, 1, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 1, 249, 1, 246, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 246, 1, 250, 250, 250, 250, 250, 250, 250, 250, 251, 1, 250, 250, 252, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 250, 253, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 254, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 255, 255, 256, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 257, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 258, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 259, 1, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 1, 260, 1, 1, 1, 261, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 260, 262, 134, 262, 262, 262, 262, 262, 263, 1, 262, 262, 264, 262, 137, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 265, 139, 262, 1, 262, 266, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 267, 1, 1, 1, 268, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 267, 143, 144, 143, 143, 143, 143, 143, 269, 1, 143, 143, 270, 143, 147, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 271, 139, 143, 1, 143, 272, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 273, 1, 274, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 274, 1, 275, 1, 1, 1, 276, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 275, 168, 169, 168, 168, 168, 168, 168, 277, 1, 168, 168, 278, 168, 279, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 280, 172, 168, 1, 168, 281, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 282, 1, 1, 1, 283, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 282, 284, 285, 284, 284, 284, 284, 284, 286, 1, 284, 284, 1, 284, 155, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 139, 284, 1, 284, 155, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 287, 1, 1, 1, 288, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 287, 284, 285, 284, 284, 284, 284, 284, 289, 1, 284, 284, 1, 284, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 129, 284, 1, 284, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 290, 1, 287, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 287, 1, 291, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 291, 284, 144, 284, 284, 284, 284, 284, 293, 1, 284, 284, 235, 284, 147, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 236, 139, 284, 1, 284, 294, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 291, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 291, 143, 144, 143, 143, 143, 143, 143, 293, 1, 143, 143, 235, 143, 147, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 236, 139, 143, 1, 143, 294, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 295, 1, 296, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 296, 1, 297, 1, 1, 1, 298, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 297, 168, 169, 168, 168, 168, 168, 168, 299, 1, 168, 168, 240, 168, 279, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 241, 172, 168, 1, 168, 300, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 301, 1, 302, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 302, 1, 303, 1, 1, 1, 304, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 303, 305, 306, 305, 305, 305, 305, 305, 307, 1, 305, 305, 308, 305, 309, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 138, 310, 305, 1, 305, 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 1, 1, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 312, 1, 1, 1, 313, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 312, 314, 315, 314, 314, 314, 314, 314, 316, 1, 314, 314, 317, 314, 318, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 148, 310, 314, 1, 314, 319, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 320, 1, 321, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 321, 1, 322, 1, 1, 1, 323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 322, 314, 315, 314, 314, 314, 314, 314, 324, 1, 314, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 310, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 326, 1, 314, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 314, 1, 327, 327, 327, 327, 327, 327, 327, 327, 327, 1, 327, 327, 328, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 329, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 330, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 1, 331, 331, 331, 331, 331, 331, 331, 331, 331, 1, 331, 331, 332, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 333, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 334, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 1, 335, 1, 331, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 331, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 331, 336, 1, 1, 1, 337, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 336, 338, 339, 338, 338, 338, 338, 338, 340, 1, 338, 338, 1, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 342, 338, 1, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 343, 1, 1, 1, 344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 314, 315, 314, 314, 314, 314, 314, 345, 1, 314, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 310, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 346, 1, 1, 1, 347, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 346, 314, 315, 314, 314, 314, 314, 314, 348, 1, 314, 314, 1, 314, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 349, 314, 1, 314, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 350, 1, 346, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 346, 1, 351, 1, 1, 1, 352, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 351, 338, 339, 338, 338, 338, 338, 338, 353, 1, 338, 338, 1, 338, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 354, 338, 1, 338, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 355, 1, 1, 1, 356, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 355, 357, 358, 357, 357, 357, 357, 357, 359, 1, 357, 357, 360, 357, 361, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 1, 357, 362, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 363, 1, 1, 1, 364, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 363, 357, 358, 357, 357, 357, 357, 357, 365, 1, 357, 357, 366, 357, 361, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 1, 357, 367, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 368, 1, 363, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 363, 1, 369, 1, 1, 1, 370, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 369, 371, 372, 371, 371, 371, 371, 371, 373, 1, 371, 371, 1, 371, 374, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 1, 1, 371, 375, 371, 376, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 1, 1, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 377, 1, 1, 1, 378, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 377, 1, 1, 1, 1, 1, 1, 1, 379, 1, 1, 1, 1, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 382, 1, 383, 1, 377, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 377, 1, 384, 1, 1, 1, 385, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 384, 1, 1, 1, 1, 1, 1, 1, 386, 1, 1, 1, 1, 1, 387, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 389, 1, 380, 1, 1, 1, 390, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 380, 391, 392, 391, 391, 391, 391, 391, 393, 1, 391, 391, 1, 391, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 1, 391, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 394, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 380, 1, 395, 1, 1, 1, 396, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 395, 391, 1, 391, 391, 391, 391, 391, 397, 1, 391, 391, 1, 391, 380, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 381, 391, 398, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 395, 1, 1, 1, 396, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 395, 1, 1, 1, 1, 1, 1, 1, 397, 1, 1, 1, 1, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 398, 1, 399, 1, 395, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 395, 1, 400, 1, 1, 1, 401, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 400, 1, 1, 1, 1, 1, 1, 1, 402, 1, 1, 1, 1, 1, 387, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 403, 1, 381, 1, 1, 1, 404, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 1, 1, 1, 1, 1, 1, 405, 1, 1, 1, 406, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 236, 1, 407, 1, 381, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 388, 1, 1, 1, 408, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 1, 1, 1, 1, 1, 1, 409, 1, 1, 1, 410, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 241, 1, 411, 1, 1, 1, 412, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 411, 413, 414, 413, 413, 413, 413, 413, 415, 1, 413, 413, 1, 413, 416, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 1, 417, 413, 1, 413, 418, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 1, 1, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 419, 1, 1, 1, 420, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 419, 421, 422, 421, 421, 421, 421, 421, 423, 1, 421, 421, 1, 421, 424, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 1, 349, 421, 1, 421, 1, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 1, 1, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 425, 1, 419, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 419, 1, 426, 426, 426, 426, 426, 426, 426, 426, 427, 1, 426, 426, 428, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 427, 426, 429, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 430, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 1, 431, 431, 431, 431, 431, 431, 431, 431, 431, 1, 431, 431, 432, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 433, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 434, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 1, 435, 1, 431, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 431, 1, 436, 1, 1, 1, 437, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 436, 438, 306, 438, 438, 438, 438, 438, 439, 1, 438, 438, 440, 438, 309, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 265, 310, 438, 1, 438, 441, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 1, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 442, 1, 1, 1, 443, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 442, 314, 315, 314, 314, 314, 314, 314, 444, 1, 314, 314, 445, 314, 318, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 271, 310, 314, 1, 314, 446, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 447, 1, 448, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 448, 1, 449, 1, 1, 1, 450, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 449, 338, 339, 338, 338, 338, 338, 338, 451, 1, 338, 338, 452, 338, 453, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 280, 342, 338, 1, 338, 454, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 455, 1, 1, 1, 456, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 455, 457, 458, 457, 457, 457, 457, 457, 459, 1, 457, 457, 1, 457, 325, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 310, 457, 1, 457, 325, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 460, 1, 1, 1, 461, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 460, 457, 458, 457, 457, 457, 457, 457, 462, 1, 457, 457, 1, 457, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 349, 457, 1, 457, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 463, 1, 460, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 460, 1, 464, 1, 1, 1, 465, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 464, 457, 315, 457, 457, 457, 457, 457, 466, 1, 457, 457, 406, 457, 318, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 236, 310, 457, 1, 457, 467, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 464, 1, 1, 1, 465, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 464, 314, 315, 314, 314, 314, 314, 314, 466, 1, 314, 314, 406, 314, 318, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 236, 310, 314, 1, 314, 467, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 468, 1, 469, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 469, 1, 470, 1, 1, 1, 471, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 470, 338, 339, 338, 338, 338, 338, 338, 472, 1, 338, 338, 410, 338, 453, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 241, 342, 338, 1, 338, 473, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 474, 1, 1, 1, 475, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 474, 476, 477, 476, 476, 476, 476, 476, 478, 1, 476, 476, 1, 476, 479, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 1, 1, 310, 476, 1, 476, 325, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 480, 1, 1, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 1, 481, 1, 1, 1, 482, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 481, 483, 484, 483, 483, 483, 483, 483, 485, 1, 483, 483, 1, 483, 486, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 1, 349, 483, 1, 483, 1, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 487, 1, 1, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 488, 1, 481, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 481, 1, 489, 1, 1, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 483, 484, 483, 483, 483, 483, 483, 491, 1, 483, 483, 492, 483, 493, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 494, 310, 483, 1, 483, 325, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 1, 1, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 489, 1, 1, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 314, 315, 314, 314, 314, 314, 314, 491, 1, 314, 314, 492, 314, 495, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 494, 310, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 496, 1, 497, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 497, 1, 498, 1, 1, 1, 499, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 498, 338, 339, 338, 338, 338, 338, 338, 500, 1, 338, 338, 501, 338, 502, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 503, 342, 338, 1, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 504, 1, 1, 1, 505, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 504, 506, 315, 506, 506, 506, 506, 506, 507, 1, 506, 506, 1, 506, 325, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 1, 310, 506, 1, 506, 325, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 1, 1, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 508, 1, 1, 1, 509, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 508, 506, 315, 506, 506, 506, 506, 506, 510, 1, 506, 506, 1, 506, 1, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 1, 349, 506, 1, 506, 1, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 1, 1, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 511, 1, 508, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 508, 1, 489, 1, 1, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 506, 315, 506, 506, 506, 506, 506, 491, 1, 506, 506, 492, 506, 495, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 494, 310, 506, 1, 506, 325, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 1, 1, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 1, 512, 1, 1, 1, 513, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 512, 514, 339, 514, 514, 514, 514, 514, 515, 1, 514, 514, 1, 514, 1, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 1, 1, 354, 514, 1, 514, 1, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 1, 1, 1, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 1, 516, 516, 516, 516, 516, 516, 516, 516, 517, 1, 516, 516, 518, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 517, 516, 329, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 519, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 1, 520, 520, 520, 520, 520, 520, 520, 520, 520, 1, 520, 520, 521, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 522, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 523, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 1, 524, 1, 520, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 520, 1, 525, 1, 1, 1, 526, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 525, 527, 484, 527, 527, 527, 527, 527, 528, 1, 527, 527, 492, 527, 529, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 494, 310, 527, 1, 527, 325, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 1, 1, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 525, 1, 1, 1, 526, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 525, 314, 315, 314, 314, 314, 314, 314, 528, 1, 314, 314, 492, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 494, 310, 314, 1, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 530, 1, 531, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 531, 1, 532, 1, 1, 1, 533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 532, 338, 339, 338, 338, 338, 338, 338, 534, 1, 338, 338, 501, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 503, 342, 338, 1, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 343, 1, 1, 1, 344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 527, 484, 527, 527, 527, 527, 527, 345, 1, 527, 527, 1, 527, 529, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 1, 310, 527, 1, 527, 325, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 1, 1, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 1, 520, 520, 520, 520, 520, 520, 520, 520, 535, 1, 520, 520, 536, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 535, 520, 333, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 523, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 1, 537, 1, 535, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 535, 1, 504, 1, 1, 1, 505, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 504, 483, 484, 483, 483, 483, 483, 483, 507, 1, 483, 483, 1, 483, 529, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 1, 310, 483, 1, 483, 325, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 1, 1, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 1, 538, 1, 1, 1, 539, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 538, 540, 541, 540, 540, 540, 540, 540, 542, 1, 540, 540, 1, 540, 543, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1, 1, 354, 540, 1, 540, 1, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 544, 1, 1, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1, 545, 546, 545, 545, 545, 545, 545, 1, 1, 545, 545, 1, 545, 486, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 1, 1, 545, 1, 545, 1, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 1, 1, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 547, 1, 1, 1, 548, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 547, 545, 546, 545, 545, 545, 545, 545, 549, 1, 545, 545, 492, 545, 486, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 494, 1, 545, 1, 545, 1, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 1, 1, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 1, 547, 1, 1, 1, 548, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 547, 1, 1, 1, 1, 1, 1, 1, 549, 1, 1, 1, 492, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 550, 1, 547, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 547, 1, 551, 1, 1, 1, 552, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 551, 1, 1, 1, 1, 1, 1, 1, 553, 1, 1, 1, 501, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 503, 1, 554, 554, 554, 554, 554, 554, 554, 554, 546, 1, 554, 554, 555, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 546, 554, 1, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 556, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 554, 554, 557, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 545, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 556, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 558, 1, 554, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 554, 1, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 559, 1, 546, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 546, 1, 487, 487, 487, 487, 487, 487, 487, 487, 487, 1, 487, 487, 560, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 1, 561, 547, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 1, 562, 1, 487, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 487, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 487, 563, 563, 563, 563, 563, 563, 563, 563, 563, 1, 563, 563, 564, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 565, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 566, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 1, 567, 567, 567, 567, 567, 567, 567, 567, 567, 1, 567, 567, 568, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 569, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 570, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 1, 571, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 567, 1, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 1, 572, 1, 1, 1, 573, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 572, 574, 575, 574, 574, 574, 574, 574, 576, 1, 574, 574, 1, 574, 1, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 1, 354, 574, 1, 574, 1, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 1, 1, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 577, 1, 1, 1, 578, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 577, 438, 306, 438, 438, 438, 438, 438, 579, 1, 438, 438, 308, 438, 580, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 138, 310, 438, 1, 438, 311, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 1, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 581, 1, 1, 1, 582, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 581, 314, 315, 314, 314, 314, 314, 314, 583, 1, 314, 314, 317, 314, 325, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 148, 310, 314, 1, 314, 319, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 584, 1, 585, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 585, 1, 586, 1, 1, 1, 587, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 586, 338, 339, 338, 338, 338, 338, 338, 588, 1, 338, 338, 589, 338, 341, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 590, 342, 338, 1, 338, 591, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 592, 592, 592, 592, 592, 592, 592, 592, 593, 1, 592, 592, 594, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 593, 592, 329, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 595, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 1, 596, 596, 596, 596, 596, 596, 596, 596, 596, 1, 596, 596, 597, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 598, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 599, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 1, 600, 1, 596, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 596, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 596, 596, 596, 596, 596, 596, 596, 596, 596, 601, 1, 596, 596, 602, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 601, 596, 333, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 599, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 1, 603, 1, 601, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 601, 1, 604, 1, 1, 1, 605, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 604, 438, 306, 438, 438, 438, 438, 438, 606, 1, 438, 438, 308, 438, 580, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 138, 310, 438, 1, 438, 311, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 1, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 607, 1, 1, 1, 608, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 607, 314, 315, 314, 314, 314, 314, 314, 609, 1, 314, 314, 317, 314, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 148, 349, 314, 1, 314, 610, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 611, 1, 607, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 607, 1, 612, 1, 1, 1, 613, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 612, 338, 339, 338, 338, 338, 338, 338, 614, 1, 338, 338, 589, 338, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 590, 354, 338, 1, 338, 615, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 616, 1, 1, 1, 617, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 616, 618, 619, 618, 618, 618, 618, 618, 620, 1, 618, 618, 1, 618, 621, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 1, 1, 1, 618, 1, 618, 1, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 480, 1, 1, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 1, 622, 1, 1, 1, 623, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 622, 624, 546, 624, 624, 624, 624, 624, 625, 1, 624, 624, 1, 624, 486, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 1, 1, 624, 1, 624, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 487, 1, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 626, 1, 622, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 622, 1, 627, 1, 1, 1, 628, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 627, 624, 546, 624, 624, 624, 624, 624, 629, 1, 624, 624, 492, 624, 630, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 494, 1, 624, 1, 624, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 1, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 627, 1, 1, 1, 628, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 627, 1, 1, 1, 1, 1, 1, 1, 629, 1, 1, 1, 492, 1, 631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 632, 1, 627, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 627, 1, 633, 1, 1, 1, 634, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 633, 1, 1, 1, 1, 1, 1, 1, 635, 1, 1, 1, 501, 1, 636, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 503, 1, 631, 1, 1, 1, 637, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 631, 638, 1, 638, 638, 638, 638, 638, 639, 1, 638, 638, 1, 638, 1, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 1, 1, 638, 1, 638, 1, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 1, 1, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 640, 1, 631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 631, 1, 627, 1, 1, 1, 628, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 627, 638, 1, 638, 638, 638, 638, 638, 629, 1, 638, 638, 492, 638, 631, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 494, 1, 638, 1, 638, 1, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 1, 1, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 1, 636, 1, 1, 1, 641, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 636, 642, 1, 642, 642, 642, 642, 642, 643, 1, 642, 642, 1, 642, 1, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 1, 1, 1, 642, 1, 642, 1, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 1, 1, 1, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 1, 631, 1, 1, 1, 637, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 631, 624, 546, 624, 624, 624, 624, 624, 639, 1, 624, 624, 1, 624, 486, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 1, 1, 624, 1, 624, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 1, 1, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 1, 644, 1, 1, 1, 645, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 644, 646, 647, 646, 646, 646, 646, 646, 648, 1, 646, 646, 1, 646, 543, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 1, 1, 1, 646, 1, 646, 1, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 544, 1, 1, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 1, 649, 1, 1, 1, 650, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 649, 305, 651, 305, 305, 305, 305, 305, 652, 1, 305, 305, 308, 305, 580, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 138, 310, 305, 1, 305, 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 1, 1, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1, 653, 1, 1, 1, 654, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 653, 457, 458, 457, 457, 457, 457, 457, 655, 1, 457, 457, 317, 457, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 148, 349, 457, 1, 457, 610, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 1, 1, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 1, 656, 1, 653, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 653, 1, 657, 1, 1, 1, 658, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 657, 574, 575, 574, 574, 574, 574, 574, 659, 1, 574, 574, 589, 574, 1, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 590, 354, 574, 1, 574, 615, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 1, 1, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1, 660, 660, 660, 660, 660, 660, 660, 660, 661, 1, 660, 660, 662, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 661, 660, 565, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 663, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 1, 664, 664, 664, 664, 664, 664, 664, 664, 664, 1, 664, 664, 665, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 666, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 667, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 1, 668, 1, 664, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 664, 1, 303, 1, 1, 1, 304, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 303, 438, 306, 438, 438, 438, 438, 438, 307, 1, 438, 438, 308, 438, 309, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 138, 310, 438, 1, 438, 311, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 1, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 669, 1, 1, 1, 670, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 669, 338, 339, 338, 338, 338, 338, 338, 671, 1, 338, 338, 589, 338, 453, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 590, 342, 338, 1, 338, 591, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 1, 664, 664, 664, 664, 664, 664, 664, 664, 672, 1, 664, 664, 673, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 672, 664, 569, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 667, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 1, 674, 1, 672, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 672, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 431, 431, 431, 431, 431, 431, 431, 431, 431, 675, 1, 431, 431, 676, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 675, 431, 677, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 434, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 1, 678, 1, 675, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 675, 1, 679, 1, 1, 1, 680, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 679, 314, 315, 314, 314, 314, 314, 314, 681, 1, 314, 314, 682, 314, 318, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 683, 310, 314, 1, 314, 684, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 1, 1, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 1, 685, 1, 686, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 686, 1, 687, 1, 1, 1, 688, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 687, 338, 339, 338, 338, 338, 338, 338, 689, 1, 338, 338, 690, 338, 453, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 691, 342, 338, 1, 338, 692, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 1, 1, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 1, 693, 1, 1, 1, 694, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 693, 695, 696, 695, 695, 695, 695, 695, 697, 1, 695, 695, 1, 695, 698, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 1, 354, 695, 1, 695, 1, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 1, 1, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 699, 700, 699, 699, 699, 699, 699, 1, 1, 699, 699, 1, 699, 701, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 1, 1, 699, 1, 699, 1, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 1, 1, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 702, 1, 1, 1, 703, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 702, 699, 700, 699, 699, 699, 699, 699, 704, 1, 699, 699, 308, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 138, 1, 699, 1, 699, 705, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 1, 1, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 1, 706, 1, 1, 1, 707, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 706, 1, 1, 1, 1, 1, 1, 1, 708, 1, 1, 1, 317, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 148, 1, 1, 1, 1, 610, 1, 709, 1, 706, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 706, 1, 710, 1, 1, 1, 711, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 710, 1, 1, 1, 1, 1, 1, 1, 712, 1, 1, 1, 589, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 1, 1, 1, 1, 615, 1, 713, 713, 713, 713, 713, 713, 713, 713, 700, 1, 713, 713, 714, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 700, 713, 1, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 715, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 1, 713, 713, 713, 713, 713, 713, 713, 713, 713, 1, 713, 713, 716, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 699, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 715, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 1, 717, 1, 713, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 713, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 713, 718, 1, 700, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 700, 1, 343, 1, 1, 1, 344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 438, 306, 438, 438, 438, 438, 438, 345, 1, 438, 438, 1, 438, 719, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 310, 438, 1, 438, 325, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 1, 1, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 1, 720, 1, 1, 1, 721, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 720, 722, 723, 722, 722, 722, 722, 722, 724, 1, 722, 722, 1, 722, 725, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 1, 1, 1, 722, 1, 722, 1, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 726, 1, 1, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 1, 727, 1, 1, 1, 728, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 727, 729, 730, 729, 729, 729, 729, 729, 731, 1, 729, 729, 1, 729, 732, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 1, 1, 729, 1, 729, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 733, 1, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 734, 1, 727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 727, 1, 735, 1, 1, 1, 736, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 735, 729, 730, 729, 729, 729, 729, 729, 737, 1, 729, 729, 1, 729, 738, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 1, 1, 729, 739, 729, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 1, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 735, 1, 1, 1, 736, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 735, 1, 1, 1, 1, 1, 1, 1, 737, 1, 1, 1, 1, 1, 740, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 739, 1, 741, 1, 735, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 735, 1, 742, 1, 1, 1, 743, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 742, 1, 1, 1, 1, 1, 1, 1, 744, 1, 1, 1, 1, 1, 745, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 746, 1, 740, 1, 1, 1, 747, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 740, 748, 1, 748, 748, 748, 748, 748, 749, 1, 748, 748, 1, 748, 1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 1, 1, 748, 1, 748, 1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 1, 1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 750, 1, 740, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 740, 1, 735, 1, 1, 1, 736, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 735, 748, 1, 748, 748, 748, 748, 748, 737, 1, 748, 748, 1, 748, 740, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 1, 1, 748, 739, 748, 1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 1, 1, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 1, 745, 1, 1, 1, 751, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 745, 752, 1, 752, 752, 752, 752, 752, 753, 1, 752, 752, 1, 752, 1, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 1, 1, 1, 752, 1, 752, 1, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 1, 1, 1, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 1, 754, 754, 754, 754, 754, 754, 754, 754, 730, 1, 754, 754, 755, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 730, 754, 1, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 756, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 1, 754, 754, 754, 754, 754, 754, 754, 754, 754, 1, 754, 754, 757, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 758, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 756, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 1, 759, 1, 754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 754, 1, 760, 1, 1, 1, 761, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 760, 758, 730, 758, 758, 758, 758, 758, 762, 1, 758, 758, 1, 758, 732, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 1, 1, 758, 739, 758, 1, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 1, 1, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 760, 1, 1, 1, 761, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 760, 1, 1, 1, 1, 1, 1, 1, 762, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 739, 1, 763, 1, 760, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 760, 1, 764, 1, 1, 1, 765, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 764, 1, 1, 1, 1, 1, 1, 1, 766, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 746, 1, 758, 730, 758, 758, 758, 758, 758, 1, 1, 758, 758, 1, 758, 732, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 1, 1, 758, 1, 758, 1, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 1, 1, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 1, 767, 1, 730, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 730, 1, 740, 1, 1, 1, 747, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 740, 729, 730, 729, 729, 729, 729, 729, 749, 1, 729, 729, 1, 729, 732, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 1, 1, 729, 1, 729, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 1, 1, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 1, 768, 1, 1, 1, 769, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 768, 770, 771, 770, 770, 770, 770, 770, 772, 1, 770, 770, 1, 770, 773, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 1, 1, 1, 770, 1, 770, 1, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 774, 1, 1, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 1, 733, 733, 733, 733, 733, 733, 733, 733, 733, 1, 733, 733, 775, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 1, 776, 760, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 1, 777, 1, 733, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 733, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 733, 778, 778, 778, 778, 778, 778, 778, 778, 778, 1, 778, 778, 779, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 780, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 781, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 1, 782, 782, 782, 782, 782, 782, 782, 782, 782, 1, 782, 782, 783, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 784, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 785, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 1, 786, 1, 782, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 782, 1, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 1, 387, 1, 1, 1, 787, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 387, 788, 789, 788, 788, 788, 788, 788, 790, 1, 788, 788, 1, 788, 1, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 1, 1, 788, 1, 788, 1, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 1, 1, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 791, 791, 791, 791, 791, 791, 791, 791, 372, 1, 791, 791, 792, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 372, 791, 1, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 793, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1, 791, 791, 794, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 795, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 793, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1, 796, 1, 791, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 791, 1, 797, 1, 1, 1, 798, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 797, 795, 372, 795, 795, 795, 795, 795, 799, 1, 795, 795, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 375, 795, 376, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 800, 1, 1, 1, 801, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 800, 1, 1, 1, 1, 1, 1, 1, 802, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 382, 1, 803, 1, 800, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 800, 1, 804, 1, 1, 1, 805, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 804, 1, 1, 1, 1, 1, 1, 1, 806, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 389, 1, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 1, 807, 1, 372, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 372, 1, 808, 1, 1, 1, 809, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 808, 371, 810, 371, 371, 371, 371, 371, 811, 1, 371, 371, 1, 371, 795, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 1, 1, 371, 375, 371, 376, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 1, 1, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 812, 1, 1, 1, 813, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 812, 391, 392, 391, 391, 391, 391, 391, 814, 1, 391, 391, 1, 391, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 381, 391, 382, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 1, 1, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 1, 815, 1, 812, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 812, 1, 816, 1, 1, 1, 817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 816, 788, 789, 788, 788, 788, 788, 788, 818, 1, 788, 788, 1, 788, 1, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 1, 1, 788, 388, 788, 389, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 1, 1, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 1, 819, 819, 819, 819, 819, 819, 819, 819, 820, 1, 819, 819, 821, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 820, 819, 780, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 822, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 1, 823, 823, 823, 823, 823, 823, 823, 823, 823, 1, 823, 823, 824, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 825, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 826, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 1, 827, 1, 823, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 823, 1, 369, 1, 1, 1, 370, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 369, 795, 372, 795, 795, 795, 795, 795, 373, 1, 795, 795, 1, 795, 374, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 375, 795, 376, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 823, 823, 823, 823, 823, 823, 823, 823, 823, 828, 1, 823, 823, 829, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 828, 823, 784, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 826, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 1, 830, 1, 828, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 828, 1, 831, 831, 831, 831, 831, 831, 831, 831, 832, 1, 831, 831, 833, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 832, 831, 834, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 835, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 1, 836, 836, 836, 836, 836, 836, 836, 836, 836, 1, 836, 836, 837, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 838, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 839, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 1, 840, 1, 836, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 836, 1, 841, 1, 1, 1, 842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 841, 795, 372, 795, 795, 795, 795, 795, 843, 1, 795, 795, 1, 795, 374, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 375, 795, 844, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 845, 1, 1, 1, 846, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 845, 1, 1, 1, 1, 1, 1, 1, 847, 1, 1, 1, 1, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 848, 1, 849, 1, 845, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 845, 1, 850, 1, 1, 1, 851, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 850, 1, 1, 1, 1, 1, 1, 1, 852, 1, 1, 1, 1, 1, 387, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 853, 1, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 1, 836, 836, 836, 836, 836, 836, 836, 836, 854, 1, 836, 836, 855, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 854, 836, 856, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 839, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 1, 857, 1, 854, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 854, 1, 858, 1, 1, 1, 859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 858, 1, 1, 1, 1, 1, 1, 1, 860, 1, 1, 1, 1, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 381, 1, 861, 1, 862, 1, 858, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 858, 1, 863, 1, 1, 1, 864, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 863, 1, 1, 1, 1, 1, 1, 1, 865, 1, 1, 1, 1, 1, 387, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388, 1, 866, 1, 867, 1, 1, 1, 868, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 867, 869, 870, 869, 869, 869, 869, 869, 871, 1, 869, 869, 872, 869, 873, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 1, 1, 869, 1, 869, 874, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 1, 1, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 366, 1, 1, 1, 875, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 366, 1, 1, 1, 1, 1, 1, 1, 876, 1, 1, 1, 366, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 367, 1, 877, 1, 366, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 366, 1, 872, 1, 1, 1, 878, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 872, 1, 1, 1, 1, 1, 1, 1, 879, 1, 1, 1, 872, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 874, 1, 880, 1, 1, 1, 881, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 880, 882, 883, 882, 882, 882, 882, 882, 884, 1, 882, 882, 1, 882, 885, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 1, 1, 1, 882, 1, 882, 1, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 886, 1, 1, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 1, 887, 1, 1, 1, 888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 887, 889, 890, 889, 889, 889, 889, 889, 891, 1, 889, 889, 1, 889, 892, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 1, 1, 889, 1, 889, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 893, 1, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 894, 1, 887, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 887, 1, 895, 1, 1, 1, 896, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 895, 889, 890, 889, 889, 889, 889, 889, 897, 1, 889, 889, 898, 889, 899, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 900, 1, 1, 889, 1, 889, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 1, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 895, 1, 1, 1, 896, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 895, 1, 1, 1, 1, 1, 1, 1, 897, 1, 1, 1, 898, 1, 901, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 900, 1, 902, 1, 895, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 895, 1, 903, 1, 1, 1, 904, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 903, 1, 1, 1, 1, 1, 1, 1, 905, 1, 1, 1, 906, 1, 907, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 908, 1, 909, 1, 1, 1, 910, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 909, 1, 1, 1, 1, 1, 1, 1, 911, 1, 1, 1, 909, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 912, 1, 1, 1, 1, 1, 367, 1, 913, 1, 909, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 909, 1, 914, 1, 1, 1, 915, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 914, 1, 1, 1, 1, 1, 1, 1, 916, 1, 1, 1, 914, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 917, 1, 1, 1, 1, 1, 874, 1, 918, 1, 1, 1, 919, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 918, 920, 921, 920, 920, 920, 920, 920, 922, 1, 920, 920, 1, 920, 923, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 1, 1, 1, 920, 1, 920, 1, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 1, 1, 1, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 1, 924, 1, 1, 1, 925, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 924, 357, 358, 357, 357, 357, 357, 357, 926, 1, 357, 357, 1, 357, 361, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 1, 357, 1, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 1, 1, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1, 927, 1, 924, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 924, 1, 928, 1, 1, 1, 929, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 928, 869, 870, 869, 869, 869, 869, 869, 930, 1, 869, 869, 1, 869, 873, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 1, 1, 869, 1, 869, 1, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 1, 1, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 1, 795, 372, 795, 795, 795, 795, 795, 1, 1, 795, 795, 1, 795, 931, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 1, 795, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 1, 1, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 1, 901, 1, 1, 1, 932, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 901, 933, 1, 933, 933, 933, 933, 933, 934, 1, 933, 933, 1, 933, 1, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 1, 1, 1, 933, 1, 933, 1, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 1, 1, 1, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 1, 935, 1, 901, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 901, 1, 895, 1, 1, 1, 896, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 895, 933, 1, 933, 933, 933, 933, 933, 897, 1, 933, 933, 898, 933, 901, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 900, 1, 1, 933, 1, 933, 1, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 1, 1, 1, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 1, 907, 1, 1, 1, 936, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 907, 937, 1, 937, 937, 937, 937, 937, 938, 1, 937, 937, 1, 937, 1, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 1, 1, 1, 937, 1, 937, 1, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 1, 1, 1, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 1, 939, 939, 939, 939, 939, 939, 939, 939, 890, 1, 939, 939, 940, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 890, 939, 1, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 941, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 1, 939, 939, 939, 939, 939, 939, 939, 939, 939, 1, 939, 939, 942, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 943, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 941, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 1, 944, 1, 939, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 939, 1, 945, 1, 1, 1, 946, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 945, 943, 890, 943, 943, 943, 943, 943, 947, 1, 943, 943, 898, 943, 892, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 900, 1, 1, 943, 1, 943, 1, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 1, 1, 1, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 1, 945, 1, 1, 1, 946, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 945, 1, 1, 1, 1, 1, 1, 1, 947, 1, 1, 1, 898, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 900, 1, 948, 1, 945, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 945, 1, 949, 1, 1, 1, 950, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 949, 1, 1, 1, 1, 1, 1, 1, 951, 1, 1, 1, 906, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 908, 1, 943, 890, 943, 943, 943, 943, 943, 1, 1, 943, 943, 1, 943, 892, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 1, 1, 1, 943, 1, 943, 1, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 1, 1, 1, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 939, 952, 1, 890, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 890, 1, 901, 1, 1, 1, 932, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 901, 889, 890, 889, 889, 889, 889, 889, 934, 1, 889, 889, 1, 889, 892, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 1, 1, 889, 1, 889, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 1, 1, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 1, 953, 1, 1, 1, 954, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 953, 955, 956, 955, 955, 955, 955, 955, 957, 1, 955, 955, 1, 955, 958, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 1, 1, 1, 955, 1, 955, 1, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 959, 1, 1, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 1, 893, 893, 893, 893, 893, 893, 893, 893, 893, 1, 893, 893, 960, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 1, 961, 945, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 1, 962, 1, 893, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 893, 1, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 1, 963, 1, 1, 1, 964, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 963, 965, 966, 965, 965, 965, 965, 965, 967, 1, 965, 965, 1, 965, 968, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 1, 1, 139, 965, 1, 965, 155, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 969, 1, 1, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 1, 970, 1, 1, 1, 971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 970, 972, 973, 972, 972, 972, 972, 972, 974, 1, 972, 972, 1, 972, 975, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 1, 129, 972, 1, 972, 1, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 976, 1, 1, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 977, 1, 970, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 970, 1, 978, 1, 1, 1, 979, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 978, 972, 973, 972, 972, 972, 972, 972, 980, 1, 972, 972, 981, 972, 982, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 494, 139, 972, 1, 972, 155, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 1, 1, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 978, 1, 1, 1, 979, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 978, 143, 144, 143, 143, 143, 143, 143, 980, 1, 143, 143, 981, 143, 983, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 494, 139, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 984, 1, 985, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 985, 1, 986, 1, 1, 1, 987, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 986, 168, 169, 168, 168, 168, 168, 168, 988, 1, 168, 168, 989, 168, 990, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 503, 172, 168, 1, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 991, 1, 1, 1, 992, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 991, 993, 144, 993, 993, 993, 993, 993, 994, 1, 993, 993, 1, 993, 155, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 1, 139, 993, 1, 993, 155, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 1, 1, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 995, 1, 1, 1, 996, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 995, 993, 144, 993, 993, 993, 993, 993, 997, 1, 993, 993, 1, 993, 1, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 1, 129, 993, 1, 993, 1, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 1, 1, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 998, 1, 995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 995, 1, 978, 1, 1, 1, 979, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 978, 993, 144, 993, 993, 993, 993, 993, 980, 1, 993, 993, 981, 993, 983, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 494, 139, 993, 1, 993, 155, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 1, 1, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 1, 999, 1, 1, 1, 1000, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 999, 1001, 169, 1001, 1001, 1001, 1001, 1001, 1002, 1, 1001, 1001, 1, 1001, 1, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1, 1, 183, 1001, 1, 1001, 1, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1, 1, 1, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1004, 1, 1003, 1003, 1005, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1004, 1003, 159, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1006, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1, 1007, 1007, 1008, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1009, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1010, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1, 1011, 1, 1007, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1007, 1, 1012, 1, 1, 1, 1013, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1012, 1014, 973, 1014, 1014, 1014, 1014, 1014, 1015, 1, 1014, 1014, 981, 1014, 1016, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 494, 139, 1014, 1, 1014, 155, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 1, 1, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 1012, 1, 1, 1, 1013, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1012, 143, 144, 143, 143, 143, 143, 143, 1015, 1, 143, 143, 981, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 494, 139, 143, 1, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1017, 1, 1018, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1018, 1, 1019, 1, 1, 1, 1020, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1019, 168, 169, 168, 168, 168, 168, 168, 1021, 1, 168, 168, 989, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 503, 172, 168, 1, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 173, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 173, 1014, 973, 1014, 1014, 1014, 1014, 1014, 175, 1, 1014, 1014, 1, 1014, 1016, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 1, 139, 1014, 1, 1014, 155, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 1, 1, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1022, 1, 1007, 1007, 1023, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1022, 1007, 163, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1010, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1, 1024, 1, 1022, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1022, 1, 991, 1, 1, 1, 992, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 991, 972, 973, 972, 972, 972, 972, 972, 994, 1, 972, 972, 1, 972, 1016, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 1, 139, 972, 1, 972, 155, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 1, 1, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 1, 1025, 1, 1, 1, 1026, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1025, 1027, 1028, 1027, 1027, 1027, 1027, 1027, 1029, 1, 1027, 1027, 1, 1027, 1030, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1, 1, 183, 1027, 1, 1027, 1, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1031, 1, 1, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1, 1032, 1033, 1032, 1032, 1032, 1032, 1032, 1, 1, 1032, 1032, 1, 1032, 975, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 1, 1, 1032, 1, 1032, 1, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 1, 1, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 1034, 1, 1, 1, 1035, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1034, 1032, 1033, 1032, 1032, 1032, 1032, 1032, 1036, 1, 1032, 1032, 981, 1032, 975, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 494, 1, 1032, 1, 1032, 1, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 1, 1, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1, 1034, 1, 1, 1, 1035, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1034, 1, 1, 1, 1, 1, 1, 1, 1036, 1, 1, 1, 981, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 1037, 1, 1034, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1034, 1, 1038, 1, 1, 1, 1039, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1038, 1, 1, 1, 1, 1, 1, 1, 1040, 1, 1, 1, 989, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 503, 1, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1033, 1, 1041, 1041, 1042, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1033, 1041, 1, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1043, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1, 1041, 1041, 1044, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1032, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1043, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1, 1045, 1, 1041, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1041, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1041, 1046, 1, 1033, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1033, 1, 976, 976, 976, 976, 976, 976, 976, 976, 976, 1, 976, 976, 1047, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 1, 1048, 1034, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 1, 1049, 1, 976, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 976, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 976, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1, 1050, 1050, 1051, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1052, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1053, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1, 1054, 1054, 1055, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1056, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1057, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1, 1058, 1, 1054, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1054, 1, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1, 1059, 1, 1, 1, 1060, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1059, 1061, 1062, 1061, 1061, 1061, 1061, 1061, 1063, 1, 1061, 1061, 1, 1061, 1, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 1, 183, 1061, 1, 1061, 1, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 1, 1, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 1064, 1, 1, 1, 1065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1064, 262, 134, 262, 262, 262, 262, 262, 1066, 1, 262, 262, 136, 262, 1067, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 138, 139, 262, 1, 262, 140, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1068, 1, 1, 1, 1069, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1068, 143, 144, 143, 143, 143, 143, 143, 1070, 1, 143, 143, 146, 143, 155, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 148, 139, 143, 1, 143, 149, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1071, 1, 1072, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1072, 1, 1073, 1, 1, 1, 1074, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1073, 168, 169, 168, 168, 168, 168, 168, 1075, 1, 168, 168, 1076, 168, 171, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 590, 172, 168, 1, 168, 1077, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1079, 1, 1078, 1078, 1080, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1079, 1078, 159, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1081, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1, 1082, 1082, 1083, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1084, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1085, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1, 1086, 1, 1082, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1082, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1087, 1, 1082, 1082, 1088, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1087, 1082, 163, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1085, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1, 1089, 1, 1087, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1087, 1, 1090, 1, 1, 1, 1091, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1090, 262, 134, 262, 262, 262, 262, 262, 1092, 1, 262, 262, 136, 262, 1067, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 138, 139, 262, 1, 262, 140, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1093, 1, 1, 1, 1094, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1093, 143, 144, 143, 143, 143, 143, 143, 1095, 1, 143, 143, 146, 143, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 148, 129, 143, 1, 143, 1096, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1097, 1, 1093, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1093, 1, 1098, 1, 1, 1, 1099, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1098, 168, 169, 168, 168, 168, 168, 168, 1100, 1, 168, 168, 1076, 168, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 590, 183, 168, 1, 168, 1101, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1102, 1, 1, 1, 1103, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1102, 1104, 1105, 1104, 1104, 1104, 1104, 1104, 1106, 1, 1104, 1104, 1, 1104, 1107, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1, 1, 1, 1104, 1, 1104, 1, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 969, 1, 1, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1, 1108, 1, 1, 1, 1109, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1108, 1110, 1033, 1110, 1110, 1110, 1110, 1110, 1111, 1, 1110, 1110, 1, 1110, 975, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1, 1, 1110, 1, 1110, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 976, 1, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1112, 1, 1108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1108, 1, 1113, 1, 1, 1, 1114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1113, 1110, 1033, 1110, 1110, 1110, 1110, 1110, 1115, 1, 1110, 1110, 981, 1110, 1116, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 494, 1, 1110, 1, 1110, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1113, 1, 1, 1, 1114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1113, 1, 1, 1, 1, 1, 1, 1, 1115, 1, 1, 1, 981, 1, 1117, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 1118, 1, 1113, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1113, 1, 1119, 1, 1, 1, 1120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1119, 1, 1, 1, 1, 1, 1, 1, 1121, 1, 1, 1, 989, 1, 1122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 503, 1, 1117, 1, 1, 1, 1123, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1117, 1124, 1, 1124, 1124, 1124, 1124, 1124, 1125, 1, 1124, 1124, 1, 1124, 1, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 1, 1, 1124, 1, 1124, 1, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 1, 1, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 1126, 1, 1117, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1117, 1, 1113, 1, 1, 1, 1114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1113, 1124, 1, 1124, 1124, 1124, 1124, 1124, 1115, 1, 1124, 1124, 981, 1124, 1117, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 494, 1, 1124, 1, 1124, 1, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 1, 1, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1, 1122, 1, 1, 1, 1127, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1122, 1128, 1, 1128, 1128, 1128, 1128, 1128, 1129, 1, 1128, 1128, 1, 1128, 1, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1, 1, 1, 1128, 1, 1128, 1, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1, 1, 1, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1, 1117, 1, 1, 1, 1123, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1117, 1110, 1033, 1110, 1110, 1110, 1110, 1110, 1125, 1, 1110, 1110, 1, 1110, 975, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1, 1, 1110, 1, 1110, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1, 1, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1, 1130, 1, 1, 1, 1131, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1130, 1132, 1133, 1132, 1132, 1132, 1132, 1132, 1134, 1, 1132, 1132, 1, 1132, 1030, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1, 1, 1, 1132, 1, 1132, 1, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1031, 1, 1, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1, 1135, 1, 1, 1, 1136, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1135, 133, 1137, 133, 133, 133, 133, 133, 1138, 1, 133, 133, 136, 133, 1067, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 138, 139, 133, 1, 133, 140, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 1, 1, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 1139, 1, 1, 1, 1140, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1139, 284, 285, 284, 284, 284, 284, 284, 1141, 1, 284, 284, 146, 284, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 148, 129, 284, 1, 284, 1096, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1, 1, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 1, 1142, 1, 1139, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1139, 1, 1143, 1, 1, 1, 1144, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1143, 1061, 1062, 1061, 1061, 1061, 1061, 1061, 1145, 1, 1061, 1061, 1076, 1061, 1, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 590, 183, 1061, 1, 1061, 1101, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 1, 1, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147, 1, 1146, 1146, 1148, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1147, 1146, 1052, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1149, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1, 1150, 1150, 1151, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1152, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1153, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1, 1154, 1, 1150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1150, 1, 131, 1, 1, 1, 132, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 131, 262, 134, 262, 262, 262, 262, 262, 135, 1, 262, 262, 136, 262, 137, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 138, 139, 262, 1, 262, 140, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1155, 1, 1, 1, 1156, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1155, 168, 169, 168, 168, 168, 168, 168, 1157, 1, 168, 168, 1076, 168, 279, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 590, 172, 168, 1, 168, 1077, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1158, 1, 1150, 1150, 1159, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1158, 1150, 1056, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1153, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1, 1160, 1, 1158, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1158, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 255, 255, 255, 255, 255, 255, 255, 255, 1161, 1, 255, 255, 1162, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1161, 255, 1163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 258, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 1164, 1, 1161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1161, 1, 1165, 1, 1, 1, 1166, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1165, 143, 144, 143, 143, 143, 143, 143, 1167, 1, 143, 143, 1168, 143, 147, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 683, 139, 143, 1, 143, 1169, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 1170, 1, 1171, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1171, 1, 1172, 1, 1, 1, 1173, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1172, 168, 169, 168, 168, 168, 168, 168, 1174, 1, 168, 168, 1175, 168, 279, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 691, 172, 168, 1, 168, 1176, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 1177, 1, 1, 1, 1178, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1177, 1179, 1180, 1179, 1179, 1179, 1179, 1179, 1181, 1, 1179, 1179, 1182, 1179, 1183, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 1184, 183, 1179, 1, 1179, 1, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 1, 1, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 1185, 1, 1, 1, 1186, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1185, 1187, 1188, 1187, 1187, 1187, 1187, 1187, 1189, 1, 1187, 1187, 245, 1187, 1190, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 120, 1191, 1187, 1, 1187, 1192, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 1, 1, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 1193, 1, 1, 1, 1194, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1193, 1195, 1196, 1195, 1195, 1195, 1195, 1195, 1197, 1, 1195, 1195, 245, 1195, 1198, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 120, 1199, 1195, 1, 1195, 1, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 1, 1, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 1200, 1, 1193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1193, 1, 1201, 1, 1, 1, 1202, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1201, 1203, 1204, 1203, 1203, 1203, 1203, 1203, 1205, 1, 1203, 1203, 1206, 1203, 1207, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1208, 1209, 1203, 1, 1203, 1210, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1, 1, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1211, 1, 1, 1, 1212, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1211, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1215, 1, 1213, 1213, 1216, 1213, 1217, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1218, 1209, 1213, 1, 1213, 1219, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1220, 1, 1221, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1221, 1, 1222, 1, 1, 1, 1223, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1222, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1224, 1, 1213, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1209, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1226, 1, 1213, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1213, 1, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1, 1227, 1227, 1228, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1229, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1230, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1, 1231, 1231, 1232, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1233, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1234, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1, 1235, 1, 1231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1231, 1236, 1, 1, 1, 1237, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1236, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1240, 1, 1238, 1238, 1, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1242, 1238, 1, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1243, 1, 1, 1, 1244, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1243, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1245, 1, 1213, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1209, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1246, 1, 1, 1, 1247, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1246, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1248, 1, 1213, 1213, 1, 1213, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1199, 1213, 1, 1213, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1249, 1, 1246, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1246, 1, 1250, 1, 1, 1, 1251, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1250, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1252, 1, 1238, 1238, 1, 1238, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1253, 1238, 1, 1238, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1254, 1, 1, 1, 1255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1254, 1256, 1257, 1256, 1256, 1256, 1256, 1256, 1258, 1, 1256, 1256, 1259, 1256, 1260, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1, 1256, 1261, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1262, 1, 1, 1, 1263, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1262, 1256, 1257, 1256, 1256, 1256, 1256, 1256, 1264, 1, 1256, 1256, 1265, 1256, 1260, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1, 1256, 1266, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1267, 1, 1262, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1262, 1, 1268, 1, 1, 1, 1269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1268, 1270, 1271, 1270, 1270, 1270, 1270, 1270, 1272, 1, 1270, 1270, 1, 1270, 1273, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1, 1, 1270, 1274, 1270, 1275, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1, 1, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1276, 1, 1, 1, 1277, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1276, 1, 1, 1, 1, 1, 1, 1, 1278, 1, 1, 1, 1, 1, 1279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1281, 1, 1282, 1, 1276, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1276, 1, 1283, 1, 1, 1, 1284, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1283, 1, 1, 1, 1, 1, 1, 1, 1285, 1, 1, 1, 1, 1, 1286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1288, 1, 1279, 1, 1, 1, 1289, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1279, 1290, 1291, 1290, 1290, 1290, 1290, 1290, 1292, 1, 1290, 1290, 1, 1290, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1, 1290, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1293, 1, 1279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1279, 1, 1294, 1, 1, 1, 1295, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1294, 1290, 1, 1290, 1290, 1290, 1290, 1290, 1296, 1, 1290, 1290, 1, 1290, 1279, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1280, 1290, 1297, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1294, 1, 1, 1, 1295, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1294, 1, 1, 1, 1, 1, 1, 1, 1296, 1, 1, 1, 1, 1, 1279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1297, 1, 1298, 1, 1294, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1294, 1, 1299, 1, 1, 1, 1300, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1299, 1, 1, 1, 1, 1, 1, 1, 1301, 1, 1, 1, 1, 1, 1286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1302, 1, 1280, 1, 1, 1, 1303, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1, 1, 1, 1, 1, 1, 1304, 1, 1, 1, 1305, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1306, 1, 1307, 1, 1280, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1287, 1, 1, 1, 1308, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1, 1, 1, 1, 1, 1, 1309, 1, 1, 1, 1310, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1311, 1, 1312, 1, 120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 120, 1, 1313, 1, 1, 1, 1314, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1313, 1315, 1316, 1315, 1315, 1315, 1315, 1315, 1317, 1, 1315, 1315, 1, 1315, 1318, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1, 1, 1, 1315, 1, 1315, 1, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1319, 1, 1, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1, 1320, 1, 1, 1, 1321, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1320, 1322, 1323, 1322, 1322, 1322, 1322, 1322, 1324, 1, 1322, 1322, 1, 1322, 1325, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1, 1, 1322, 1, 1322, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1326, 1, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1327, 1, 1320, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1320, 1, 1328, 1, 1, 1, 1329, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1328, 1322, 1323, 1322, 1322, 1322, 1322, 1322, 1330, 1, 1322, 1322, 1, 1322, 1331, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1, 1, 1322, 1332, 1322, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1328, 1, 1, 1, 1329, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1328, 1, 1, 1, 1, 1, 1, 1, 1330, 1, 1, 1, 1, 1, 1333, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1332, 1, 1334, 1, 1328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1328, 1, 1335, 1, 1, 1, 1336, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1335, 1, 1, 1, 1, 1, 1, 1, 1337, 1, 1, 1, 1, 1, 1338, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1339, 1, 1333, 1, 1, 1, 1340, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1333, 1341, 1, 1341, 1341, 1341, 1341, 1341, 1342, 1, 1341, 1341, 1, 1341, 1, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1, 1, 1341, 1, 1341, 1, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1, 1, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1343, 1, 1333, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1333, 1, 1328, 1, 1, 1, 1329, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1328, 1341, 1, 1341, 1341, 1341, 1341, 1341, 1330, 1, 1341, 1341, 1, 1341, 1333, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1, 1, 1341, 1332, 1341, 1, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1, 1, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1, 1338, 1, 1, 1, 1344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1338, 1345, 1, 1345, 1345, 1345, 1345, 1345, 1346, 1, 1345, 1345, 1, 1345, 1, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1, 1, 1, 1345, 1, 1345, 1, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1, 1, 1, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1323, 1, 1347, 1347, 1348, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1323, 1347, 1, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1349, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1, 1347, 1347, 1350, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1351, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1349, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1, 1352, 1, 1347, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1347, 1, 1353, 1, 1, 1, 1354, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1353, 1351, 1323, 1351, 1351, 1351, 1351, 1351, 1355, 1, 1351, 1351, 1, 1351, 1325, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1, 1, 1351, 1332, 1351, 1, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1, 1, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1353, 1, 1, 1, 1354, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1353, 1, 1, 1, 1, 1, 1, 1, 1355, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1332, 1, 1356, 1, 1353, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1353, 1, 1357, 1, 1, 1, 1358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1357, 1, 1, 1, 1, 1, 1, 1, 1359, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1339, 1, 1351, 1323, 1351, 1351, 1351, 1351, 1351, 1, 1, 1351, 1351, 1, 1351, 1325, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1, 1, 1351, 1, 1351, 1, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1, 1, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1347, 1360, 1, 1323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1323, 1, 1333, 1, 1, 1, 1340, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1333, 1322, 1323, 1322, 1322, 1322, 1322, 1322, 1342, 1, 1322, 1322, 1, 1322, 1325, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1, 1, 1322, 1, 1322, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1, 1, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1, 1361, 1, 1, 1, 1362, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1361, 1363, 1364, 1363, 1363, 1363, 1363, 1363, 1365, 1, 1363, 1363, 1, 1363, 1366, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1, 1, 1, 1363, 1, 1363, 1, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1367, 1, 1, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1, 1326, 1326, 1368, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1, 1369, 1353, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1, 1370, 1, 1326, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1326, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1326, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1, 1371, 1371, 1372, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1373, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1374, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1, 1375, 1375, 1376, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1377, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1378, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1, 1379, 1, 1375, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1375, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1375, 1286, 1, 1, 1, 1380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1286, 1381, 1382, 1381, 1381, 1381, 1381, 1381, 1383, 1, 1381, 1381, 1, 1381, 1, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1, 1, 1381, 1, 1381, 1, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1, 1, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1271, 1, 1384, 1384, 1385, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1271, 1384, 1, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1386, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1, 1384, 1384, 1387, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1388, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1386, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1, 1389, 1, 1384, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1384, 1, 1390, 1, 1, 1, 1391, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1390, 1388, 1271, 1388, 1388, 1388, 1388, 1388, 1392, 1, 1388, 1388, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1274, 1388, 1275, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1393, 1, 1, 1, 1394, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1393, 1, 1, 1, 1, 1, 1, 1, 1395, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1281, 1, 1396, 1, 1393, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1393, 1, 1397, 1, 1, 1, 1398, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1397, 1, 1, 1, 1, 1, 1, 1, 1399, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1288, 1, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1, 1400, 1, 1271, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1271, 1, 1401, 1, 1, 1, 1402, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1401, 1270, 1403, 1270, 1270, 1270, 1270, 1270, 1404, 1, 1270, 1270, 1, 1270, 1388, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1, 1, 1270, 1274, 1270, 1275, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1, 1, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1, 1405, 1, 1, 1, 1406, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1405, 1290, 1291, 1290, 1290, 1290, 1290, 1290, 1407, 1, 1290, 1290, 1, 1290, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1280, 1290, 1281, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1, 1, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1, 1408, 1, 1405, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1405, 1, 1409, 1, 1, 1, 1410, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1409, 1381, 1382, 1381, 1381, 1381, 1381, 1381, 1411, 1, 1381, 1381, 1, 1381, 1, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1, 1, 1381, 1287, 1381, 1288, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1, 1, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1413, 1, 1412, 1412, 1414, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1413, 1412, 1373, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1415, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1, 1416, 1416, 1417, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1418, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1419, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1, 1420, 1, 1416, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1416, 1, 1268, 1, 1, 1, 1269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1268, 1388, 1271, 1388, 1388, 1388, 1388, 1388, 1272, 1, 1388, 1388, 1, 1388, 1273, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1274, 1388, 1275, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1421, 1, 1416, 1416, 1422, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1421, 1416, 1377, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1419, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1, 1423, 1, 1421, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1421, 1, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1425, 1, 1424, 1424, 1426, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1425, 1424, 1427, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1428, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1, 1429, 1429, 1430, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1431, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1432, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1, 1433, 1, 1429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1429, 1, 1434, 1, 1, 1, 1435, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1434, 1388, 1271, 1388, 1388, 1388, 1388, 1388, 1436, 1, 1388, 1388, 1, 1388, 1273, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1274, 1388, 1437, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1438, 1, 1, 1, 1439, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1438, 1, 1, 1, 1, 1, 1, 1, 1440, 1, 1, 1, 1, 1, 1279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1441, 1, 1442, 1, 1438, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1438, 1, 1443, 1, 1, 1, 1444, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1443, 1, 1, 1, 1, 1, 1, 1, 1445, 1, 1, 1, 1, 1, 1286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1446, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1447, 1, 1429, 1429, 1448, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1447, 1429, 1449, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1432, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1, 1450, 1, 1447, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1447, 1, 1451, 1, 1, 1, 1452, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1451, 1, 1, 1, 1, 1, 1, 1, 1453, 1, 1, 1, 1, 1, 1279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1280, 1, 1454, 1, 1455, 1, 1451, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1451, 1, 1456, 1, 1, 1, 1457, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1456, 1, 1, 1, 1, 1, 1, 1, 1458, 1, 1, 1, 1, 1, 1286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1287, 1, 1459, 1, 1460, 1, 1, 1, 1461, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1460, 1462, 1463, 1462, 1462, 1462, 1462, 1462, 1464, 1, 1462, 1462, 1465, 1462, 1466, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1, 1, 1462, 1, 1462, 1467, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1, 1, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1265, 1, 1, 1, 1468, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1265, 1, 1, 1, 1, 1, 1, 1, 1469, 1, 1, 1, 1265, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1266, 1, 1470, 1, 1265, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1265, 1, 1465, 1, 1, 1, 1471, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1465, 1, 1, 1, 1, 1, 1, 1, 1472, 1, 1, 1, 1465, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1467, 1, 1473, 1, 1, 1, 1474, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1473, 1475, 1476, 1475, 1475, 1475, 1475, 1475, 1477, 1, 1475, 1475, 1, 1475, 1478, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1, 1, 1, 1475, 1, 1475, 1, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1479, 1, 1, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1, 1480, 1, 1, 1, 1481, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1480, 1482, 1483, 1482, 1482, 1482, 1482, 1482, 1484, 1, 1482, 1482, 1, 1482, 1485, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1, 1, 1482, 1, 1482, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1486, 1, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1487, 1, 1480, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1480, 1, 1488, 1, 1, 1, 1489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1488, 1482, 1483, 1482, 1482, 1482, 1482, 1482, 1490, 1, 1482, 1482, 1491, 1482, 1492, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1493, 1, 1, 1482, 1, 1482, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1488, 1, 1, 1, 1489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1488, 1, 1, 1, 1, 1, 1, 1, 1490, 1, 1, 1, 1491, 1, 1494, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1493, 1, 1495, 1, 1488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1488, 1, 1496, 1, 1, 1, 1497, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1496, 1, 1, 1, 1, 1, 1, 1, 1498, 1, 1, 1, 1499, 1, 1500, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1501, 1, 1502, 1, 1, 1, 1503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1502, 1, 1, 1, 1, 1, 1, 1, 1504, 1, 1, 1, 1502, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1505, 1, 1, 1, 1, 1, 1266, 1, 1506, 1, 1502, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1502, 1, 1507, 1, 1, 1, 1508, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1507, 1, 1, 1, 1, 1, 1, 1, 1509, 1, 1, 1, 1507, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1510, 1, 1, 1, 1, 1, 1467, 1, 1511, 1, 1, 1, 1512, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1511, 1513, 1514, 1513, 1513, 1513, 1513, 1513, 1515, 1, 1513, 1513, 1, 1513, 1516, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1, 1, 1, 1513, 1, 1513, 1, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1, 1, 1, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1, 1517, 1, 1, 1, 1518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1517, 1256, 1257, 1256, 1256, 1256, 1256, 1256, 1519, 1, 1256, 1256, 1, 1256, 1260, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1, 1256, 1, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1, 1, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1, 1520, 1, 1517, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1517, 1, 1521, 1, 1, 1, 1522, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1521, 1462, 1463, 1462, 1462, 1462, 1462, 1462, 1523, 1, 1462, 1462, 1, 1462, 1466, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1, 1, 1462, 1, 1462, 1, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1, 1, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1, 1388, 1271, 1388, 1388, 1388, 1388, 1388, 1, 1, 1388, 1388, 1, 1388, 1524, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1, 1388, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1, 1, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1, 1494, 1, 1, 1, 1525, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1494, 1526, 1, 1526, 1526, 1526, 1526, 1526, 1527, 1, 1526, 1526, 1, 1526, 1, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1, 1, 1, 1526, 1, 1526, 1, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1, 1, 1, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1, 1528, 1, 1494, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1494, 1, 1488, 1, 1, 1, 1489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1488, 1526, 1, 1526, 1526, 1526, 1526, 1526, 1490, 1, 1526, 1526, 1491, 1526, 1494, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1493, 1, 1, 1526, 1, 1526, 1, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1, 1, 1, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1, 1500, 1, 1, 1, 1529, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1500, 1530, 1, 1530, 1530, 1530, 1530, 1530, 1531, 1, 1530, 1530, 1, 1530, 1, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1, 1, 1, 1530, 1, 1530, 1, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1, 1, 1, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1483, 1, 1532, 1532, 1533, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1483, 1532, 1, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1534, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1, 1532, 1532, 1535, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1536, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1534, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1, 1537, 1, 1532, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1532, 1, 1538, 1, 1, 1, 1539, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1538, 1536, 1483, 1536, 1536, 1536, 1536, 1536, 1540, 1, 1536, 1536, 1491, 1536, 1485, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1493, 1, 1, 1536, 1, 1536, 1, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1, 1, 1, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1, 1538, 1, 1, 1, 1539, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1538, 1, 1, 1, 1, 1, 1, 1, 1540, 1, 1, 1, 1491, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1493, 1, 1541, 1, 1538, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1538, 1, 1542, 1, 1, 1, 1543, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1542, 1, 1, 1, 1, 1, 1, 1, 1544, 1, 1, 1, 1499, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1501, 1, 1536, 1483, 1536, 1536, 1536, 1536, 1536, 1, 1, 1536, 1536, 1, 1536, 1485, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1, 1, 1, 1536, 1, 1536, 1, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1, 1, 1, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1, 1545, 1, 1483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1483, 1, 1494, 1, 1, 1, 1525, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1494, 1482, 1483, 1482, 1482, 1482, 1482, 1482, 1527, 1, 1482, 1482, 1, 1482, 1485, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1, 1, 1482, 1, 1482, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1, 1, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1, 1546, 1, 1, 1, 1547, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1546, 1548, 1549, 1548, 1548, 1548, 1548, 1548, 1550, 1, 1548, 1548, 1, 1548, 1551, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1, 1, 1, 1548, 1, 1548, 1, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1552, 1, 1, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1, 1486, 1486, 1553, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1, 1554, 1538, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1, 1555, 1, 1486, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1486, 1, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1, 1556, 1, 1, 1, 1557, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1556, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1558, 1, 1238, 1238, 1559, 1238, 1560, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1561, 1242, 1238, 1, 1238, 1562, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1563, 1, 1, 1, 1564, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1563, 1565, 1566, 1565, 1565, 1565, 1565, 1565, 1567, 1, 1565, 1565, 1, 1565, 1225, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1209, 1565, 1, 1565, 1225, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1568, 1, 1, 1, 1569, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1568, 1565, 1566, 1565, 1565, 1565, 1565, 1565, 1570, 1, 1565, 1565, 1, 1565, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1199, 1565, 1, 1565, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1571, 1, 1568, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1568, 1, 1572, 1, 1, 1, 1573, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1572, 1565, 1214, 1565, 1565, 1565, 1565, 1565, 1574, 1, 1565, 1565, 1305, 1565, 1217, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1306, 1209, 1565, 1, 1565, 1575, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1572, 1, 1, 1, 1573, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1572, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1574, 1, 1213, 1213, 1305, 1213, 1217, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1306, 1209, 1213, 1, 1213, 1575, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1576, 1, 1577, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1577, 1, 1578, 1, 1, 1, 1579, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1578, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1580, 1, 1238, 1238, 1310, 1238, 1560, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1311, 1242, 1238, 1, 1238, 1581, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1582, 1, 1, 1, 1583, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1582, 1584, 1585, 1584, 1584, 1584, 1584, 1584, 1586, 1, 1584, 1584, 1, 1584, 1587, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1, 1, 1209, 1584, 1, 1584, 1225, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1588, 1, 1, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1, 1589, 1, 1, 1, 1590, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1589, 1591, 1592, 1591, 1591, 1591, 1591, 1591, 1593, 1, 1591, 1591, 1, 1591, 1594, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1, 1199, 1591, 1, 1591, 1, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1595, 1, 1, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1596, 1, 1589, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1589, 1, 1597, 1, 1, 1, 1598, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1597, 1591, 1592, 1591, 1591, 1591, 1591, 1591, 1599, 1, 1591, 1591, 1600, 1591, 1601, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1602, 1209, 1591, 1, 1591, 1225, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1, 1, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1597, 1, 1, 1, 1598, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1597, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1599, 1, 1213, 1213, 1600, 1213, 1603, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1602, 1209, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1604, 1, 1605, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1605, 1, 1606, 1, 1, 1, 1607, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1606, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1608, 1, 1238, 1238, 1609, 1238, 1610, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1611, 1242, 1238, 1, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1612, 1, 1, 1, 1613, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1612, 1614, 1214, 1614, 1614, 1614, 1614, 1614, 1615, 1, 1614, 1614, 1, 1614, 1225, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1, 1209, 1614, 1, 1614, 1225, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1, 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1616, 1, 1, 1, 1617, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1616, 1614, 1214, 1614, 1614, 1614, 1614, 1614, 1618, 1, 1614, 1614, 1, 1614, 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1, 1199, 1614, 1, 1614, 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1, 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1619, 1, 1616, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1616, 1, 1597, 1, 1, 1, 1598, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1597, 1614, 1214, 1614, 1614, 1614, 1614, 1614, 1599, 1, 1614, 1614, 1600, 1614, 1603, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1602, 1209, 1614, 1, 1614, 1225, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1, 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1, 1620, 1, 1, 1, 1621, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1620, 1622, 1239, 1622, 1622, 1622, 1622, 1622, 1623, 1, 1622, 1622, 1, 1622, 1, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1, 1, 1253, 1622, 1, 1622, 1, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1, 1, 1, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1625, 1, 1624, 1624, 1626, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1625, 1624, 1229, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1627, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1, 1628, 1628, 1629, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1630, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1631, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1, 1632, 1, 1628, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1628, 1, 1633, 1, 1, 1, 1634, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1633, 1635, 1592, 1635, 1635, 1635, 1635, 1635, 1636, 1, 1635, 1635, 1600, 1635, 1637, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1602, 1209, 1635, 1, 1635, 1225, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1, 1, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1633, 1, 1, 1, 1634, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1633, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1636, 1, 1213, 1213, 1600, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1602, 1209, 1213, 1, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1638, 1, 1639, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1639, 1, 1640, 1, 1, 1, 1641, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1640, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1642, 1, 1238, 1238, 1609, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1611, 1242, 1238, 1, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1243, 1, 1, 1, 1244, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1243, 1635, 1592, 1635, 1635, 1635, 1635, 1635, 1245, 1, 1635, 1635, 1, 1635, 1637, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1, 1209, 1635, 1, 1635, 1225, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1, 1, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1643, 1, 1628, 1628, 1644, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1643, 1628, 1233, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1631, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1, 1645, 1, 1643, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1643, 1, 1612, 1, 1, 1, 1613, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1612, 1591, 1592, 1591, 1591, 1591, 1591, 1591, 1615, 1, 1591, 1591, 1, 1591, 1637, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1, 1209, 1591, 1, 1591, 1225, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1, 1, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1, 1646, 1, 1, 1, 1647, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1646, 1648, 1649, 1648, 1648, 1648, 1648, 1648, 1650, 1, 1648, 1648, 1, 1648, 1651, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1, 1, 1253, 1648, 1, 1648, 1, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1652, 1, 1, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1, 1653, 1654, 1653, 1653, 1653, 1653, 1653, 1, 1, 1653, 1653, 1, 1653, 1594, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1, 1, 1653, 1, 1653, 1, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1, 1, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1655, 1, 1, 1, 1656, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1655, 1653, 1654, 1653, 1653, 1653, 1653, 1653, 1657, 1, 1653, 1653, 1600, 1653, 1594, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1602, 1, 1653, 1, 1653, 1, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1, 1, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1, 1655, 1, 1, 1, 1656, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1655, 1, 1, 1, 1, 1, 1, 1, 1657, 1, 1, 1, 1600, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1602, 1, 1658, 1, 1655, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1655, 1, 1659, 1, 1, 1, 1660, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1659, 1, 1, 1, 1, 1, 1, 1, 1661, 1, 1, 1, 1609, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1611, 1, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1654, 1, 1662, 1662, 1663, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1654, 1662, 1, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1664, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1, 1662, 1662, 1665, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1653, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1664, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1, 1666, 1, 1662, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1662, 1, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1, 1667, 1, 1654, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1654, 1, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1, 1595, 1595, 1668, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1, 1669, 1655, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1, 1670, 1, 1595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1595, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1, 1671, 1671, 1672, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1673, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1674, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1, 1675, 1675, 1676, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1677, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1678, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1, 1679, 1, 1675, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1675, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1675, 1680, 1, 1, 1, 1681, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1680, 1682, 1683, 1682, 1682, 1682, 1682, 1682, 1684, 1, 1682, 1682, 1, 1682, 1, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1, 1253, 1682, 1, 1682, 1, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1, 1, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1686, 1, 1685, 1685, 1687, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1686, 1685, 1229, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1688, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1, 1689, 1689, 1690, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1691, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1692, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1, 1693, 1, 1689, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1689, 1, 1694, 1, 1, 1, 1695, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1694, 1696, 1204, 1696, 1696, 1696, 1696, 1696, 1697, 1, 1696, 1696, 1206, 1696, 1698, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1208, 1209, 1696, 1, 1696, 1210, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1699, 1, 1, 1, 1700, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1699, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1701, 1, 1213, 1213, 1216, 1213, 1225, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1218, 1209, 1213, 1, 1213, 1219, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1702, 1, 1703, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1703, 1, 1704, 1, 1, 1, 1705, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1704, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1706, 1, 1238, 1238, 1559, 1238, 1241, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1561, 1242, 1238, 1, 1238, 1562, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1707, 1, 1, 1, 1708, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1707, 1696, 1204, 1696, 1696, 1696, 1696, 1696, 1709, 1, 1696, 1696, 1206, 1696, 1698, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1208, 1209, 1696, 1, 1696, 1210, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1710, 1, 1, 1, 1711, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1710, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1712, 1, 1213, 1213, 1216, 1213, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1218, 1199, 1213, 1, 1213, 1713, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1714, 1, 1710, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1710, 1, 1715, 1, 1, 1, 1716, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1715, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1717, 1, 1238, 1238, 1559, 1238, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1561, 1253, 1238, 1, 1238, 1718, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1719, 1, 1, 1, 1720, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1719, 1721, 1722, 1721, 1721, 1721, 1721, 1721, 1723, 1, 1721, 1721, 1, 1721, 1724, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1, 1, 1, 1721, 1, 1721, 1, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1588, 1, 1, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1, 1725, 1, 1, 1, 1726, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1725, 1727, 1654, 1727, 1727, 1727, 1727, 1727, 1728, 1, 1727, 1727, 1, 1727, 1594, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1, 1, 1727, 1, 1727, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1595, 1, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1729, 1, 1725, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1725, 1, 1730, 1, 1, 1, 1731, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1730, 1727, 1654, 1727, 1727, 1727, 1727, 1727, 1732, 1, 1727, 1727, 1600, 1727, 1733, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1602, 1, 1727, 1, 1727, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1730, 1, 1, 1, 1731, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1730, 1, 1, 1, 1, 1, 1, 1, 1732, 1, 1, 1, 1600, 1, 1734, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1602, 1, 1735, 1, 1730, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1730, 1, 1736, 1, 1, 1, 1737, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1736, 1, 1, 1, 1, 1, 1, 1, 1738, 1, 1, 1, 1609, 1, 1739, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1611, 1, 1734, 1, 1, 1, 1740, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1734, 1741, 1, 1741, 1741, 1741, 1741, 1741, 1742, 1, 1741, 1741, 1, 1741, 1, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1, 1, 1741, 1, 1741, 1, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1, 1, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1743, 1, 1734, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1734, 1, 1730, 1, 1, 1, 1731, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1730, 1741, 1, 1741, 1741, 1741, 1741, 1741, 1732, 1, 1741, 1741, 1600, 1741, 1734, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1602, 1, 1741, 1, 1741, 1, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1, 1, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1, 1739, 1, 1, 1, 1744, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1739, 1745, 1, 1745, 1745, 1745, 1745, 1745, 1746, 1, 1745, 1745, 1, 1745, 1, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1, 1, 1, 1745, 1, 1745, 1, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1, 1, 1, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1, 1734, 1, 1, 1, 1740, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1734, 1727, 1654, 1727, 1727, 1727, 1727, 1727, 1742, 1, 1727, 1727, 1, 1727, 1594, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1, 1, 1727, 1, 1727, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1, 1, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1, 1747, 1, 1, 1, 1748, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1747, 1749, 1750, 1749, 1749, 1749, 1749, 1749, 1751, 1, 1749, 1749, 1, 1749, 1651, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1, 1, 1, 1749, 1, 1749, 1, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1652, 1, 1, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1752, 1, 1689, 1689, 1753, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1752, 1689, 1233, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1692, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1, 1754, 1, 1752, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1752, 1, 1755, 1, 1, 1, 1756, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1755, 1203, 1757, 1203, 1203, 1203, 1203, 1203, 1758, 1, 1203, 1203, 1206, 1203, 1698, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1208, 1209, 1203, 1, 1203, 1210, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1, 1, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1, 1759, 1, 1, 1, 1760, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1759, 1565, 1566, 1565, 1565, 1565, 1565, 1565, 1761, 1, 1565, 1565, 1216, 1565, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1218, 1199, 1565, 1, 1565, 1713, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1, 1, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1, 1762, 1, 1759, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1759, 1, 1763, 1, 1, 1, 1764, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1763, 1682, 1683, 1682, 1682, 1682, 1682, 1682, 1765, 1, 1682, 1682, 1559, 1682, 1, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1561, 1253, 1682, 1, 1682, 1718, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1, 1, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767, 1, 1766, 1766, 1768, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767, 1766, 1673, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1769, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1, 1770, 1770, 1771, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1772, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1773, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1, 1774, 1, 1770, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1770, 1, 1201, 1, 1, 1, 1202, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1201, 1696, 1204, 1696, 1696, 1696, 1696, 1696, 1205, 1, 1696, 1696, 1206, 1696, 1207, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1208, 1209, 1696, 1, 1696, 1210, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1775, 1, 1770, 1770, 1776, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1775, 1770, 1677, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1773, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1, 1777, 1, 1775, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1775, 1, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, 1, 1778, 1778, 1780, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, 1778, 1781, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1782, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1, 1783, 1783, 1784, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1786, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1, 1787, 1, 1783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1783, 1, 1788, 1, 1, 1, 1789, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1788, 1696, 1204, 1696, 1696, 1696, 1696, 1696, 1790, 1, 1696, 1696, 1791, 1696, 1207, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1792, 1209, 1696, 1, 1696, 1793, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1794, 1, 1, 1, 1795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1794, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1796, 1, 1213, 1213, 1797, 1213, 1217, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1798, 1209, 1213, 1, 1213, 1799, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1800, 1, 1801, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1801, 1, 1802, 1, 1, 1, 1803, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1802, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1804, 1, 1238, 1238, 1805, 1238, 1560, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1806, 1242, 1238, 1, 1238, 1807, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1808, 1, 1783, 1783, 1809, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1808, 1783, 1810, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1786, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1, 1811, 1, 1808, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1808, 1, 1812, 1, 1, 1, 1813, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1812, 1213, 1214, 1213, 1213, 1213, 1213, 1213, 1814, 1, 1213, 1213, 1815, 1213, 1217, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1816, 1209, 1213, 1, 1213, 1817, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1, 1, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1, 1818, 1, 1819, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1819, 1, 1820, 1, 1, 1, 1821, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1820, 1238, 1239, 1238, 1238, 1238, 1238, 1238, 1822, 1, 1238, 1238, 1823, 1238, 1560, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1824, 1242, 1238, 1, 1238, 1825, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1, 1, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1, 1826, 1, 1, 1, 1827, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1826, 1828, 1829, 1828, 1828, 1828, 1828, 1828, 1830, 1, 1828, 1828, 1182, 1828, 1831, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 1184, 1253, 1828, 1, 1828, 1, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 1, 1, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 1832, 1833, 1832, 1832, 1832, 1832, 1832, 1, 1, 1832, 1832, 1, 1832, 1834, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1, 1, 1832, 1, 1832, 1, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1, 1, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1835, 1, 1, 1, 1836, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1835, 1832, 1833, 1832, 1832, 1832, 1832, 1832, 1837, 1, 1832, 1832, 1206, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1208, 1, 1832, 1, 1832, 1838, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1, 1, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1, 1839, 1, 1, 1, 1840, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1839, 1, 1, 1, 1, 1, 1, 1, 1841, 1, 1, 1, 1216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1218, 1, 1, 1, 1, 1713, 1, 1842, 1, 1839, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1839, 1, 1843, 1, 1, 1, 1844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1843, 1, 1, 1, 1, 1, 1, 1, 1845, 1, 1, 1, 1559, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1561, 1, 1, 1, 1, 1718, 1, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1833, 1, 1846, 1846, 1847, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1833, 1846, 1, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1848, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1, 1846, 1846, 1849, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1832, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1848, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1, 1850, 1, 1846, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1846, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1846, 1851, 1, 1833, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1833, 1, 1243, 1, 1, 1, 1244, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1243, 1696, 1204, 1696, 1696, 1696, 1696, 1696, 1245, 1, 1696, 1696, 1, 1696, 1852, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1209, 1696, 1, 1696, 1225, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1, 1, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1, 1853, 1854, 1853, 1853, 1853, 1853, 1853, 1, 1, 1853, 1853, 1, 1853, 1855, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 1, 1, 1853, 1, 1853, 1, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 1, 1, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 1856, 1, 1, 1, 1857, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1856, 1853, 1854, 1853, 1853, 1853, 1853, 1853, 1858, 1, 1853, 1853, 136, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 138, 1, 1853, 1, 1853, 1859, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 1, 1, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1, 1860, 1, 1, 1, 1861, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1860, 1, 1, 1, 1, 1, 1, 1, 1862, 1, 1, 1, 146, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 148, 1, 1, 1, 1, 1096, 1, 1863, 1, 1860, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1860, 1, 1864, 1, 1, 1, 1865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1864, 1, 1, 1, 1, 1, 1, 1, 1866, 1, 1, 1, 1076, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 1, 1, 1, 1, 1101, 1, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1854, 1, 1867, 1867, 1868, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1854, 1867, 1, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1869, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1, 1867, 1867, 1870, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1853, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1869, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1, 1871, 1, 1867, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1867, 1, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1, 1872, 1, 1854, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1854, 1, 173, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 173, 262, 134, 262, 262, 262, 262, 262, 175, 1, 262, 262, 1, 262, 1873, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 139, 262, 1, 262, 155, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1, 1, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1, 1874, 1, 1, 1, 1875, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1874, 1876, 1877, 1876, 1876, 1876, 1876, 1876, 1878, 1, 1876, 1876, 1, 1876, 1879, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1, 1, 1, 1876, 1, 1876, 1, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1880, 1, 1, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1, 1881, 1, 1, 1, 1882, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1881, 1883, 1884, 1883, 1883, 1883, 1883, 1883, 1885, 1, 1883, 1883, 1, 1883, 1886, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1, 1, 1883, 1, 1883, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1887, 1, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1888, 1, 1881, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1881, 1, 1889, 1, 1, 1, 1890, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1889, 1883, 1884, 1883, 1883, 1883, 1883, 1883, 1891, 1, 1883, 1883, 1, 1883, 1892, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1, 1, 1883, 1893, 1883, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1889, 1, 1, 1, 1890, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1889, 1, 1, 1, 1, 1, 1, 1, 1891, 1, 1, 1, 1, 1, 1894, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1893, 1, 1895, 1, 1889, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1889, 1, 1896, 1, 1, 1, 1897, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1896, 1, 1, 1, 1, 1, 1, 1, 1898, 1, 1, 1, 1, 1, 1899, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1900, 1, 1894, 1, 1, 1, 1901, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1894, 1902, 1, 1902, 1902, 1902, 1902, 1902, 1903, 1, 1902, 1902, 1, 1902, 1, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1, 1, 1902, 1, 1902, 1, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1, 1, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1904, 1, 1894, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1894, 1, 1889, 1, 1, 1, 1890, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1889, 1902, 1, 1902, 1902, 1902, 1902, 1902, 1891, 1, 1902, 1902, 1, 1902, 1894, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1, 1, 1902, 1893, 1902, 1, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1, 1, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1, 1899, 1, 1, 1, 1905, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1899, 1906, 1, 1906, 1906, 1906, 1906, 1906, 1907, 1, 1906, 1906, 1, 1906, 1, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1, 1, 1, 1906, 1, 1906, 1, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1, 1, 1, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1884, 1, 1908, 1908, 1909, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1884, 1908, 1, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1910, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1, 1908, 1908, 1911, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1912, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1910, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1, 1913, 1, 1908, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1908, 1, 1914, 1, 1, 1, 1915, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1914, 1912, 1884, 1912, 1912, 1912, 1912, 1912, 1916, 1, 1912, 1912, 1, 1912, 1886, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1, 1, 1912, 1893, 1912, 1, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1, 1, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1914, 1, 1, 1, 1915, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1914, 1, 1, 1, 1, 1, 1, 1, 1916, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1893, 1, 1917, 1, 1914, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1914, 1, 1918, 1, 1, 1, 1919, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1918, 1, 1, 1, 1, 1, 1, 1, 1920, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1900, 1, 1912, 1884, 1912, 1912, 1912, 1912, 1912, 1, 1, 1912, 1912, 1, 1912, 1886, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1, 1, 1912, 1, 1912, 1, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1, 1, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1908, 1921, 1, 1884, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1884, 1, 1894, 1, 1, 1, 1901, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1894, 1883, 1884, 1883, 1883, 1883, 1883, 1883, 1903, 1, 1883, 1883, 1, 1883, 1886, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1, 1, 1883, 1, 1883, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1, 1, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1, 1922, 1, 1, 1, 1923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1922, 1924, 1925, 1924, 1924, 1924, 1924, 1924, 1926, 1, 1924, 1924, 1, 1924, 1927, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1, 1, 1, 1924, 1, 1924, 1, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1928, 1, 1, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1, 1887, 1887, 1929, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1, 1930, 1914, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1, 1931, 1, 1887, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1887, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1887, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1, 1932, 1932, 1933, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1934, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1935, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1, 1936, 1936, 1937, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1938, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1939, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1, 1940, 1, 1936, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1936, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1936, 216, 1, 1, 1, 1941, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 216, 1942, 1943, 1942, 1942, 1942, 1942, 1942, 1944, 1, 1942, 1942, 1, 1942, 1, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1, 1, 1942, 1, 1942, 1, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1, 1, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 201, 1, 1945, 1945, 1946, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 201, 1945, 1, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1947, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1, 1945, 1945, 1948, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1949, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1947, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1, 1950, 1, 1945, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1945, 1, 1951, 1, 1, 1, 1952, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1951, 1949, 201, 1949, 1949, 1949, 1949, 1949, 1953, 1, 1949, 1949, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 204, 1949, 205, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1954, 1, 1, 1, 1955, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1954, 1, 1, 1, 1, 1, 1, 1, 1956, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 211, 1, 1957, 1, 1954, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1954, 1, 1958, 1, 1, 1, 1959, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1958, 1, 1, 1, 1, 1, 1, 1, 1960, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 218, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1945, 1961, 1, 201, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 201, 1, 1962, 1, 1, 1, 1963, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1962, 200, 1964, 200, 200, 200, 200, 200, 1965, 1, 200, 200, 1, 200, 1949, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 1, 1, 200, 204, 200, 205, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 1, 1, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 1, 1966, 1, 1, 1, 1967, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1966, 220, 221, 220, 220, 220, 220, 220, 1968, 1, 220, 220, 1, 220, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 210, 220, 211, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1969, 1, 1966, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1966, 1, 1970, 1, 1, 1, 1971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1970, 1942, 1943, 1942, 1942, 1942, 1942, 1942, 1972, 1, 1942, 1942, 1, 1942, 1, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1, 1, 1942, 217, 1942, 218, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1, 1, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1974, 1, 1973, 1973, 1975, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1974, 1973, 1934, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1976, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1, 1977, 1977, 1978, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1979, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1980, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1, 1981, 1, 1977, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1977, 1, 198, 1, 1, 1, 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 198, 1949, 201, 1949, 1949, 1949, 1949, 1949, 202, 1, 1949, 1949, 1, 1949, 203, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 204, 1949, 205, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1982, 1, 1977, 1977, 1983, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1982, 1977, 1938, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1980, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1, 1984, 1, 1982, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1982, 1, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1986, 1, 1985, 1985, 1987, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1986, 1985, 1988, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1989, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1, 1990, 1990, 1991, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1992, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1993, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1, 1994, 1, 1990, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1990, 1, 1995, 1, 1, 1, 1996, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1995, 1949, 201, 1949, 1949, 1949, 1949, 1949, 1997, 1, 1949, 1949, 1, 1949, 203, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 204, 1949, 1998, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1999, 1, 1, 1, 2000, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1999, 1, 1, 1, 1, 1, 1, 1, 2001, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 2002, 1, 2003, 1, 1999, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1999, 1, 2004, 1, 1, 1, 2005, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2004, 1, 1, 1, 1, 1, 1, 1, 2006, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 2007, 1, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 2008, 1, 1990, 1990, 2009, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 2008, 1990, 2010, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1993, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1, 2011, 1, 2008, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2008, 1, 2012, 1, 1, 1, 2013, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2012, 1, 1, 1, 1, 1, 1, 1, 2014, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210, 1, 2015, 1, 2016, 1, 2012, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2012, 1, 2017, 1, 1, 1, 2018, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2017, 1, 1, 1, 1, 1, 1, 1, 2019, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 1, 2020, 1, 2021, 1, 1, 1, 2022, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2021, 2023, 2024, 2023, 2023, 2023, 2023, 2023, 2025, 1, 2023, 2023, 2026, 2023, 2027, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 1, 1, 2023, 1, 2023, 2028, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 1, 1, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 195, 1, 1, 1, 2029, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 195, 1, 1, 1, 1, 1, 1, 1, 2030, 1, 1, 1, 195, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 2031, 1, 195, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 195, 1, 2026, 1, 1, 1, 2032, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2026, 1, 1, 1, 1, 1, 1, 1, 2033, 1, 1, 1, 2026, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2028, 1, 2034, 1, 1, 1, 2035, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2034, 2036, 2037, 2036, 2036, 2036, 2036, 2036, 2038, 1, 2036, 2036, 1, 2036, 2039, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 1, 1, 1, 2036, 1, 2036, 1, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2040, 1, 1, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 1, 2041, 1, 1, 1, 2042, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2041, 2043, 2044, 2043, 2043, 2043, 2043, 2043, 2045, 1, 2043, 2043, 1, 2043, 2046, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 1, 1, 2043, 1, 2043, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2047, 1, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 2048, 1, 2041, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2041, 1, 2049, 1, 1, 1, 2050, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2049, 2043, 2044, 2043, 2043, 2043, 2043, 2043, 2051, 1, 2043, 2043, 2052, 2043, 2053, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2054, 1, 1, 2043, 1, 2043, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 1, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 2049, 1, 1, 1, 2050, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2049, 1, 1, 1, 1, 1, 1, 1, 2051, 1, 1, 1, 2052, 1, 2055, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2054, 1, 2056, 1, 2049, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2049, 1, 2057, 1, 1, 1, 2058, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2057, 1, 1, 1, 1, 1, 1, 1, 2059, 1, 1, 1, 2060, 1, 2061, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2062, 1, 2063, 1, 1, 1, 2064, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2063, 1, 1, 1, 1, 1, 1, 1, 2065, 1, 1, 1, 2063, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2066, 1, 1, 1, 1, 1, 196, 1, 2067, 1, 2063, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2063, 1, 2068, 1, 1, 1, 2069, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2068, 1, 1, 1, 1, 1, 1, 1, 2070, 1, 1, 1, 2068, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2071, 1, 1, 1, 1, 1, 2028, 1, 2072, 1, 1, 1, 2073, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2072, 2074, 2075, 2074, 2074, 2074, 2074, 2074, 2076, 1, 2074, 2074, 1, 2074, 2077, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 1, 1, 1, 2074, 1, 2074, 1, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 1, 1, 1, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 1, 2078, 1, 1, 1, 2079, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2078, 186, 187, 186, 186, 186, 186, 186, 2080, 1, 186, 186, 1, 186, 190, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 1, 186, 1, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 1, 1, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 1, 2081, 1, 2078, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2078, 1, 2082, 1, 1, 1, 2083, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2082, 2023, 2024, 2023, 2023, 2023, 2023, 2023, 2084, 1, 2023, 2023, 1, 2023, 2027, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 1, 1, 2023, 1, 2023, 1, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 1, 1, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 1, 1949, 201, 1949, 1949, 1949, 1949, 1949, 1, 1, 1949, 1949, 1, 1949, 2085, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 1, 1949, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 1, 1, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1, 2055, 1, 1, 1, 2086, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2055, 2087, 1, 2087, 2087, 2087, 2087, 2087, 2088, 1, 2087, 2087, 1, 2087, 1, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 1, 1, 1, 2087, 1, 2087, 1, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 1, 1, 1, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 1, 2089, 1, 2055, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2055, 1, 2049, 1, 1, 1, 2050, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2049, 2087, 1, 2087, 2087, 2087, 2087, 2087, 2051, 1, 2087, 2087, 2052, 2087, 2055, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2054, 1, 1, 2087, 1, 2087, 1, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 1, 1, 1, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 1, 2061, 1, 1, 1, 2090, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2061, 2091, 1, 2091, 2091, 2091, 2091, 2091, 2092, 1, 2091, 2091, 1, 2091, 1, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 1, 1, 1, 2091, 1, 2091, 1, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 1, 1, 1, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 1, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2044, 1, 2093, 2093, 2094, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2044, 2093, 1, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2095, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 1, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 1, 2093, 2093, 2096, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2097, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2095, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 1, 2098, 1, 2093, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2093, 1, 2099, 1, 1, 1, 2100, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2099, 2097, 2044, 2097, 2097, 2097, 2097, 2097, 2101, 1, 2097, 2097, 2052, 2097, 2046, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2054, 1, 1, 2097, 1, 2097, 1, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1, 1, 1, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1, 2099, 1, 1, 1, 2100, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2099, 1, 1, 1, 1, 1, 1, 1, 2101, 1, 1, 1, 2052, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2054, 1, 2102, 1, 2099, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2099, 1, 2103, 1, 1, 1, 2104, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2103, 1, 1, 1, 1, 1, 1, 1, 2105, 1, 1, 1, 2060, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2062, 1, 2097, 2044, 2097, 2097, 2097, 2097, 2097, 1, 1, 2097, 2097, 1, 2097, 2046, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1, 1, 1, 2097, 1, 2097, 1, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1, 1, 1, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2093, 2106, 1, 2044, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2044, 1, 2055, 1, 1, 1, 2086, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2055, 2043, 2044, 2043, 2043, 2043, 2043, 2043, 2088, 1, 2043, 2043, 1, 2043, 2046, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 1, 1, 2043, 1, 2043, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 1, 1, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 1, 2107, 1, 1, 1, 2108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2107, 2109, 2110, 2109, 2109, 2109, 2109, 2109, 2111, 1, 2109, 2109, 1, 2109, 2112, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 1, 1, 1, 2109, 1, 2109, 1, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2113, 1, 1, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 1, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 1, 2047, 2047, 2114, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 1, 2115, 2099, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 1, 2116, 1, 2047, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2047, 1, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 1, 2117, 1, 1, 1, 2118, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2117, 1179, 1180, 1179, 1179, 1179, 1179, 1179, 2119, 1, 1179, 1179, 2120, 1179, 1183, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 1184, 183, 1179, 1, 1179, 1, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 1, 1, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1, 2121, 1, 1, 1, 2122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2121, 1187, 1188, 1187, 1187, 1187, 1187, 1187, 2123, 1, 1187, 1187, 118, 1187, 1190, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 120, 1191, 1187, 1, 1187, 1192, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 1, 1, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1, 2124, 1, 1, 1, 2125, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2124, 1195, 1196, 1195, 1195, 1195, 1195, 1195, 2126, 1, 1195, 1195, 118, 1195, 1198, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 120, 1199, 1195, 1, 1195, 1, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 1, 1, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1, 2127, 1, 2124, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2124, 1, 2128, 1, 1, 1, 2129, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2128, 1828, 1829, 1828, 1828, 1828, 1828, 1828, 2130, 1, 1828, 1828, 2120, 1828, 1831, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 1184, 1253, 1828, 1, 1828, 1, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 1, 1, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1, 2131, 1, 1, 1, 2132, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2131, 2133, 2134, 2133, 2133, 2133, 2133, 2133, 2135, 1, 2133, 2133, 1, 2133, 2136, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 18, 1, 19, 2133, 1, 2133, 17, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2137, 1, 1, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 1, 2138, 1, 1, 1, 2139, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2138, 2140, 2141, 2140, 2140, 2140, 2140, 2140, 2142, 1, 2140, 2140, 1, 2140, 2143, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 1, 8, 2140, 1, 2140, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2144, 1, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 2145, 1, 2138, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2138, 1, 2146, 1, 2147, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2147, 1, 2148, 1, 1, 1, 2149, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2148, 2150, 15, 2150, 2150, 2150, 2150, 2150, 2151, 1, 2150, 2150, 1, 2150, 17, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 18, 1, 19, 2150, 1, 2150, 17, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 1, 1, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 2152, 1, 1, 1, 2153, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2152, 2150, 15, 2150, 2150, 2150, 2150, 2150, 2154, 1, 2150, 2150, 1, 2150, 1, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 1, 8, 2150, 1, 2150, 1, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 1, 1, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 2155, 1, 2152, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2152, 1, 2156, 1, 1, 1, 2157, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2156, 2158, 33, 2158, 2158, 2158, 2158, 2158, 2159, 1, 2158, 2158, 1, 2158, 1, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1, 1, 48, 2158, 1, 2158, 1, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1, 1, 1, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2161, 1, 2160, 2160, 2162, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2161, 2160, 23, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2163, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 1, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 1, 2164, 2164, 2165, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2166, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2167, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 1, 2168, 1, 2164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2164, 1, 2169, 1, 2170, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2170, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 2171, 2141, 2171, 2171, 2171, 2171, 2171, 40, 1, 2171, 2171, 1, 2171, 2172, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 18, 1, 19, 2171, 1, 2171, 17, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 1, 1, 1, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2173, 1, 2164, 2164, 2174, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2173, 2164, 27, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2167, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 1, 2175, 1, 2173, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2173, 1, 2148, 1, 1, 1, 2149, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2148, 2140, 2141, 2140, 2140, 2140, 2140, 2140, 2151, 1, 2140, 2140, 1, 2140, 2172, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 18, 1, 19, 2140, 1, 2140, 17, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 1, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 2176, 1, 1, 1, 2177, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2176, 2178, 2179, 2178, 2178, 2178, 2178, 2178, 2180, 1, 2178, 2178, 1, 2178, 2181, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 1, 1, 48, 2178, 1, 2178, 1, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2182, 1, 1, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 1, 2183, 2184, 2183, 2183, 2183, 2183, 2183, 1, 1, 2183, 2183, 1, 2183, 2143, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 1, 1, 2183, 1, 2183, 1, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 1, 1, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 2185, 1, 2186, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2186, 1, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2184, 1, 2187, 2187, 2188, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2184, 2187, 1, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2189, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 1, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 1, 2187, 2187, 2190, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2183, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2189, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 1, 2191, 1, 2187, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2187, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2187, 2192, 1, 2184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2184, 1, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 1, 2144, 2144, 2193, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 1, 2194, 2186, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 1, 2195, 1, 2144, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2144, 1, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 1, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 1, 2196, 2196, 2197, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2198, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2199, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 1, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 1, 2200, 2200, 2201, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2202, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2203, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 1, 2204, 1, 2200, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2200, 1, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 1, 2205, 1, 1, 1, 2206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2205, 2207, 2208, 2207, 2207, 2207, 2207, 2207, 2209, 1, 2207, 2207, 1, 2207, 1, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 1, 48, 2207, 1, 2207, 1, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 1, 1, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2211, 1, 2210, 2210, 2212, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2211, 2210, 23, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2213, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 1, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 1, 2214, 2214, 2215, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2216, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2217, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 1, 2218, 1, 2214, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2214, 1, 2219, 1, 2220, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2220, 1, 2221, 1, 2222, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2222, 1, 2223, 1, 1, 1, 2224, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2223, 2225, 2226, 2225, 2225, 2225, 2225, 2225, 2227, 1, 2225, 2225, 1, 2225, 2228, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 1, 1, 1, 2225, 1, 2225, 1, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2137, 1, 1, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 1, 2229, 1, 1, 1, 2230, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2229, 2231, 2184, 2231, 2231, 2231, 2231, 2231, 2232, 1, 2231, 2231, 1, 2231, 2143, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 1, 1, 2231, 1, 2231, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2144, 1, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 2233, 1, 2229, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2229, 1, 2234, 1, 2235, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2235, 1, 2236, 1, 1, 1, 2237, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2236, 2238, 1, 2238, 2238, 2238, 2238, 2238, 2239, 1, 2238, 2238, 1, 2238, 1, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 1, 1, 2238, 1, 2238, 1, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 1, 1, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 2240, 1, 2236, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2236, 1, 2241, 1, 1, 1, 2242, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2241, 2243, 1, 2243, 2243, 2243, 2243, 2243, 2244, 1, 2243, 2243, 1, 2243, 1, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 1, 1, 1, 2243, 1, 2243, 1, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 1, 1, 1, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 1, 2236, 1, 1, 1, 2237, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2236, 2231, 2184, 2231, 2231, 2231, 2231, 2231, 2239, 1, 2231, 2231, 1, 2231, 2143, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 1, 1, 2231, 1, 2231, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 1, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 2245, 1, 1, 1, 2246, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2245, 2247, 2248, 2247, 2247, 2247, 2247, 2247, 2249, 1, 2247, 2247, 1, 2247, 2181, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 1, 1, 1, 2247, 1, 2247, 1, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2182, 1, 1, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2250, 1, 2214, 2214, 2251, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2250, 2214, 27, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2217, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 1, 2252, 1, 2250, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2250, 1, 2253, 1, 2254, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2254, 1, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2256, 1, 2255, 2255, 2257, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2256, 2255, 2198, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2258, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 1, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 1, 2259, 2259, 2260, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2261, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2262, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 1, 2263, 1, 2259, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2259, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2264, 1, 2259, 2259, 2265, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2264, 2259, 2202, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2262, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 1, 2266, 1, 2264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2264, 1, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2268, 1, 2267, 2267, 2269, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2268, 2267, 2270, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2271, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 1, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 1, 2272, 2272, 2273, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2274, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2275, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 1, 2276, 1, 2272, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2272, 1, 2277, 1, 2278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2279, 1, 2272, 2272, 2280, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2279, 2272, 2281, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2275, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 1, 2282, 1, 2279, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2279, 1, 2283, 1, 2284, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2284, 1, 2285, 1, 1, 1, 2286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2285, 2287, 2288, 2287, 2287, 2287, 2287, 2287, 2289, 1, 2287, 2287, 1, 2287, 2290, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 1, 1, 48, 2287, 1, 2287, 1, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 1, 1, 1, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 1, 2291, 1, 1, 1, 2292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2291, 2293, 2294, 2293, 2293, 2293, 2293, 2293, 2295, 1, 2293, 2293, 1, 2293, 2296, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 1, 1, 8, 2293, 1, 2293, 1, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 1, 1, 1, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 1, 2297, 1, 2291, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2291, 1, 2298, 2299, 2298, 2298, 2298, 2298, 2298, 1, 1, 2298, 2298, 1, 2298, 2300, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 1, 1, 2298, 1, 2298, 1, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 1, 1, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 2301, 1, 2302, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2302, 1, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2299, 1, 2303, 2303, 2304, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2299, 2303, 1, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2305, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 1, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 1, 2303, 2303, 2306, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2298, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2305, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 1, 2307, 1, 2303, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2303, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2303, 2308, 1, 2299, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2299, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 2309, 2310, 2309, 2309, 2309, 2309, 2309, 40, 1, 2309, 2309, 1, 2309, 2311, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 18, 1, 19, 2309, 1, 2309, 17, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 1, 1, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 2312, 1, 1, 1, 2313, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2312, 2314, 2315, 2314, 2314, 2314, 2314, 2314, 2316, 1, 2314, 2314, 1, 2314, 2317, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 1, 1, 1, 2314, 1, 2314, 1, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2318, 1, 1, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 1, 2319, 1, 1, 1, 2320, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2319, 2321, 2322, 2321, 2321, 2321, 2321, 2321, 2323, 1, 2321, 2321, 1, 2321, 2324, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 1, 1, 2321, 1, 2321, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2325, 1, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 2326, 1, 2319, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2319, 1, 2327, 1, 1, 1, 2328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2327, 2321, 2322, 2321, 2321, 2321, 2321, 2321, 2329, 1, 2321, 2321, 1, 2321, 2330, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 1, 1, 2321, 2331, 2321, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 1, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 2327, 1, 1, 1, 2328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2327, 1, 1, 1, 1, 1, 1, 1, 2329, 1, 1, 1, 1, 1, 2332, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2331, 1, 2333, 1, 2327, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2327, 1, 2334, 1, 1, 1, 2335, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2334, 1, 1, 1, 1, 1, 1, 1, 2336, 1, 1, 1, 1, 1, 2337, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2338, 1, 2332, 1, 1, 1, 2339, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2332, 2340, 1, 2340, 2340, 2340, 2340, 2340, 2341, 1, 2340, 2340, 1, 2340, 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 1, 1, 2340, 1, 2340, 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 1, 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 2342, 1, 2332, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2332, 1, 2327, 1, 1, 1, 2328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2327, 2340, 1, 2340, 2340, 2340, 2340, 2340, 2329, 1, 2340, 2340, 1, 2340, 2332, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 1, 1, 2340, 2331, 2340, 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 1, 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1, 2337, 1, 1, 1, 2343, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2337, 2344, 1, 2344, 2344, 2344, 2344, 2344, 2345, 1, 2344, 2344, 1, 2344, 1, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 1, 1, 1, 2344, 1, 2344, 1, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 1, 1, 1, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 1, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2322, 1, 2346, 2346, 2347, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2322, 2346, 1, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2348, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 1, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 1, 2346, 2346, 2349, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2350, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2348, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 1, 2351, 1, 2346, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2346, 1, 2352, 1, 1, 1, 2353, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2352, 2350, 2322, 2350, 2350, 2350, 2350, 2350, 2354, 1, 2350, 2350, 1, 2350, 2324, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 1, 1, 2350, 2331, 2350, 1, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 1, 1, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 2352, 1, 1, 1, 2353, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2352, 1, 1, 1, 1, 1, 1, 1, 2354, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2331, 1, 2355, 1, 2352, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2352, 1, 2356, 1, 1, 1, 2357, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2356, 1, 1, 1, 1, 1, 1, 1, 2358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2338, 1, 2350, 2322, 2350, 2350, 2350, 2350, 2350, 1, 1, 2350, 2350, 1, 2350, 2324, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 1, 1, 2350, 1, 2350, 1, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 1, 1, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 1, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 1, 2359, 1, 2322, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2322, 1, 2332, 1, 1, 1, 2339, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2332, 2321, 2322, 2321, 2321, 2321, 2321, 2321, 2341, 1, 2321, 2321, 1, 2321, 2324, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 1, 1, 2321, 1, 2321, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 1, 1, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 1, 2360, 1, 1, 1, 2361, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2360, 2362, 2363, 2362, 2362, 2362, 2362, 2362, 2364, 1, 2362, 2362, 1, 2362, 2365, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 1, 1, 1, 2362, 1, 2362, 1, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2366, 1, 1, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 1, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 1, 2325, 2325, 2367, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 1, 2368, 2352, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 1, 2369, 1, 2325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2325, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 1, 2370, 2370, 2371, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2372, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2373, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 1, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 1, 2374, 2374, 2375, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2376, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2377, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 2374, 1, 2378, 1, 2374, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2374, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2374, 81, 1, 1, 1, 2379, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 81, 2380, 2381, 2380, 2380, 2380, 2380, 2380, 2382, 1, 2380, 2380, 1, 2380, 1, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 1, 1, 2380, 1, 2380, 1, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 1, 1, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 66, 1, 2383, 2383, 2384, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 66, 2383, 1, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2385, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 1, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 1, 2383, 2383, 2386, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2387, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2385, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 1, 2388, 1, 2383, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2383, 1, 2389, 1, 1, 1, 2390, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2389, 2387, 66, 2387, 2387, 2387, 2387, 2387, 2391, 1, 2387, 2387, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 69, 2387, 70, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 2392, 1, 1, 1, 2393, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2392, 1, 1, 1, 1, 1, 1, 1, 2394, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 76, 1, 2395, 1, 2392, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2392, 1, 2396, 1, 1, 1, 2397, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2396, 1, 1, 1, 1, 1, 1, 1, 2398, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2383, 2399, 1, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 66, 1, 2400, 1, 1, 1, 2401, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2400, 65, 2402, 65, 65, 65, 65, 65, 2403, 1, 65, 65, 1, 65, 2387, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 1, 1, 65, 69, 65, 70, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 1, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 2404, 1, 1, 1, 2405, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2404, 85, 86, 85, 85, 85, 85, 85, 2406, 1, 85, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 75, 85, 76, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 2407, 1, 2404, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2404, 1, 2408, 1, 1, 1, 2409, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2408, 2380, 2381, 2380, 2380, 2380, 2380, 2380, 2410, 1, 2380, 2380, 1, 2380, 1, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 1, 1, 2380, 82, 2380, 83, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 1, 1, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 1, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2412, 1, 2411, 2411, 2413, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2412, 2411, 2372, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2414, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 1, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 1, 2415, 2415, 2416, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2417, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2418, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 1, 2419, 1, 2415, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2415, 1, 63, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 2387, 66, 2387, 2387, 2387, 2387, 2387, 67, 1, 2387, 2387, 1, 2387, 68, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 69, 2387, 70, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 1, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2420, 1, 2415, 2415, 2421, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2420, 2415, 2376, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2418, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 1, 2422, 1, 2420, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2420, 1, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2424, 1, 2423, 2423, 2425, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2424, 2423, 2426, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2427, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 2423, 1, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 1, 2428, 2428, 2429, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2430, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2431, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 1, 2432, 1, 2428, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2428, 1, 2433, 1, 1, 1, 2434, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2433, 2387, 66, 2387, 2387, 2387, 2387, 2387, 2435, 1, 2387, 2387, 1, 2387, 68, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 69, 2387, 2436, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 2437, 1, 1, 1, 2438, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2437, 1, 1, 1, 1, 1, 1, 1, 2439, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 2440, 1, 2441, 1, 2437, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2437, 1, 2442, 1, 1, 1, 2443, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2442, 1, 1, 1, 1, 1, 1, 1, 2444, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 2445, 1, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 1, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2446, 1, 2428, 2428, 2447, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2446, 2428, 2448, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2431, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428, 1, 2449, 1, 2446, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2446, 1, 2450, 1, 1, 1, 2451, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2450, 1, 1, 1, 1, 1, 1, 1, 2452, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 2453, 1, 2454, 1, 2450, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2450, 1, 2455, 1, 1, 1, 2456, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2455, 1, 1, 1, 1, 1, 1, 1, 2457, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 1, 2458, 1, 2459, 1, 1, 1, 2460, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2459, 2461, 2462, 2461, 2461, 2461, 2461, 2461, 2463, 1, 2461, 2461, 2464, 2461, 2465, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 1, 1, 2461, 1, 2461, 2466, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 1, 1, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 60, 1, 1, 1, 2467, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 2468, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 61, 1, 2469, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 2464, 1, 1, 1, 2470, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2464, 1, 1, 1, 1, 1, 1, 1, 2471, 1, 1, 1, 2464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2466, 1, 2472, 1, 1, 1, 2473, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2472, 2474, 2475, 2474, 2474, 2474, 2474, 2474, 2476, 1, 2474, 2474, 1, 2474, 2477, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 1, 1, 1, 2474, 1, 2474, 1, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2478, 1, 1, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474, 1, 2479, 1, 1, 1, 2480, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2479, 2481, 2482, 2481, 2481, 2481, 2481, 2481, 2483, 1, 2481, 2481, 1, 2481, 2484, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 1, 1, 2481, 1, 2481, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2485, 1, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 2486, 1, 2479, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2479, 1, 2487, 1, 1, 1, 2488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2487, 2481, 2482, 2481, 2481, 2481, 2481, 2481, 2489, 1, 2481, 2481, 2490, 2481, 2491, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2492, 1, 1, 2481, 1, 2481, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 1, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 2487, 1, 1, 1, 2488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2487, 1, 1, 1, 1, 1, 1, 1, 2489, 1, 1, 1, 2490, 1, 2493, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2492, 1, 2494, 1, 2487, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2487, 1, 2495, 1, 1, 1, 2496, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2495, 1, 1, 1, 1, 1, 1, 1, 2497, 1, 1, 1, 2498, 1, 2499, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2500, 1, 2501, 1, 1, 1, 2502, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2501, 1, 1, 1, 1, 1, 1, 1, 2503, 1, 1, 1, 2501, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2504, 1, 1, 1, 1, 1, 61, 1, 2505, 1, 2501, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2501, 1, 2506, 1, 1, 1, 2507, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2506, 1, 1, 1, 1, 1, 1, 1, 2508, 1, 1, 1, 2506, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2509, 1, 1, 1, 1, 1, 2466, 1, 2510, 1, 1, 1, 2511, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2510, 2512, 2513, 2512, 2512, 2512, 2512, 2512, 2514, 1, 2512, 2512, 1, 2512, 2515, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 1, 1, 1, 2512, 1, 2512, 1, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 1, 1, 1, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 1, 2516, 1, 1, 1, 2517, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2516, 51, 52, 51, 51, 51, 51, 51, 2518, 1, 51, 51, 1, 51, 55, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 1, 51, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 1, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 2519, 1, 2516, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2516, 1, 2520, 1, 1, 1, 2521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2520, 2461, 2462, 2461, 2461, 2461, 2461, 2461, 2522, 1, 2461, 2461, 1, 2461, 2465, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 1, 1, 2461, 1, 2461, 1, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 1, 1, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 1, 2387, 66, 2387, 2387, 2387, 2387, 2387, 1, 1, 2387, 2387, 1, 2387, 2523, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 1, 2387, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 1, 1, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 1, 2493, 1, 1, 1, 2524, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2493, 2525, 1, 2525, 2525, 2525, 2525, 2525, 2526, 1, 2525, 2525, 1, 2525, 1, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1, 1, 1, 2525, 1, 2525, 1, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1, 1, 1, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1, 2527, 1, 2493, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2493, 1, 2487, 1, 1, 1, 2488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2487, 2525, 1, 2525, 2525, 2525, 2525, 2525, 2489, 1, 2525, 2525, 2490, 2525, 2493, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2492, 1, 1, 2525, 1, 2525, 1, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1, 1, 1, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1, 2499, 1, 1, 1, 2528, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2499, 2529, 1, 2529, 2529, 2529, 2529, 2529, 2530, 1, 2529, 2529, 1, 2529, 1, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 1, 1, 1, 2529, 1, 2529, 1, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 1, 1, 1, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 1, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2482, 1, 2531, 2531, 2532, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2482, 2531, 1, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2533, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 1, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 1, 2531, 2531, 2534, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2535, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2533, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 1, 2536, 1, 2531, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2531, 1, 2537, 1, 1, 1, 2538, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2537, 2535, 2482, 2535, 2535, 2535, 2535, 2535, 2539, 1, 2535, 2535, 2490, 2535, 2484, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2492, 1, 1, 2535, 1, 2535, 1, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 1, 1, 1, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 1, 2537, 1, 1, 1, 2538, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2537, 1, 1, 1, 1, 1, 1, 1, 2539, 1, 1, 1, 2490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2492, 1, 2540, 1, 2537, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2537, 1, 2541, 1, 1, 1, 2542, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2541, 1, 1, 1, 1, 1, 1, 1, 2543, 1, 1, 1, 2498, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2500, 1, 2535, 2482, 2535, 2535, 2535, 2535, 2535, 1, 1, 2535, 2535, 1, 2535, 2484, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 1, 1, 1, 2535, 1, 2535, 1, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 1, 1, 1, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 1, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 2531, 1, 2544, 1, 2482, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2482, 1, 2493, 1, 1, 1, 2524, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2493, 2481, 2482, 2481, 2481, 2481, 2481, 2481, 2526, 1, 2481, 2481, 1, 2481, 2484, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 1, 1, 2481, 1, 2481, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 1, 1, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 1, 2545, 1, 1, 1, 2546, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2545, 2547, 2548, 2547, 2547, 2547, 2547, 2547, 2549, 1, 2547, 2547, 1, 2547, 2550, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 1, 1, 1, 2547, 1, 2547, 1, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2551, 1, 1, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 1, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 1, 2485, 2485, 2552, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 1, 2553, 2537, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 1, 2554, 1, 2485, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2485, 1, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 2485, 1, 2555, 1, 1, 1, 2556, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2555, 2557, 2558, 2557, 2557, 2557, 2557, 2557, 2559, 1, 2557, 2557, 1, 2557, 17, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 18, 1, 19, 2557, 1, 2557, 17, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 1, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 2560, 1, 1, 1, 2561, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2560, 2557, 2558, 2557, 2557, 2557, 2557, 2557, 2562, 1, 2557, 2557, 1, 2557, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 1, 8, 2557, 1, 2557, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 1, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 2563, 1, 2560, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2560, 1, 2564, 1, 2565, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2565, 1, 2566, 1, 1, 1, 2567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2566, 2133, 2134, 2133, 2133, 2133, 2133, 2133, 2568, 1, 2133, 2133, 1, 2133, 2136, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 18, 1, 19, 2133, 1, 2133, 17, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2137, 1, 1, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 1, 2569, 1, 1, 1, 2570, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2569, 2140, 2141, 2140, 2140, 2140, 2140, 2140, 2571, 1, 2140, 2140, 1, 2140, 2572, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 1, 8, 2140, 1, 2140, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2144, 1, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 2573, 1, 2569, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2569, 1, 2574, 1, 1, 1, 2575, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2574, 2178, 2179, 2178, 2178, 2178, 2178, 2178, 2576, 1, 2178, 2178, 1, 2178, 2577, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 1, 1, 48, 2178, 1, 2178, 1, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2182, 1, 1, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 1, 2578, 2579, 2578, 2578, 2578, 2578, 2578, 1, 1, 2578, 2578, 1, 2578, 2572, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 1, 1, 2578, 1, 2578, 1, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 1, 1, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2579, 1, 2580, 2580, 2581, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2579, 2580, 1, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2582, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 1, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 1, 2580, 2580, 2583, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2578, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2582, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 1, 2584, 1, 2580, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2580, 1, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 1, 2585, 1, 2579, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2579, 1, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 1, 2586, 2586, 2587, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2588, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2589, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 1, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 1, 2590, 2590, 2591, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2592, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2593, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 1, 2594, 1, 2590, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2590, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2590, 2595, 1, 1, 1, 2596, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2595, 2597, 2598, 2597, 2597, 2597, 2597, 2597, 2599, 1, 2597, 2597, 1, 2597, 1, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 1, 48, 2597, 1, 2597, 1, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 1, 1, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2601, 1, 2600, 2600, 2602, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2601, 2600, 23, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2603, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 1, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 1, 2604, 2604, 2605, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2606, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2607, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 1, 2608, 1, 2604, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2604, 1, 2609, 1, 2610, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2610, 1, 2611, 1, 2612, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2612, 1, 2613, 1, 1, 1, 2614, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2613, 2615, 2616, 2615, 2615, 2615, 2615, 2615, 2617, 1, 2615, 2615, 1, 2615, 2618, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 1, 1, 1, 2615, 1, 2615, 1, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2137, 1, 1, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 1, 2619, 1, 1, 1, 2620, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2619, 2621, 2579, 2621, 2621, 2621, 2621, 2621, 2622, 1, 2621, 2621, 1, 2621, 2572, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 1, 1, 2621, 1, 2621, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2144, 1, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 2623, 1, 2619, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2619, 1, 2236, 1, 1, 1, 2237, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2236, 2621, 2579, 2621, 2621, 2621, 2621, 2621, 2239, 1, 2621, 2621, 1, 2621, 2572, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 1, 1, 2621, 1, 2621, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 1, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 2624, 1, 1, 1, 2625, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2624, 2626, 2627, 2626, 2626, 2626, 2626, 2626, 2628, 1, 2626, 2626, 1, 2626, 2577, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 1, 1, 1, 2626, 1, 2626, 1, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2182, 1, 1, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2629, 1, 2604, 2604, 2630, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2629, 2604, 27, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2607, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 1, 2631, 1, 2629, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2629, 1, 2632, 1, 2633, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2633, 1, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2635, 1, 2634, 2634, 2636, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2635, 2634, 2588, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2637, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 1, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 1, 2638, 2638, 2639, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2640, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2641, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 1, 2642, 1, 2638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2643, 1, 2638, 2638, 2644, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2643, 2638, 2592, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2641, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 1, 2645, 1, 2643, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2643, 1, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2647, 1, 2646, 2646, 2648, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2647, 2646, 2649, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2650, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 1, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 1, 2651, 2651, 2652, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2653, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2654, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 1, 2655, 1, 2651, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2651, 1, 2656, 1, 2657, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2657, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2658, 1, 2651, 2651, 2659, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2658, 2651, 2660, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2654, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 1, 2661, 1, 2658, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2658, 1, 2662, 1, 2663, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2663, 1, 2664, 1, 1, 1, 2665, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2664, 2666, 2667, 2666, 2666, 2666, 2666, 2666, 2668, 1, 2666, 2666, 1, 2666, 2669, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 1, 1, 48, 2666, 1, 2666, 1, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 1, 1, 1, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 1, 2670, 1, 1, 1, 2671, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2670, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 1, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 8, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2672, 1, 2670, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2670, 1, 2673, 2674, 2673, 2673, 2673, 2673, 2673, 1, 1, 2673, 2673, 1, 2673, 2675, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 1, 1, 2673, 1, 2673, 1, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 1, 1, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 2676, 1, 2677, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2677, 1, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2674, 1, 2678, 2678, 2679, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2674, 2678, 1, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2680, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 1, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 1, 2678, 2678, 2681, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2673, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2680, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 1, 2682, 1, 2678, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2678, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2678, 2683, 1, 2674, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2674, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 2684, 2685, 2684, 2684, 2684, 2684, 2684, 40, 1, 2684, 2684, 1, 2684, 2686, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 18, 1, 19, 2684, 1, 2684, 17, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 1, 1, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 1, 2687, 2687, 2688, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2689, 2690, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2691, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 2687, 1, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 1, 2692, 2692, 2693, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2694, 2695, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2696, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 1, 2697, 1, 2692, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2692, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2692, 2698, 1, 1, 1, 2699, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2698, 2700, 2701, 2700, 2700, 2700, 2700, 2700, 2702, 1, 2700, 2700, 6, 2700, 2703, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 1, 6, 2704, 2700, 1, 2700, 2705, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 1, 1, 1, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 1, 2706, 1, 1, 1, 2707, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2706, 2708, 2685, 2708, 2708, 2708, 2708, 2708, 2709, 1, 2708, 2708, 2710, 2708, 2711, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 18, 2710, 19, 2708, 1, 2708, 2712, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 1, 1, 1, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 1, 2713, 1, 1, 1, 2714, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2713, 14, 15, 14, 14, 14, 14, 14, 2715, 1, 14, 14, 2716, 14, 2717, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2716, 19, 14, 1, 14, 2718, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2719, 1, 1, 1, 2720, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2719, 1, 1, 1, 1, 1, 1, 1, 2721, 1, 1, 1, 2722, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2722, 1, 2723, 1, 1, 1, 2724, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2723, 1, 1, 1, 1, 1, 1, 1, 2725, 1, 1, 1, 2726, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2726, 1, 2727, 1, 1, 1, 2728, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2727, 2729, 2730, 2729, 2729, 2729, 2729, 2729, 2731, 1, 2729, 2729, 6, 2729, 2732, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 1, 6, 2704, 2729, 1, 2729, 2705, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 1, 1, 1, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 1, 2733, 1, 1, 1, 2734, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2733, 2735, 2310, 2735, 2735, 2735, 2735, 2735, 2736, 1, 2735, 2735, 2710, 2735, 2737, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 18, 2710, 19, 2735, 1, 2735, 2738, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 1, 1, 1, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 1, 2739, 1, 1, 1, 2740, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2739, 14, 15, 14, 14, 14, 14, 14, 2741, 1, 14, 14, 2716, 14, 2742, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2716, 19, 14, 1, 14, 2743, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2744, 1, 1, 1, 2745, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2744, 32, 33, 32, 32, 32, 32, 32, 2746, 1, 32, 32, 2747, 32, 2748, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2747, 37, 32, 1, 32, 2749, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2750, 1, 1, 1, 2751, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2750, 104, 15, 104, 104, 104, 104, 104, 2752, 1, 104, 104, 2722, 104, 2742, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 18, 2722, 19, 104, 1, 104, 2753, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 1, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 2750, 1, 1, 1, 2751, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2750, 14, 15, 14, 14, 14, 14, 14, 2752, 1, 14, 14, 2722, 14, 2742, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2722, 19, 14, 1, 14, 2753, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2754, 1, 1, 1, 2755, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2754, 32, 33, 32, 32, 32, 32, 32, 2756, 1, 32, 32, 2726, 32, 2748, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2726, 37, 32, 1, 32, 2757, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2758, 1, 1, 1, 2759, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2758, 413, 414, 413, 413, 413, 413, 413, 2760, 1, 413, 413, 6, 413, 416, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 6, 417, 413, 1, 413, 418, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 1, 1, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 1, 302, 1, 1, 1, 2761, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 302, 421, 422, 421, 421, 421, 421, 421, 2762, 1, 421, 421, 6, 421, 424, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 6, 349, 421, 1, 421, 1, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 1, 1, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 1, 2763, 1, 1, 1, 2764, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2763, 695, 696, 695, 695, 695, 695, 695, 2765, 1, 695, 695, 2766, 695, 698, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 2766, 354, 695, 1, 695, 1, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 1, 1, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 1, 120, 1, 1, 1, 2767, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 120, 1, 1, 1, 1, 1, 1, 1, 2768, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1184, 1, 1, 1, 2769, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1184, 1, 1, 1, 1, 1, 1, 1, 2770, 1, 1, 1, 2766, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2766, 1, 2771, 1, 1, 1, 2772, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2771, 2140, 2141, 2140, 2140, 2140, 2140, 2140, 2773, 1, 2140, 2140, 2774, 2140, 2775, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 18, 2774, 19, 2140, 1, 2140, 17, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 1, 1, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1, 2771, 1, 1, 1, 2772, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2771, 14, 15, 14, 14, 14, 14, 14, 2773, 1, 14, 14, 2774, 14, 2776, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2774, 19, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2777, 1, 1, 1, 2778, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2777, 32, 33, 32, 32, 32, 32, 32, 2779, 1, 32, 32, 2780, 32, 2781, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2780, 37, 32, 1, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2771, 1, 1, 1, 2772, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2771, 2150, 15, 2150, 2150, 2150, 2150, 2150, 2773, 1, 2150, 2150, 2774, 2150, 2776, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 18, 2774, 19, 2150, 1, 2150, 17, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 1, 1, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 1, 2782, 1, 1, 1, 2783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2782, 2171, 2141, 2171, 2171, 2171, 2171, 2171, 2784, 1, 2171, 2171, 2774, 2171, 2172, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 18, 2774, 19, 2171, 1, 2171, 17, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 1, 1, 1, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 1, 2782, 1, 1, 1, 2783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2782, 14, 15, 14, 14, 14, 14, 14, 2784, 1, 14, 14, 2774, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2774, 19, 14, 1, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2785, 1, 1, 1, 2786, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2785, 32, 33, 32, 32, 32, 32, 32, 2787, 1, 32, 32, 2780, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2780, 37, 32, 1, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2788, 1, 1, 1, 2789, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2788, 2183, 2184, 2183, 2183, 2183, 2183, 2183, 2790, 1, 2183, 2183, 2774, 2183, 2143, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 2774, 1, 2183, 1, 2183, 1, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 1, 1, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1, 2788, 1, 1, 1, 2789, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2788, 1, 1, 1, 1, 1, 1, 1, 2790, 1, 1, 1, 2774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2774, 1, 2791, 1, 1, 1, 2792, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2791, 1, 1, 1, 1, 1, 1, 1, 2793, 1, 1, 1, 2780, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2780, 1, 2794, 1, 1, 1, 2795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2794, 2309, 2310, 2309, 2309, 2309, 2309, 2309, 2796, 1, 2309, 2309, 2710, 2309, 2797, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 18, 2710, 19, 2309, 1, 2309, 2738, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 1, 1, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 2798, 1, 1, 1, 2799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2798, 14, 15, 14, 14, 14, 14, 14, 2800, 1, 14, 14, 2716, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2716, 19, 14, 1, 14, 2743, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2801, 1, 1, 1, 2802, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2801, 32, 33, 32, 32, 32, 32, 32, 2803, 1, 32, 32, 2747, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2747, 37, 32, 1, 32, 2749, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2804, 1, 1, 1, 2805, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2804, 2309, 2310, 2309, 2309, 2309, 2309, 2309, 2806, 1, 2309, 2309, 2710, 2309, 2797, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 18, 2710, 19, 2309, 1, 2309, 2738, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 1, 1, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 2807, 1, 1, 1, 2808, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2807, 14, 15, 14, 14, 14, 14, 14, 2809, 1, 14, 14, 2716, 14, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2716, 8, 14, 1, 14, 2810, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2811, 1, 1, 1, 2812, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2811, 32, 33, 32, 32, 32, 32, 32, 2813, 1, 32, 32, 2747, 32, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2747, 48, 32, 1, 32, 2814, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2815, 1, 1, 1, 2816, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2815, 2231, 2184, 2231, 2231, 2231, 2231, 2231, 2817, 1, 2231, 2231, 2774, 2231, 2818, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 2774, 1, 2231, 1, 2231, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 1, 1, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1, 2815, 1, 1, 1, 2816, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2815, 1, 1, 1, 1, 1, 1, 1, 2817, 1, 1, 1, 2774, 1, 2236, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2774, 1, 2819, 1, 1, 1, 2820, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2819, 1, 1, 1, 1, 1, 1, 1, 2821, 1, 1, 1, 2780, 1, 2241, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2780, 1, 2815, 1, 1, 1, 2816, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2815, 2238, 1, 2238, 2238, 2238, 2238, 2238, 2817, 1, 2238, 2238, 2774, 2238, 2236, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 2774, 1, 2238, 1, 2238, 1, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 1, 1, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 1, 2822, 1, 1, 1, 2823, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2822, 2735, 2824, 2735, 2735, 2735, 2735, 2735, 2825, 1, 2735, 2735, 2710, 2735, 2797, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 18, 2710, 19, 2735, 1, 2735, 2738, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 1, 1, 1, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 1, 2826, 1, 1, 1, 2827, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2826, 104, 105, 104, 104, 104, 104, 104, 2828, 1, 104, 104, 2716, 104, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 2716, 8, 104, 1, 104, 2810, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 1, 1, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 1, 2829, 1, 1, 1, 2830, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2829, 2207, 2208, 2207, 2207, 2207, 2207, 2207, 2831, 1, 2207, 2207, 2747, 2207, 1, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 2747, 48, 2207, 1, 2207, 2814, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 1, 1, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 1, 2733, 1, 1, 1, 2734, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2733, 2309, 2310, 2309, 2309, 2309, 2309, 2309, 2736, 1, 2309, 2309, 2710, 2309, 2737, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 18, 2710, 19, 2309, 1, 2309, 2738, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 1, 1, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 2832, 1, 1, 1, 2833, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2832, 2309, 2310, 2309, 2309, 2309, 2309, 2309, 2834, 1, 2309, 2309, 2835, 2309, 2737, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 18, 2835, 19, 2309, 1, 2309, 2836, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 1, 1, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 2309, 1, 2837, 1, 1, 1, 2838, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2837, 14, 15, 14, 14, 14, 14, 14, 2839, 1, 14, 14, 2840, 14, 2742, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2840, 19, 14, 1, 14, 2841, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2842, 1, 1, 1, 2843, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2842, 32, 33, 32, 32, 32, 32, 32, 2844, 1, 32, 32, 2845, 32, 2748, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2845, 37, 32, 1, 32, 2846, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2847, 1, 1, 1, 2848, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2847, 14, 15, 14, 14, 14, 14, 14, 2849, 1, 14, 14, 2850, 14, 2742, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2850, 19, 14, 1, 14, 2851, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2852, 1, 1, 1, 2853, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2852, 32, 33, 32, 32, 32, 32, 32, 2854, 1, 32, 32, 2855, 32, 2748, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2855, 37, 32, 1, 32, 2856, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2857, 1, 1, 1, 2858, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2857, 2298, 2299, 2298, 2298, 2298, 2298, 2298, 2859, 1, 2298, 2298, 2710, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 2710, 1, 2298, 1, 2298, 2860, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 1, 1, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 1, 2861, 1, 1, 1, 2862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2861, 1, 1, 1, 1, 1, 1, 1, 2863, 1, 1, 1, 2716, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2716, 1, 1, 1, 1, 2810, 1, 2864, 1, 1, 1, 2865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2864, 1, 1, 1, 1, 1, 1, 1, 2866, 1, 1, 1, 2747, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2747, 1, 1, 1, 1, 2814, 1, 2867, 1, 1, 1, 2868, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2867, 32, 33, 32, 32, 32, 32, 32, 2869, 1, 32, 32, 2747, 32, 2870, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2747, 37, 32, 1, 32, 2871, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2872, 1, 1, 1, 2873, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2872, 2557, 15, 2557, 2557, 2557, 2557, 2557, 2874, 1, 2557, 2557, 2722, 2557, 2717, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 18, 2722, 19, 2557, 1, 2557, 2875, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 1, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 2872, 1, 1, 1, 2873, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2872, 14, 15, 14, 14, 14, 14, 14, 2874, 1, 14, 14, 2722, 14, 2717, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2722, 19, 14, 1, 14, 2875, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2876, 1, 1, 1, 2877, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2876, 32, 33, 32, 32, 32, 32, 32, 2878, 1, 32, 32, 2726, 32, 2870, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2726, 37, 32, 1, 32, 2879, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2186, 1, 1, 1, 2880, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2186, 2578, 2579, 2578, 2578, 2578, 2578, 2578, 2790, 1, 2578, 2578, 2774, 2578, 2572, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 2774, 1, 2578, 1, 2578, 1, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 1, 1, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 1, 2881, 1, 1, 1, 2882, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2881, 2684, 2685, 2684, 2684, 2684, 2684, 2684, 2883, 1, 2684, 2684, 2710, 2684, 2884, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 18, 2710, 19, 2684, 1, 2684, 2712, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 1, 1, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 2885, 1, 1, 1, 2886, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2885, 14, 15, 14, 14, 14, 14, 14, 2887, 1, 14, 14, 2716, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2716, 19, 14, 1, 14, 2718, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2888, 1, 1, 1, 2889, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2888, 32, 33, 32, 32, 32, 32, 32, 2890, 1, 32, 32, 2747, 32, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2747, 37, 32, 1, 32, 2871, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2891, 1, 1, 1, 2892, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2891, 2684, 2685, 2684, 2684, 2684, 2684, 2684, 2893, 1, 2684, 2684, 2710, 2684, 2884, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 18, 2710, 19, 2684, 1, 2684, 2712, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 1, 1, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 2894, 1, 1, 1, 2895, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2894, 14, 15, 14, 14, 14, 14, 14, 2896, 1, 14, 14, 2716, 14, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2716, 8, 14, 1, 14, 2897, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2898, 1, 1, 1, 2899, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2898, 32, 33, 32, 32, 32, 32, 32, 2900, 1, 32, 32, 2747, 32, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2747, 48, 32, 1, 32, 2901, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2235, 1, 1, 1, 2902, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2235, 2621, 2579, 2621, 2621, 2621, 2621, 2621, 2817, 1, 2621, 2621, 2774, 2621, 2903, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 2774, 1, 2621, 1, 2621, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 1, 1, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 1, 2904, 1, 1, 1, 2905, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2904, 2708, 2906, 2708, 2708, 2708, 2708, 2708, 2907, 1, 2708, 2708, 2710, 2708, 2884, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 18, 2710, 19, 2708, 1, 2708, 2712, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 1, 1, 1, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 1, 2908, 1, 1, 1, 2909, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2908, 2557, 2558, 2557, 2557, 2557, 2557, 2557, 2910, 1, 2557, 2557, 2716, 2557, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 2716, 8, 2557, 1, 2557, 2897, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 1, 1, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 1, 2911, 1, 1, 1, 2912, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2911, 2597, 2598, 2597, 2597, 2597, 2597, 2597, 2913, 1, 2597, 2597, 2747, 2597, 1, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 2747, 48, 2597, 1, 2597, 2901, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 1, 1, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 2597, 1, 2706, 1, 1, 1, 2707, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2706, 2684, 2685, 2684, 2684, 2684, 2684, 2684, 2709, 1, 2684, 2684, 2710, 2684, 2711, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 18, 2710, 19, 2684, 1, 2684, 2712, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 1, 1, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 2914, 1, 1, 1, 2915, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2914, 2684, 2685, 2684, 2684, 2684, 2684, 2684, 2916, 1, 2684, 2684, 2835, 2684, 2711, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 18, 2835, 19, 2684, 1, 2684, 2917, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 1, 1, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 1, 2918, 1, 1, 1, 2919, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2918, 14, 15, 14, 14, 14, 14, 14, 2920, 1, 14, 14, 2840, 14, 2717, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2840, 19, 14, 1, 14, 2921, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2922, 1, 1, 1, 2923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2922, 32, 33, 32, 32, 32, 32, 32, 2924, 1, 32, 32, 2845, 32, 2870, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2845, 37, 32, 1, 32, 2925, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2926, 1, 1, 1, 2927, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2926, 14, 15, 14, 14, 14, 14, 14, 2928, 1, 14, 14, 2850, 14, 2717, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 2850, 19, 14, 1, 14, 2929, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 2930, 1, 1, 1, 2931, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2930, 32, 33, 32, 32, 32, 32, 32, 2932, 1, 32, 32, 2855, 32, 2870, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 2855, 37, 32, 1, 32, 2933, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 1, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 2934, 1, 1, 1, 2935, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2934, 2673, 2674, 2673, 2673, 2673, 2673, 2673, 2936, 1, 2673, 2673, 2710, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 2710, 1, 2673, 1, 2673, 2937, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 1, 1, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 2673, 1, 2938, 1, 1, 1, 2939, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2938, 1, 1, 1, 1, 1, 1, 1, 2940, 1, 1, 1, 2716, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2716, 1, 1, 1, 1, 2897, 1, 2941, 1, 1, 1, 2942, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2941, 1, 1, 1, 1, 1, 1, 1, 2943, 1, 1, 1, 2747, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2747, 1, 1, 1, 1, 2901, 1, 1, 0 ] class << self attr_accessor :_address_lists_trans_targs private :_address_lists_trans_targs, :_address_lists_trans_targs= end self._address_lists_trans_targs = [ 1, 0, 2, 1335, 1302, 1314, 1339, 1318, 20, 3, 5, 1336, 6, 7, 6, 9, 14, 15, 49, 20, 8, 10, 11, 6, 13, 10, 11, 6, 13, 12, 6, 7, 6, 9, 14, 15, 49, 20, 16, 17, 19, 16, 17, 19, 18, 16, 17, 19, 20, 21, 22, 24, 1184, 1201, 1202, 1224, 1206, 21, 22, 1201, 1202, 1206, 23, 25, 26, 24, 1158, 28, 1170, 1337, 1119, 25, 26, 28, 29, 1337, 1119, 27, 25, 26, 28, 29, 1337, 1119, 30, 32, 1152, 1157, 31, 33, 34, 36, 1119, 35, 33, 34, 36, 1119, 38, 40, 42, 1341, 44, 45, 1343, 1052, 1057, 44, 45, 1057, 46, 48, 1344, 50, 51, 53, 96, 1008, 1009, 877, 1349, 71, 66, 50, 51, 53, 96, 1008, 864, 71, 52, 54, 55, 53, 492, 531, 92, 521, 1346, 71, 433, 54, 55, 57, 60, 531, 92, 105, 1346, 433, 56, 54, 57, 58, 65, 66, 59, 61, 62, 57, 64, 61, 62, 57, 64, 63, 57, 58, 57, 60, 65, 66, 71, 67, 68, 70, 67, 68, 70, 69, 67, 68, 70, 71, 72, 73, 75, 943, 960, 961, 983, 965, 72, 73, 960, 961, 965, 74, 76, 77, 75, 917, 79, 929, 88, 878, 76, 77, 79, 80, 88, 878, 78, 76, 77, 79, 80, 88, 878, 81, 83, 911, 916, 82, 84, 85, 87, 878, 86, 84, 85, 87, 878, 89, 91, 92, 1346, 90, 89, 91, 92, 1346, 93, 94, 544, 545, 93, 94, 544, 95, 97, 537, 538, 540, 536, 97, 98, 100, 536, 99, 101, 102, 487, 104, 92, 1346, 433, 101, 102, 104, 92, 1346, 433, 103, 101, 101, 102, 104, 92, 105, 1346, 433, 106, 107, 109, 481, 486, 106, 107, 486, 108, 110, 111, 113, 433, 112, 110, 110, 111, 113, 433, 115, 1347, 117, 118, 116, 236, 275, 155, 265, 134, 177, 117, 118, 120, 123, 275, 155, 168, 177, 119, 117, 120, 121, 128, 129, 122, 124, 125, 120, 127, 124, 125, 120, 127, 126, 120, 121, 120, 123, 128, 129, 134, 130, 131, 133, 130, 131, 133, 134, 132, 130, 131, 133, 134, 135, 136, 138, 368, 385, 386, 408, 390, 135, 136, 385, 386, 390, 137, 139, 140, 138, 342, 142, 354, 151, 303, 139, 140, 142, 143, 151, 303, 141, 139, 140, 142, 143, 151, 303, 144, 146, 336, 341, 145, 147, 148, 150, 303, 149, 147, 148, 150, 303, 152, 154, 155, 153, 152, 154, 155, 156, 157, 116, 159, 288, 302, 134, 129, 156, 157, 116, 159, 288, 289, 158, 160, 281, 282, 284, 280, 160, 161, 163, 280, 162, 164, 165, 231, 167, 155, 177, 164, 165, 167, 155, 177, 166, 164, 164, 165, 167, 155, 168, 177, 169, 170, 172, 225, 230, 169, 170, 230, 171, 173, 174, 176, 177, 175, 173, 173, 174, 176, 177, 178, 179, 181, 192, 207, 201, 221, 178, 179, 181, 192, 207, 208, 221, 180, 182, 183, 185, 155, 206, 1346, 186, 184, 182, 182, 183, 185, 155, 186, 1346, 187, 188, 190, 191, 187, 188, 191, 189, 187, 188, 190, 191, 193, 203, 204, 202, 193, 194, 196, 202, 195, 197, 198, 196, 200, 201, 199, 197, 197, 198, 200, 203, 204, 205, 178, 179, 181, 192, 207, 208, 221, 209, 214, 210, 211, 213, 212, 210, 211, 213, 215, 219, 218, 216, 217, 220, 222, 224, 223, 226, 227, 173, 229, 226, 227, 173, 229, 228, 169, 170, 172, 225, 230, 232, 233, 235, 244, 232, 233, 235, 234, 232, 232, 233, 235, 155, 1346, 177, 237, 241, 242, 240, 237, 238, 231, 240, 239, 241, 242, 243, 245, 246, 248, 245, 246, 248, 249, 247, 245, 246, 248, 249, 250, 251, 253, 214, 264, 208, 250, 251, 253, 264, 252, 254, 255, 257, 263, 258, 256, 254, 255, 257, 258, 259, 261, 262, 260, 259, 261, 262, 250, 251, 253, 214, 264, 266, 267, 270, 269, 266, 267, 269, 268, 266, 267, 269, 271, 277, 278, 276, 271, 272, 274, 276, 273, 117, 118, 275, 277, 278, 279, 281, 282, 284, 283, 284, 285, 287, 155, 1346, 177, 286, 284, 284, 285, 287, 155, 1346, 177, 156, 157, 116, 159, 288, 289, 290, 295, 289, 291, 292, 294, 249, 291, 292, 294, 293, 291, 292, 294, 296, 300, 299, 297, 298, 301, 302, 304, 305, 307, 317, 331, 326, 332, 304, 305, 307, 317, 331, 326, 332, 306, 308, 309, 311, 330, 151, 312, 310, 308, 309, 311, 312, 151, 313, 315, 316, 314, 313, 315, 316, 318, 328, 327, 319, 321, 320, 322, 323, 325, 324, 322, 323, 325, 329, 304, 305, 307, 317, 331, 326, 332, 333, 335, 334, 337, 338, 147, 340, 337, 338, 147, 340, 339, 144, 146, 336, 341, 343, 352, 351, 344, 346, 345, 347, 348, 350, 347, 348, 350, 349, 347, 348, 350, 353, 355, 356, 359, 358, 355, 356, 358, 357, 355, 356, 358, 360, 365, 366, 364, 360, 361, 363, 364, 362, 365, 366, 367, 369, 378, 379, 381, 377, 369, 370, 372, 377, 371, 373, 374, 376, 303, 373, 374, 376, 303, 375, 373, 374, 376, 303, 378, 379, 381, 380, 381, 382, 384, 303, 383, 381, 382, 384, 303, 135, 136, 138, 368, 385, 386, 408, 390, 387, 389, 388, 387, 389, 391, 392, 394, 414, 428, 423, 429, 391, 392, 394, 414, 428, 423, 429, 393, 395, 396, 398, 399, 427, 403, 409, 397, 395, 396, 398, 399, 409, 403, 399, 400, 402, 403, 401, 399, 400, 402, 403, 404, 405, 138, 368, 407, 408, 404, 405, 407, 406, 404, 405, 407, 408, 410, 412, 413, 411, 410, 412, 413, 415, 425, 424, 416, 418, 417, 419, 420, 422, 421, 419, 420, 422, 426, 391, 392, 394, 414, 428, 423, 429, 430, 432, 431, 434, 435, 437, 448, 463, 457, 477, 434, 435, 437, 448, 463, 464, 477, 436, 438, 439, 441, 92, 462, 442, 440, 438, 438, 439, 441, 92, 442, 443, 444, 446, 447, 443, 444, 447, 445, 443, 444, 446, 447, 449, 459, 460, 458, 449, 450, 452, 458, 451, 453, 454, 452, 456, 457, 455, 453, 453, 454, 456, 459, 460, 461, 434, 435, 437, 448, 463, 464, 477, 465, 470, 466, 467, 469, 468, 466, 467, 469, 471, 475, 474, 472, 473, 476, 478, 480, 479, 482, 483, 110, 485, 482, 483, 110, 485, 484, 106, 107, 109, 481, 486, 488, 489, 491, 500, 488, 489, 491, 490, 488, 488, 489, 491, 92, 433, 493, 497, 498, 496, 493, 494, 487, 496, 495, 497, 498, 499, 501, 502, 504, 501, 502, 504, 505, 503, 501, 502, 504, 505, 506, 507, 509, 470, 520, 464, 506, 507, 509, 520, 508, 510, 511, 513, 519, 514, 512, 510, 511, 513, 514, 515, 517, 518, 516, 515, 517, 518, 506, 507, 509, 470, 520, 522, 523, 526, 525, 522, 523, 525, 524, 522, 523, 525, 527, 533, 534, 532, 527, 528, 530, 532, 529, 54, 55, 531, 533, 534, 535, 537, 538, 540, 539, 540, 541, 543, 92, 433, 542, 540, 540, 541, 543, 92, 433, 93, 94, 53, 96, 544, 545, 864, 1349, 546, 547, 549, 832, 849, 863, 567, 562, 546, 547, 549, 832, 849, 850, 567, 548, 550, 551, 549, 784, 720, 545, 818, 1349, 567, 730, 550, 551, 553, 556, 720, 545, 721, 1349, 730, 552, 550, 553, 554, 561, 562, 555, 557, 558, 553, 560, 557, 558, 553, 560, 559, 553, 554, 553, 556, 561, 562, 567, 563, 564, 566, 563, 564, 566, 565, 563, 564, 566, 567, 568, 569, 571, 655, 672, 673, 695, 677, 568, 569, 672, 673, 677, 570, 572, 573, 571, 629, 575, 641, 584, 590, 572, 573, 575, 576, 584, 590, 574, 572, 573, 575, 576, 584, 590, 577, 579, 623, 628, 578, 580, 581, 583, 590, 582, 580, 581, 583, 590, 585, 587, 545, 1349, 586, 585, 587, 545, 1349, 589, 591, 592, 594, 604, 618, 613, 619, 591, 592, 594, 604, 618, 613, 619, 593, 595, 596, 598, 617, 584, 599, 597, 595, 596, 598, 599, 584, 600, 602, 603, 601, 600, 602, 603, 605, 615, 614, 606, 608, 607, 609, 610, 612, 611, 609, 610, 612, 616, 591, 592, 594, 604, 618, 613, 619, 620, 622, 621, 624, 625, 580, 627, 624, 625, 580, 627, 626, 577, 579, 623, 628, 630, 639, 638, 631, 633, 632, 634, 635, 637, 634, 635, 637, 636, 634, 635, 637, 640, 642, 643, 646, 645, 642, 643, 645, 644, 642, 643, 645, 647, 652, 653, 651, 647, 648, 650, 651, 649, 652, 653, 654, 656, 665, 666, 668, 664, 656, 657, 659, 664, 658, 660, 661, 663, 590, 660, 661, 663, 590, 662, 660, 661, 663, 590, 665, 666, 668, 667, 668, 669, 671, 590, 670, 668, 669, 671, 590, 568, 569, 571, 655, 672, 673, 695, 677, 674, 676, 675, 674, 676, 678, 679, 681, 701, 715, 710, 716, 678, 679, 681, 701, 715, 710, 716, 680, 682, 683, 685, 686, 714, 690, 696, 684, 682, 683, 685, 686, 696, 690, 686, 687, 689, 690, 688, 686, 687, 689, 690, 691, 692, 571, 655, 694, 695, 691, 692, 694, 693, 691, 692, 694, 695, 697, 699, 700, 698, 697, 699, 700, 702, 712, 711, 703, 705, 704, 706, 707, 709, 708, 706, 707, 709, 713, 678, 679, 681, 701, 715, 710, 716, 717, 719, 718, 550, 551, 720, 545, 721, 1349, 730, 722, 723, 725, 778, 783, 722, 723, 783, 724, 726, 727, 729, 730, 728, 726, 726, 727, 729, 730, 731, 732, 734, 745, 760, 754, 774, 731, 732, 734, 745, 760, 761, 774, 733, 735, 736, 738, 545, 759, 1349, 739, 737, 735, 735, 736, 738, 545, 739, 1349, 740, 741, 743, 744, 740, 741, 744, 742, 740, 741, 743, 744, 746, 756, 757, 755, 746, 747, 749, 755, 748, 750, 751, 749, 753, 754, 752, 750, 750, 751, 753, 756, 757, 758, 731, 732, 734, 745, 760, 761, 774, 762, 767, 763, 764, 766, 765, 763, 764, 766, 768, 772, 771, 769, 770, 773, 775, 777, 776, 779, 780, 726, 782, 779, 780, 726, 782, 781, 722, 723, 725, 778, 783, 785, 815, 816, 814, 785, 786, 788, 814, 787, 789, 790, 788, 792, 793, 789, 790, 792, 791, 789, 789, 790, 792, 794, 795, 797, 794, 795, 797, 798, 796, 794, 795, 797, 798, 799, 800, 802, 767, 813, 761, 799, 800, 802, 813, 801, 803, 804, 806, 812, 807, 805, 803, 804, 806, 807, 808, 810, 811, 809, 808, 810, 811, 799, 800, 802, 767, 813, 815, 816, 817, 819, 820, 823, 822, 819, 820, 822, 821, 819, 820, 822, 824, 829, 830, 828, 824, 825, 827, 828, 826, 829, 830, 831, 833, 842, 843, 845, 841, 833, 834, 836, 841, 835, 837, 838, 840, 545, 1349, 730, 837, 838, 840, 545, 1349, 730, 839, 837, 837, 838, 840, 545, 1349, 730, 842, 843, 845, 844, 845, 846, 848, 545, 1349, 730, 847, 845, 845, 846, 848, 545, 1349, 730, 546, 547, 549, 832, 849, 850, 851, 856, 850, 852, 853, 855, 798, 852, 853, 855, 854, 852, 853, 855, 857, 861, 860, 858, 859, 862, 863, 865, 870, 864, 866, 867, 869, 505, 866, 867, 869, 868, 866, 867, 869, 871, 875, 874, 872, 873, 876, 877, 879, 880, 882, 892, 906, 901, 907, 879, 880, 882, 892, 906, 901, 907, 881, 883, 884, 886, 905, 88, 887, 885, 883, 884, 886, 887, 88, 888, 890, 891, 889, 888, 890, 891, 893, 903, 902, 894, 896, 895, 897, 898, 900, 899, 897, 898, 900, 904, 879, 880, 882, 892, 906, 901, 907, 908, 910, 909, 912, 913, 84, 915, 912, 913, 84, 915, 914, 81, 83, 911, 916, 918, 927, 926, 919, 921, 920, 922, 923, 925, 922, 923, 925, 924, 922, 923, 925, 928, 930, 931, 934, 933, 930, 931, 933, 932, 930, 931, 933, 935, 940, 941, 939, 935, 936, 938, 939, 937, 940, 941, 942, 944, 953, 954, 956, 952, 944, 945, 947, 952, 946, 948, 949, 951, 878, 948, 949, 951, 878, 950, 948, 949, 951, 878, 953, 954, 956, 955, 956, 957, 959, 878, 958, 956, 957, 959, 878, 72, 73, 75, 943, 960, 961, 983, 965, 962, 964, 963, 962, 964, 966, 967, 969, 989, 1003, 998, 1004, 966, 967, 969, 989, 1003, 998, 1004, 968, 970, 971, 973, 974, 1002, 978, 984, 972, 970, 971, 973, 974, 984, 978, 974, 975, 977, 978, 976, 974, 975, 977, 978, 979, 980, 75, 943, 982, 983, 979, 980, 982, 981, 979, 980, 982, 983, 985, 987, 988, 986, 985, 987, 988, 990, 1000, 999, 991, 993, 992, 994, 995, 997, 996, 994, 995, 997, 1001, 966, 967, 969, 989, 1003, 998, 1004, 1005, 1007, 1006, 50, 51, 1008, 1009, 1010, 1011, 1013, 1010, 1011, 1013, 1012, 1010, 1011, 1013, 1015, 1016, 1351, 1025, 1037, 1031, 1048, 1015, 1016, 1351, 1025, 1037, 1038, 1048, 1017, 1019, 1352, 1021, 1022, 1354, 1024, 1021, 1022, 1024, 1023, 1021, 1022, 1354, 1024, 1026, 1033, 1034, 1032, 1026, 1027, 1355, 1032, 1028, 1030, 1356, 1355, 1031, 1033, 1034, 1035, 1015, 1016, 1351, 1025, 1037, 1038, 1048, 1358, 1041, 1040, 1359, 1042, 1046, 1045, 1043, 1044, 1047, 1049, 1051, 1050, 1053, 1054, 1344, 1056, 1053, 1054, 1344, 1056, 1055, 44, 45, 1343, 1052, 1057, 1059, 1079, 1080, 1078, 1059, 1060, 1361, 1078, 1061, 1063, 1362, 1065, 1365, 1067, 1068, 1367, 1041, 1077, 1038, 1067, 1068, 1367, 1077, 1069, 1071, 1368, 1072, 1073, 1370, 1075, 1074, 1072, 1073, 1370, 1075, 1067, 1068, 1367, 1041, 1077, 1079, 1080, 1081, 1083, 1372, 1085, 1089, 1090, 1088, 1085, 1086, 1374, 1088, 1087, 1089, 1090, 1091, 1093, 1099, 1100, 1378, 1098, 1093, 1094, 1375, 1098, 1095, 1097, 1376, 1099, 1100, 1378, 1101, 1103, 1378, 1105, 1106, 1340, 1092, 1104, 1108, 1105, 1106, 1340, 1092, 1104, 1108, 1107, 1380, 1111, 1108, 1110, 1381, 1112, 1116, 1115, 1113, 1114, 1117, 1361, 1058, 1118, 1120, 1121, 1123, 1133, 1147, 1142, 1148, 1120, 1121, 1123, 1133, 1147, 1142, 1148, 1122, 1124, 1125, 1127, 1146, 1337, 1128, 1126, 1124, 1125, 1127, 1128, 1337, 1129, 1131, 1132, 1130, 1129, 1131, 1132, 1134, 1144, 1143, 1135, 1137, 1136, 1138, 1139, 1141, 1140, 1138, 1139, 1141, 1145, 1120, 1121, 1123, 1133, 1147, 1142, 1148, 1149, 1151, 1150, 1153, 1154, 33, 1156, 1153, 1154, 33, 1156, 1155, 30, 32, 1152, 1157, 1159, 1168, 1167, 1160, 1162, 1161, 1163, 1164, 1166, 1163, 1164, 1166, 1165, 1163, 1164, 1166, 1169, 1171, 1172, 1175, 1174, 1171, 1172, 1174, 1173, 1171, 1172, 1174, 1176, 1181, 1182, 1180, 1176, 1177, 1179, 1180, 1178, 1181, 1182, 1183, 1185, 1194, 1195, 1197, 1193, 1185, 1186, 1188, 1193, 1187, 1189, 1190, 1192, 1119, 1189, 1190, 1192, 1119, 1191, 1189, 1190, 1192, 1119, 1194, 1195, 1197, 1196, 1197, 1198, 1200, 1119, 1199, 1197, 1198, 1200, 1119, 21, 22, 24, 1184, 1201, 1202, 1224, 1206, 1203, 1205, 1204, 1203, 1205, 1207, 1208, 1210, 1230, 1244, 1239, 1245, 1207, 1208, 1210, 1230, 1244, 1239, 1245, 1209, 1211, 1212, 1214, 1215, 1243, 1219, 1225, 1213, 1211, 1212, 1214, 1215, 1225, 1219, 1215, 1216, 1218, 1219, 1217, 1215, 1216, 1218, 1219, 1220, 1221, 24, 1184, 1223, 1224, 1220, 1221, 1223, 1222, 1220, 1221, 1223, 1224, 1226, 1228, 1229, 1227, 1226, 1228, 1229, 1231, 1241, 1240, 1232, 1234, 1233, 1235, 1236, 1238, 1237, 1235, 1236, 1238, 1242, 1207, 1208, 1210, 1230, 1244, 1239, 1245, 1246, 1248, 1247, 1250, 1251, 1384, 1268, 1273, 1250, 1251, 1273, 1252, 1254, 1385, 1256, 1257, 1259, 1256, 1257, 1259, 1260, 1258, 1256, 1257, 1259, 1260, 1387, 1261, 1262, 1266, 1265, 1263, 1264, 1267, 1269, 1270, 1385, 1272, 1269, 1270, 1385, 1272, 1271, 1250, 1251, 1384, 1268, 1273, 1275, 1289, 1290, 1288, 1275, 1276, 1388, 1288, 1277, 1279, 1389, 1281, 1392, 1283, 1284, 1394, 1261, 1287, 1260, 1283, 1284, 1394, 1287, 1285, 1283, 1284, 1394, 1261, 1287, 1289, 1290, 1291, 1293, 1396, 1295, 1299, 1300, 1298, 1295, 1296, 1398, 1298, 1297, 1299, 1300, 1301, 1303, 1309, 1310, 1402, 1308, 1303, 1304, 1399, 1308, 1305, 1307, 1400, 1309, 1310, 1402, 1311, 1313, 1402, 1315, 1316, 1335, 1302, 1314, 1318, 1315, 1316, 1317, 1404, 1321, 1318, 1320, 1405, 1322, 1326, 1325, 1323, 1324, 1327, 1388, 1274, 1328, 1330, 1331, 1330, 1407, 1333, 1330, 1331, 1330, 1407, 1333, 1332, 1, 2, 1335, 1302, 1314, 1328, 20, 15, 1336, 4, 1335, 1383, 1339, 1395, 1255, 1336, 4, 1383, 1339, 1249, 1255, 1337, 37, 1338, 1339, 1337, 37, 1338, 1339, 1339, 39, 1340, 1092, 1104, 1118, 1341, 41, 1340, 1342, 1371, 1014, 1341, 41, 1342, 43, 1014, 1341, 41, 1342, 1339, 43, 1014, 1344, 47, 1345, 1014, 1344, 47, 1345, 1014, 1347, 114, 1348, 114, 1348, 1347, 114, 1348, 1339, 588, 1350, 588, 1350, 1352, 1018, 1353, 1339, 1036, 1020, 1352, 1018, 1353, 1339, 1020, 1356, 1029, 1357, 1356, 1029, 1357, 1359, 1039, 1360, 1359, 1039, 1360, 1362, 1062, 1363, 1364, 1362, 1062, 1363, 1362, 1062, 1363, 1365, 1064, 1366, 1365, 1064, 1366, 1066, 1365, 1064, 1366, 1066, 1368, 1070, 1369, 1076, 1368, 1070, 1369, 1372, 1082, 1084, 1373, 1372, 1082, 1373, 1372, 1082, 1373, 1376, 1096, 1377, 1339, 1014, 1376, 1096, 1377, 1339, 1014, 1376, 1096, 1377, 1339, 1014, 1378, 1102, 1379, 1339, 1014, 1378, 1102, 1379, 1339, 1014, 1381, 1109, 1382, 1066, 1381, 1109, 1382, 1381, 1109, 1382, 1336, 4, 1383, 1249, 1255, 1385, 1253, 1386, 1255, 1385, 1253, 1386, 1255, 1039, 1389, 1278, 1390, 1391, 1389, 1278, 1390, 1389, 1278, 1390, 1392, 1280, 1393, 1392, 1280, 1393, 1282, 1392, 1280, 1393, 1282, 1070, 1286, 1396, 1292, 1294, 1397, 1396, 1292, 1397, 1396, 1292, 1397, 1400, 1306, 1401, 1255, 1400, 1306, 1401, 1255, 1400, 1306, 1401, 1255, 1402, 1312, 1403, 1255, 1402, 1312, 1403, 1255, 1405, 1319, 1406, 1282, 1405, 1319, 1406, 1405, 1319, 1406 ] class << self attr_accessor :_address_lists_trans_actions private :_address_lists_trans_actions, :_address_lists_trans_actions= end self._address_lists_trans_actions = [ 0, 0, 0, 1, 1, 2, 0, 1, 3, 0, 0, 0, 4, 4, 0, 0, 5, 0, 6, 7, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 11, 11, 12, 12, 13, 12, 14, 15, 4, 4, 5, 0, 0, 2, 0, 12, 12, 16, 17, 18, 18, 1, 1, 19, 20, 1, 20, 0, 0, 2, 0, 0, 0, 21, 21, 0, 0, 22, 0, 21, 23, 0, 0, 2, 0, 0, 24, 0, 12, 12, 16, 12, 12, 25, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 12, 12, 16, 12, 0, 0, 0, 0, 4, 4, 0, 0, 5, 0, 0, 2, 0, 0, 0, 26, 26, 26, 26, 27, 0, 26, 0, 28, 29, 0, 0, 1, 1, 2, 1, 3, 0, 30, 30, 0, 0, 31, 32, 0, 32, 7, 23, 4, 4, 0, 0, 5, 33, 0, 33, 24, 0, 0, 4, 4, 5, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 11, 11, 12, 12, 13, 12, 15, 4, 4, 5, 0, 0, 2, 0, 12, 12, 16, 17, 18, 18, 1, 1, 19, 20, 1, 20, 0, 0, 2, 0, 0, 0, 21, 21, 0, 0, 22, 0, 21, 23, 0, 0, 2, 0, 0, 24, 0, 12, 12, 16, 12, 12, 25, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 12, 12, 16, 12, 0, 2, 34, 34, 0, 12, 16, 35, 35, 26, 26, 27, 0, 0, 0, 2, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 30, 30, 0, 31, 36, 36, 37, 4, 4, 5, 38, 38, 39, 0, 0, 11, 11, 13, 40, 12, 40, 41, 4, 4, 0, 0, 5, 0, 0, 2, 0, 4, 4, 5, 0, 0, 0, 11, 11, 13, 12, 0, 0, 30, 30, 0, 0, 31, 32, 0, 7, 23, 4, 4, 0, 0, 5, 33, 0, 24, 0, 0, 4, 4, 5, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 11, 11, 12, 12, 13, 12, 15, 4, 4, 5, 0, 0, 2, 3, 0, 12, 12, 16, 17, 18, 18, 1, 1, 19, 20, 1, 20, 0, 0, 2, 0, 0, 0, 21, 21, 0, 0, 22, 0, 21, 23, 0, 0, 2, 0, 0, 24, 0, 12, 12, 16, 12, 12, 25, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 12, 12, 16, 12, 0, 2, 34, 0, 12, 16, 35, 26, 26, 26, 26, 27, 26, 28, 29, 0, 0, 1, 1, 2, 1, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 30, 30, 0, 31, 36, 37, 4, 4, 5, 38, 39, 0, 0, 11, 11, 13, 40, 12, 41, 4, 4, 0, 0, 5, 0, 0, 2, 0, 4, 4, 5, 0, 0, 0, 11, 11, 13, 12, 42, 42, 43, 43, 44, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 4, 4, 5, 45, 0, 45, 0, 0, 0, 11, 11, 13, 46, 12, 46, 4, 4, 0, 5, 0, 0, 2, 0, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 4, 4, 0, 5, 0, 0, 0, 11, 11, 13, 0, 0, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 12, 16, 30, 30, 31, 0, 4, 4, 5, 0, 0, 11, 11, 13, 47, 47, 25, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 30, 30, 31, 0, 0, 2, 24, 0, 12, 12, 16, 25, 43, 43, 43, 43, 48, 43, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 12, 12, 16, 12, 0, 0, 2, 0, 12, 12, 16, 12, 12, 12, 12, 16, 30, 30, 0, 31, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 11, 11, 13, 0, 0, 0, 0, 0, 10, 0, 4, 4, 5, 49, 49, 50, 0, 0, 11, 11, 13, 51, 51, 52, 12, 12, 53, 53, 16, 53, 0, 0, 0, 21, 21, 22, 23, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 54, 0, 0, 12, 12, 16, 12, 55, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 21, 21, 22, 0, 0, 2, 0, 12, 12, 16, 0, 21, 21, 0, 22, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 21, 21, 22, 37, 0, 0, 2, 39, 0, 12, 12, 16, 41, 0, 0, 10, 0, 0, 0, 2, 50, 0, 12, 12, 16, 52, 12, 12, 53, 53, 16, 12, 53, 12, 0, 2, 0, 12, 16, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 54, 0, 54, 0, 0, 12, 12, 16, 55, 12, 55, 0, 0, 2, 0, 0, 12, 12, 16, 12, 56, 56, 56, 56, 57, 56, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 42, 42, 43, 43, 44, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 4, 4, 5, 45, 0, 0, 0, 0, 11, 11, 13, 46, 12, 4, 4, 0, 5, 0, 0, 2, 0, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 4, 4, 0, 5, 0, 0, 0, 11, 11, 13, 0, 0, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 12, 16, 30, 30, 31, 0, 4, 4, 5, 0, 0, 11, 11, 13, 47, 25, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 30, 30, 31, 0, 0, 2, 24, 0, 12, 12, 16, 25, 43, 43, 43, 43, 48, 43, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 12, 12, 16, 12, 0, 0, 2, 0, 12, 12, 16, 12, 12, 12, 12, 16, 30, 30, 0, 31, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 11, 11, 13, 0, 0, 0, 0, 0, 10, 0, 4, 4, 5, 49, 50, 0, 0, 11, 11, 13, 51, 52, 12, 12, 53, 53, 16, 12, 53, 12, 26, 26, 26, 26, 27, 26, 28, 29, 0, 0, 1, 1, 2, 1, 3, 0, 30, 30, 0, 0, 31, 32, 0, 32, 7, 23, 4, 4, 0, 0, 5, 33, 0, 33, 24, 0, 0, 4, 4, 5, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 11, 11, 12, 12, 13, 12, 15, 4, 4, 5, 0, 0, 2, 0, 12, 12, 16, 17, 18, 18, 1, 1, 19, 20, 1, 20, 0, 0, 2, 0, 0, 0, 21, 21, 0, 0, 22, 0, 21, 23, 0, 0, 2, 0, 0, 24, 0, 12, 12, 16, 12, 12, 25, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 12, 12, 16, 12, 0, 2, 34, 34, 0, 12, 16, 35, 35, 0, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 54, 0, 0, 12, 12, 16, 12, 55, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 21, 21, 22, 0, 0, 2, 0, 12, 12, 16, 0, 21, 21, 0, 22, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 21, 21, 22, 37, 0, 0, 2, 39, 0, 12, 12, 16, 41, 0, 0, 10, 0, 0, 0, 2, 50, 0, 12, 12, 16, 52, 12, 12, 53, 53, 16, 12, 53, 12, 0, 2, 0, 12, 16, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 54, 0, 54, 0, 0, 12, 12, 16, 55, 12, 55, 0, 0, 2, 0, 0, 12, 12, 16, 12, 56, 56, 56, 56, 57, 56, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 11, 11, 13, 47, 12, 47, 25, 4, 4, 0, 0, 5, 0, 0, 2, 0, 4, 4, 5, 0, 0, 0, 11, 11, 13, 12, 42, 42, 43, 43, 44, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 4, 4, 5, 45, 0, 45, 0, 0, 0, 11, 11, 13, 46, 12, 46, 4, 4, 0, 5, 0, 0, 2, 0, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 4, 4, 0, 5, 0, 0, 0, 11, 11, 13, 0, 0, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 30, 30, 0, 31, 0, 4, 4, 5, 0, 0, 11, 11, 13, 30, 30, 31, 0, 0, 2, 24, 0, 12, 12, 16, 25, 43, 43, 43, 43, 48, 43, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 12, 12, 16, 12, 0, 0, 2, 0, 12, 12, 16, 12, 12, 12, 12, 16, 0, 0, 0, 30, 30, 0, 31, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 30, 30, 31, 36, 36, 37, 4, 4, 5, 38, 38, 39, 0, 0, 11, 11, 13, 40, 40, 41, 0, 0, 10, 0, 4, 4, 5, 49, 49, 50, 0, 0, 11, 11, 13, 51, 51, 52, 12, 12, 53, 53, 16, 53, 0, 0, 0, 21, 21, 22, 23, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 22, 23, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 54, 0, 0, 12, 12, 16, 12, 55, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 21, 21, 22, 0, 0, 2, 0, 12, 12, 16, 0, 21, 21, 0, 22, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 21, 21, 22, 37, 0, 0, 2, 39, 0, 12, 12, 16, 41, 0, 0, 10, 0, 0, 0, 2, 50, 0, 12, 12, 16, 52, 12, 12, 53, 53, 16, 12, 53, 12, 0, 2, 0, 12, 16, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 54, 0, 54, 0, 0, 12, 12, 16, 55, 12, 55, 0, 0, 2, 0, 0, 12, 12, 16, 12, 56, 56, 56, 56, 57, 56, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 12, 12, 16, 12, 26, 26, 58, 0, 0, 2, 0, 12, 12, 16, 42, 42, 43, 43, 44, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 4, 4, 0, 5, 0, 0, 2, 0, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 48, 43, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 12, 16, 12, 12, 12, 12, 16, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 12, 53, 53, 16, 53, 0, 0, 1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 54, 0, 0, 12, 12, 16, 12, 55, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 16, 0, 0, 0, 0, 0, 0, 21, 21, 22, 0, 0, 2, 0, 12, 12, 16, 0, 21, 21, 0, 22, 0, 0, 2, 0, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 21, 21, 22, 37, 0, 0, 2, 39, 0, 12, 12, 16, 41, 0, 0, 10, 0, 0, 0, 2, 50, 0, 12, 12, 16, 52, 12, 12, 53, 53, 16, 12, 53, 12, 0, 2, 0, 12, 16, 43, 43, 43, 43, 48, 43, 43, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 54, 0, 54, 0, 0, 12, 12, 16, 55, 12, 55, 0, 0, 2, 0, 0, 12, 12, 16, 12, 56, 56, 56, 56, 57, 56, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 2, 0, 12, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 12, 12, 16, 0, 12, 12, 12, 12, 16, 12, 12, 0, 0, 0, 4, 4, 0, 0, 5, 0, 0, 2, 0, 0, 0, 42, 42, 44, 0, 0, 2, 0, 0, 12, 12, 16, 12, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 12, 12, 12, 12, 16, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 0, 43, 43, 43, 43, 48, 43, 0, 0, 0, 2, 0, 12, 12, 12, 12, 16, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 10, 0, 0, 0, 0, 0, 8, 8, 8, 9, 8, 0, 0, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 12, 53, 53, 16, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 60, 61, 59, 0, 0, 2, 62, 0, 0, 63, 63, 63, 63, 64, 63, 28, 65, 30, 30, 0, 31, 32, 0, 23, 4, 4, 5, 33, 0, 24, 34, 34, 2, 34, 35, 35, 16, 35, 63, 63, 63, 63, 64, 63, 30, 30, 0, 31, 0, 23, 4, 4, 5, 0, 24, 11, 11, 13, 47, 12, 25, 4, 4, 5, 0, 11, 11, 13, 12, 26, 26, 27, 0, 2, 12, 12, 16, 12, 0, 2, 12, 16, 4, 4, 5, 45, 0, 0, 11, 11, 13, 46, 12, 4, 4, 5, 11, 11, 13, 45, 45, 2, 46, 46, 16, 30, 30, 31, 0, 4, 4, 5, 11, 11, 13, 30, 30, 31, 33, 33, 2, 24, 47, 47, 16, 25, 45, 45, 2, 0, 46, 46, 16, 30, 30, 0, 31, 33, 33, 2, 47, 47, 16, 30, 30, 31, 36, 37, 4, 4, 5, 38, 39, 11, 11, 13, 40, 41, 4, 4, 5, 49, 50, 11, 11, 13, 51, 52, 32, 32, 22, 23, 33, 33, 2, 47, 47, 16, 11, 11, 13, 12, 25, 4, 4, 5, 0, 11, 11, 13, 12, 0, 30, 30, 31, 0, 4, 4, 5, 11, 11, 13, 30, 30, 31, 33, 33, 2, 24, 47, 47, 16, 25, 0, 0, 30, 30, 0, 31, 33, 33, 2, 47, 47, 16, 30, 30, 31, 37, 4, 4, 5, 39, 11, 11, 13, 41, 4, 4, 5, 50, 11, 11, 13, 52, 32, 32, 22, 23, 33, 33, 2, 47, 47, 16 ] class << self attr_accessor :_address_lists_eof_actions private :_address_lists_eof_actions, :_address_lists_eof_actions= end self._address_lists_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 34, 35, 0, 32, 33, 47, 34, 34, 35, 0, 0, 12, 0, 12, 45, 45, 46, 45, 45, 45, 46, 45, 45, 46, 32, 33, 47, 32, 33, 47, 45, 45, 46, 45, 32, 33, 47, 32, 36, 38, 40, 49, 51, 32, 33, 47, 47, 34, 34, 35, 45, 32, 33, 47, 32, 33, 47, 45, 32, 33, 47, 32, 36, 38, 40, 49, 51, 32, 33, 47, 0 ] class << self attr_accessor :address_lists_start end self.address_lists_start = 1334; class << self attr_accessor :address_lists_first_final end self.address_lists_first_final = 1334; class << self attr_accessor :address_lists_error end self.address_lists_error = 0; class << self attr_accessor :address_lists_en_comment_tail end self.address_lists_en_comment_tail = 1329; class << self attr_accessor :address_lists_en_main end self.address_lists_en_main = 1334; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 14059 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" begin p ||= 0 pe ||= data.length cs = address_lists_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" # line 14069 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _address_lists_index_offsets[cs] _slen = _address_lists_key_spans[cs] _trans = if ( _slen > 0 && _address_lists_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _address_lists_trans_keys[_keys + 1] ) then _address_lists_indicies[ _inds + ( data_unpacked[p]) - _address_lists_trans_keys[_keys] ] else _address_lists_indicies[ _inds + _slen ] end cs = _address_lists_trans_targs[_trans] if _address_lists_trans_actions[_trans] != 0 case _address_lists_trans_actions[_trans] when 34 then # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 3 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 12 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 59 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 54 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 43 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 24 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 21 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 1 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 50 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 20 then # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 4 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 10 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 8 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 2 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 62 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 28 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 29 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end when 35 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 17 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 55 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 25 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 53 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 52 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 11 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 16 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 60 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 61 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 45 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 48 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 33 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 39 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 23 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 22 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 18 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 49 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 56 then # line 33 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(30, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 7 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 42 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 6 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 19 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(16, p) end when 30 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 9 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 5 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 26 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 46 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 47 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 41 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 51 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 15 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 14 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 19 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(16, p) end when 13 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 65 then # line 20 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(17, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end when 38 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 32 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 37 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 19 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 57 then # line 33 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(30, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end when 44 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 31 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 27 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 40 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 63 then # line 20 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(17, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 36 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 58 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 64 then # line 20 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(17, p) end # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 1329 _goto_level = _again next end end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 14709 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _address_lists_eof_actions[cs] when 34 then # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 12 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 35 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 45 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 33 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 49 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 46 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 47 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 51 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 38 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 32 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 40 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 36 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end # line 14839 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" if p == eof && cs >= # line 14853 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb" 1334 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl000066400000000000000000000012711267453234600267630ustar00rootroot00000000000000%%{ machine address_lists; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := address_lists; }%% module Mail module Parsers module Ragel module AddressListsMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb000066400000000000000000000523531267453234600276110ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" module Mail module Parsers module Ragel module ContentDispositionMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" class << self attr_accessor :_content_disposition_trans_keys private :_content_disposition_trans_keys, :_content_disposition_trans_keys= end self._content_disposition_trans_keys = [ 0, 0, 9, 59, 10, 10, 9, 32, 9, 59, 9, 126, 10, 10, 9, 32, 33, 126, 9, 126, 9, 40, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 0, 127, 9, 40, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 59, 9, 59, 9, 126, 9, 59, 9, 59, 9, 126, 0, 0, 0 ] class << self attr_accessor :_content_disposition_key_spans private :_content_disposition_key_spans, :_content_disposition_key_spans= end self._content_disposition_key_spans = [ 0, 51, 1, 24, 51, 118, 1, 24, 94, 118, 32, 1, 24, 127, 127, 1, 24, 1, 24, 128, 32, 1, 24, 118, 127, 127, 1, 24, 128, 118, 51, 51, 118, 51, 51, 118, 0 ] class << self attr_accessor :_content_disposition_index_offsets private :_content_disposition_index_offsets, :_content_disposition_index_offsets= end self._content_disposition_index_offsets = [ 0, 0, 52, 54, 79, 131, 250, 252, 277, 372, 491, 524, 526, 551, 679, 807, 809, 834, 836, 861, 990, 1023, 1025, 1050, 1169, 1297, 1425, 1427, 1452, 1581, 1700, 1752, 1804, 1923, 1975, 2027, 2146 ] class << self attr_accessor :_content_disposition_indicies private :_content_disposition_indicies, :_content_disposition_indicies= end self._content_disposition_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 4, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 11, 11, 11, 11, 11, 11, 11, 12, 1, 11, 11, 11, 11, 11, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 13, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 14, 14, 14, 14, 14, 14, 14, 1, 1, 14, 14, 14, 14, 14, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 15, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 16, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 18, 19, 18, 18, 18, 18, 18, 20, 1, 18, 18, 18, 18, 18, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 21, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 1, 23, 1, 1, 1, 1, 1, 24, 1, 25, 1, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 1, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 29, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 30, 30, 30, 30, 30, 30, 30, 30, 30, 1, 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 32, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 1, 34, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 35, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 1, 37, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 39, 1, 1, 1, 1, 1, 40, 1, 41, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 9, 1, 1, 1, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 44, 44, 44, 44, 44, 44, 44, 45, 1, 44, 44, 44, 44, 44, 1, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 1, 1, 1, 1, 1, 1, 1, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 1, 1, 1, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 1, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 48, 49, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 51, 51, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 54, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 55, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 56, 1, 51, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51, 1, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 1, 57, 1, 1, 1, 58, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 59, 59, 59, 59, 59, 59, 59, 60, 1, 59, 59, 59, 59, 59, 1, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 1, 61, 1, 1, 1, 1, 1, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 1, 1, 1, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 1, 62, 1, 1, 1, 63, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 62, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 65, 1, 66, 1, 1, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 66, 1, 1, 1, 1, 1, 1, 1, 68, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 1, 70, 1, 1, 1, 71, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 72, 1, 72, 72, 72, 72, 72, 73, 1, 72, 72, 72, 72, 72, 1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 1, 65, 1, 72, 1, 1, 1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 1, 1, 1, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 1, 42, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 76, 1, 1, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 79, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 81, 81, 81, 81, 81, 81, 81, 82, 1, 81, 81, 81, 81, 81, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 83, 1, 1, 1, 1, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 0 ] class << self attr_accessor :_content_disposition_trans_targs private :_content_disposition_trans_targs, :_content_disposition_trans_targs= end self._content_disposition_trans_targs = [ 1, 0, 2, 4, 5, 3, 1, 2, 4, 5, 6, 8, 23, 7, 8, 9, 10, 11, 32, 13, 20, 10, 11, 13, 20, 12, 14, 15, 30, 19, 14, 15, 30, 19, 16, 18, 30, 10, 11, 13, 20, 22, 33, 6, 8, 23, 25, 26, 25, 36, 28, 25, 26, 25, 36, 28, 27, 1, 2, 35, 4, 5, 30, 17, 31, 5, 30, 17, 31, 5, 33, 21, 32, 34, 21, 34, 33, 21, 34, 1, 2, 35, 4, 5 ] class << self attr_accessor :_content_disposition_trans_actions private :_content_disposition_trans_actions, :_content_disposition_trans_actions= end self._content_disposition_trans_actions = [ 0, 0, 0, 1, 0, 0, 2, 2, 3, 2, 0, 4, 1, 0, 0, 5, 6, 6, 6, 6, 7, 0, 0, 0, 1, 0, 8, 8, 9, 8, 0, 0, 10, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 2, 11, 3, 12, 12, 13, 14, 12, 0, 0, 1, 15, 0, 0, 16, 16, 17, 18, 16, 19, 19, 20, 19, 21, 21, 22, 21, 19, 19, 0, 23, 0, 1, 2, 2, 3, 24, 24, 0, 25, 24 ] class << self attr_accessor :_content_disposition_eof_actions private :_content_disposition_eof_actions, :_content_disposition_eof_actions= end self._content_disposition_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 21, 19, 0, 2, 24, 0 ] class << self attr_accessor :content_disposition_start end self.content_disposition_start = 29; class << self attr_accessor :content_disposition_first_final end self.content_disposition_first_final = 29; class << self attr_accessor :content_disposition_error end self.content_disposition_error = 0; class << self attr_accessor :content_disposition_en_comment_tail end self.content_disposition_en_comment_tail = 24; class << self attr_accessor :content_disposition_en_main end self.content_disposition_en_main = 29; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 416 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" begin p ||= 0 pe ||= data.length cs = content_disposition_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" # line 426 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _content_disposition_index_offsets[cs] _slen = _content_disposition_key_spans[cs] _trans = if ( _slen > 0 && _content_disposition_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _content_disposition_trans_keys[_keys + 1] ) then _content_disposition_indicies[ _inds + ( data_unpacked[p]) - _content_disposition_trans_keys[_keys] ] else _content_disposition_indicies[ _inds + _slen ] end cs = _content_disposition_trans_targs[_trans] if _content_disposition_trans_actions[_trans] != 0 case _content_disposition_trans_actions[_trans] when 2 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 12 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 24 then # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end when 17 then # line 14 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(11, p) end when 5 then # line 35 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(32, p) end when 4 then # line 36 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(33, p) end when 19 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 6 then # line 38 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(35, p) end when 10 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 8 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 1 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 15 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 11 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 36 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(33, p) end when 21 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 13 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 14 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 25 then # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 16 then # line 14 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(11, p) end # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end when 23 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 7 then # line 38 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(35, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end when 9 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 20 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 22 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 18 then # line 14 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(11, p) end # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 24 _goto_level = _again next end end # line 682 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _content_disposition_eof_actions[cs] when 2 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 24 then # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end when 19 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 21 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 16 then # line 14 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(11, p) end # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(10, p) end # line 726 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" if p == eof && cs >= # line 740 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb" 29 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl000066400000000000000000000013131267453234600302130ustar00rootroot00000000000000%%{ machine content_disposition; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := content_disposition; }%% module Mail module Parsers module Ragel module ContentDispositionMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb000066400000000000000000000411641267453234600270530ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" module Mail module Parsers module Ragel module ContentLocationMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" class << self attr_accessor :_content_location_trans_keys private :_content_location_trans_keys, :_content_location_trans_keys= end self._content_location_trans_keys = [ 0, 0, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 1, 127, 10, 10, 9, 32, -128, -1, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 40, 9, 40, 1, 127, 1, 127, 1, 127, 1, 127, 9, 126, 0, 0, 0 ] class << self attr_accessor :_content_location_key_spans private :_content_location_key_spans, :_content_location_key_spans= end self._content_location_key_spans = [ 0, 118, 1, 24, 1, 24, 127, 1, 24, 128, 1, 24, 118, 127, 127, 1, 24, 128, 118, 32, 32, 127, 127, 127, 127, 118, 0 ] class << self attr_accessor :_content_location_index_offsets private :_content_location_index_offsets, :_content_location_index_offsets= end self._content_location_index_offsets = [ 0, 0, 119, 121, 146, 148, 173, 301, 303, 328, 457, 459, 484, 603, 731, 859, 861, 886, 1015, 1134, 1167, 1200, 1328, 1456, 1584, 1712, 1831 ] class << self attr_accessor :_content_location_indicies private :_content_location_indicies, :_content_location_indicies= end self._content_location_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 6, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 7, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 13, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 14, 1, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 1, 16, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 18, 19, 18, 18, 18, 18, 18, 20, 1, 18, 18, 18, 18, 18, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 21, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 23, 24, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 25, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 29, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 31, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 1, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 32, 1, 1, 1, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 34, 34, 34, 34, 34, 34, 34, 35, 1, 34, 34, 34, 34, 34, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 34, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 8, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 37, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 40, 1, 41, 41, 41, 41, 41, 41, 41, 41, 42, 1, 41, 41, 43, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 44, 45, 44, 44, 44, 44, 44, 46, 41, 44, 44, 44, 44, 44, 41, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 41, 41, 41, 44, 41, 41, 41, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 41, 47, 41, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 41, 1, 9, 9, 9, 9, 9, 9, 9, 9, 15, 1, 9, 9, 48, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 9, 11, 9, 9, 9, 9, 9, 49, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 50, 1, 9, 9, 51, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 50, 9, 11, 9, 9, 9, 9, 9, 52, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 12, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 53, 1, 9, 9, 54, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 53, 55, 56, 55, 55, 55, 55, 55, 57, 9, 55, 55, 55, 55, 55, 9, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 9, 9, 9, 55, 9, 9, 9, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 9, 12, 9, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 9, 1, 32, 1, 1, 1, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 34, 34, 34, 34, 34, 34, 34, 58, 1, 34, 34, 34, 34, 34, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 34, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 1, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 1, 1, 0 ] class << self attr_accessor :_content_location_trans_targs private :_content_location_trans_targs, :_content_location_trans_targs= end self._content_location_trans_targs = [ 1, 0, 2, 18, 21, 12, 3, 5, 19, 6, 7, 19, 9, 8, 11, 22, 1, 2, 18, 21, 12, 14, 15, 14, 26, 17, 14, 15, 14, 26, 17, 16, 19, 4, 18, 20, 4, 20, 19, 4, 20, 6, 22, 10, 24, 25, 23, 9, 10, 23, 22, 10, 23, 22, 10, 24, 25, 23, 20 ] class << self attr_accessor :_content_location_trans_actions private :_content_location_trans_actions, :_content_location_trans_actions= end self._content_location_trans_actions = [ 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 4, 5, 5, 6, 7, 7, 8, 9, 7, 0, 0, 2, 10, 0, 0, 11, 11, 0, 12, 0, 2, 4, 4, 6, 13, 14, 14, 13, 15, 16, 13, 0, 2, 4, 4, 6, 11, 11, 0, 3, 12, 17 ] class << self attr_accessor :_content_location_eof_actions private :_content_location_eof_actions, :_content_location_eof_actions= end self._content_location_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 11, 0, 4, 11, 11, 0 ] class << self attr_accessor :content_location_start end self.content_location_start = 1; class << self attr_accessor :content_location_first_final end self.content_location_first_final = 18; class << self attr_accessor :content_location_error end self.content_location_error = 0; class << self attr_accessor :content_location_en_comment_tail end self.content_location_en_comment_tail = 13; class << self attr_accessor :content_location_en_main end self.content_location_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 365 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" begin p ||= 0 pe ||= data.length cs = content_location_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" # line 375 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _content_location_index_offsets[cs] _slen = _content_location_key_spans[cs] _trans = if ( _slen > 0 && _content_location_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _content_location_trans_keys[_keys + 1] ) then _content_location_indicies[ _inds + ( data_unpacked[p]) - _content_location_trans_keys[_keys] ] else _content_location_indicies[ _inds + _slen ] end cs = _content_location_trans_targs[_trans] if _content_location_trans_actions[_trans] != 0 case _content_location_trans_actions[_trans] when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 7 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 3 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 13 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 11 then # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end when 1 then # line 50 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(47, p) end when 2 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end when 10 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 5 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 50 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(47, p) end when 6 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end when 8 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end when 9 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 15 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 14 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end when 12 then # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end when 17 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end when 16 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 13 _goto_level = _again next end end # line 563 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _content_location_eof_actions[cs] when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 11 then # line 49 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(46, p) end # line 589 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" if p == eof && cs >= # line 603 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb" 18 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl000066400000000000000000000013021267453234600274550ustar00rootroot00000000000000%%{ machine content_location; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := content_location; }%% module Mail module Parsers module Ragel module ContentLocationMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb000066400000000000000000000304421267453234600307320ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" module Mail module Parsers module Ragel module ContentTransferEncodingMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" class << self attr_accessor :_content_transfer_encoding_trans_keys private :_content_transfer_encoding_trans_keys, :_content_transfer_encoding_trans_keys= end self._content_transfer_encoding_trans_keys = [ 0, 0, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 59, 9, 59, 9, 40, 9, 40, 0, 0, 0 ] class << self attr_accessor :_content_transfer_encoding_key_spans private :_content_transfer_encoding_key_spans, :_content_transfer_encoding_key_spans= end self._content_transfer_encoding_key_spans = [ 0, 118, 1, 24, 1, 24, 1, 24, 118, 127, 127, 1, 24, 128, 118, 51, 51, 32, 32, 0 ] class << self attr_accessor :_content_transfer_encoding_index_offsets private :_content_transfer_encoding_index_offsets, :_content_transfer_encoding_index_offsets= end self._content_transfer_encoding_index_offsets = [ 0, 0, 119, 121, 146, 148, 173, 175, 200, 319, 447, 575, 577, 602, 731, 850, 902, 954, 987, 1020 ] class << self attr_accessor :_content_transfer_encoding_indicies private :_content_transfer_encoding_indicies, :_content_transfer_encoding_indicies= end self._content_transfer_encoding_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 3, 3, 3, 3, 3, 3, 4, 1, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 5, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 8, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 10, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 12, 12, 12, 12, 12, 12, 12, 13, 1, 12, 12, 12, 12, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 21, 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 23, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 24, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 25, 1, 1, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 27, 27, 27, 27, 27, 27, 27, 28, 1, 27, 27, 27, 27, 27, 1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 29, 1, 1, 1, 1, 1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 1, 1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 7, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 32, 1, 1, 1, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 1, 9, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 37, 1, 35, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 1, 1, 1, 1, 1, 1, 1, 39, 1, 1, 0 ] class << self attr_accessor :_content_transfer_encoding_trans_targs private :_content_transfer_encoding_trans_targs, :_content_transfer_encoding_trans_targs= end self._content_transfer_encoding_trans_targs = [ 1, 0, 2, 14, 8, 3, 5, 15, 7, 17, 1, 2, 14, 8, 10, 11, 10, 19, 13, 10, 11, 10, 19, 13, 12, 15, 4, 14, 16, 17, 4, 16, 15, 4, 16, 17, 6, 18, 6, 18 ] class << self attr_accessor :_content_transfer_encoding_trans_actions private :_content_transfer_encoding_trans_actions, :_content_transfer_encoding_trans_actions= end self._content_transfer_encoding_trans_actions = [ 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 3, 3, 4, 5, 6, 6, 7, 8, 6, 0, 0, 2, 9, 0, 0, 10, 10, 0, 11, 10, 0, 2, 3, 3, 5, 3, 0, 2, 3, 5 ] class << self attr_accessor :_content_transfer_encoding_eof_actions private :_content_transfer_encoding_eof_actions, :_content_transfer_encoding_eof_actions= end self._content_transfer_encoding_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 0, 3, 0 ] class << self attr_accessor :content_transfer_encoding_start end self.content_transfer_encoding_start = 1; class << self attr_accessor :content_transfer_encoding_first_final end self.content_transfer_encoding_first_final = 14; class << self attr_accessor :content_transfer_encoding_error end self.content_transfer_encoding_error = 0; class << self attr_accessor :content_transfer_encoding_en_comment_tail end self.content_transfer_encoding_en_comment_tail = 9; class << self attr_accessor :content_transfer_encoding_en_main end self.content_transfer_encoding_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 251 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" begin p ||= 0 pe ||= data.length cs = content_transfer_encoding_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" # line 261 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _content_transfer_encoding_index_offsets[cs] _slen = _content_transfer_encoding_key_spans[cs] _trans = if ( _slen > 0 && _content_transfer_encoding_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _content_transfer_encoding_trans_keys[_keys + 1] ) then _content_transfer_encoding_indicies[ _inds + ( data_unpacked[p]) - _content_transfer_encoding_trans_keys[_keys] ] else _content_transfer_encoding_indicies[ _inds + _slen ] end cs = _content_transfer_encoding_trans_targs[_trans] if _content_transfer_encoding_trans_actions[_trans] != 0 case _content_transfer_encoding_trans_actions[_trans] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 6 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 10 then # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(14, p) end when 1 then # line 18 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(15, p) end when 2 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 9 _goto_level = _again next end end when 9 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 18 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(15, p) end when 5 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 9 _goto_level = _again next end end when 7 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 9 _goto_level = _again next end end when 8 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 11 then # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(14, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 9 _goto_level = _again next end end # line 396 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _content_transfer_encoding_eof_actions[cs] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 10 then # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(14, p) end # line 422 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" if p == eof && cs >= # line 436 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb" 14 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl000066400000000000000000000013341267453234600313440ustar00rootroot00000000000000%%{ machine content_transfer_encoding; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := content_transfer_encoding; }%% module Mail module Parsers module Ragel module ContentTransferEncodingMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb000066400000000000000000000552761267453234600262350ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" module Mail module Parsers module Ragel module ContentTypeMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" class << self attr_accessor :_content_type_trans_keys private :_content_type_trans_keys, :_content_type_trans_keys= end self._content_type_trans_keys = [ 0, 0, 33, 126, 33, 126, 33, 126, 9, 126, 10, 10, 9, 32, 33, 126, 9, 126, 9, 40, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 0, 127, 9, 40, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 59, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 0, 0, 0 ] class << self attr_accessor :_content_type_key_spans private :_content_type_key_spans, :_content_type_key_spans= end self._content_type_key_spans = [ 0, 94, 94, 94, 118, 1, 24, 94, 118, 32, 1, 24, 127, 127, 1, 24, 1, 24, 118, 118, 1, 24, 118, 128, 32, 1, 24, 118, 127, 127, 1, 24, 128, 118, 51, 118, 118, 118, 118, 118, 0 ] class << self attr_accessor :_content_type_index_offsets private :_content_type_index_offsets, :_content_type_index_offsets= end self._content_type_index_offsets = [ 0, 0, 95, 190, 285, 404, 406, 431, 526, 645, 678, 680, 705, 833, 961, 963, 988, 990, 1015, 1134, 1253, 1255, 1280, 1399, 1528, 1561, 1563, 1588, 1707, 1835, 1963, 1965, 1990, 2119, 2238, 2290, 2409, 2528, 2647, 2766, 2885 ] class << self attr_accessor :_content_type_indicies private :_content_type_indicies, :_content_type_indicies= end self._content_type_indicies = [ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 8, 1, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 9, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 10, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 11, 11, 11, 11, 11, 11, 11, 1, 1, 11, 11, 11, 11, 11, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 12, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 13, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 15, 16, 15, 15, 15, 15, 15, 17, 1, 15, 15, 15, 15, 15, 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 1, 1, 1, 15, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 1, 18, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 1, 20, 1, 1, 1, 1, 1, 21, 1, 22, 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 23, 23, 24, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 25, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 26, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 27, 27, 28, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 29, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 30, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 31, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 32, 1, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 1, 34, 1, 1, 1, 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 7, 7, 7, 7, 7, 7, 7, 36, 1, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 9, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 34, 1, 1, 1, 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 7, 7, 7, 7, 7, 7, 7, 36, 1, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 37, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 38, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 38, 40, 40, 40, 40, 40, 40, 40, 41, 1, 40, 40, 40, 40, 40, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 1, 1, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 1, 42, 1, 1, 1, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 44, 1, 1, 1, 1, 1, 45, 1, 46, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 48, 1, 1, 1, 49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 40, 40, 40, 40, 40, 40, 40, 50, 1, 40, 40, 40, 40, 40, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 51, 1, 1, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 52, 52, 52, 52, 52, 52, 52, 52, 52, 1, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 55, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 56, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 1, 57, 57, 57, 57, 57, 57, 57, 57, 57, 1, 57, 57, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 59, 60, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 61, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 1, 62, 1, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 1, 63, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 65, 65, 65, 65, 65, 65, 65, 66, 1, 65, 65, 65, 65, 65, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 67, 1, 1, 1, 1, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 1, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 7, 7, 7, 7, 7, 7, 7, 70, 1, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 71, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 72, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 72, 40, 40, 40, 40, 40, 40, 40, 74, 1, 40, 40, 40, 40, 40, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 75, 1, 1, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 76, 1, 1, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 78, 1, 78, 78, 78, 78, 78, 79, 1, 78, 78, 78, 78, 78, 1, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 1, 71, 1, 78, 1, 1, 1, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 1, 1, 1, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 1, 47, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 7, 7, 7, 7, 7, 7, 7, 81, 1, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 9, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 82, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 82, 40, 40, 40, 40, 40, 40, 40, 84, 1, 40, 40, 40, 40, 40, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 51, 1, 1, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 1, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 1, 1, 0 ] class << self attr_accessor :_content_type_trans_targs private :_content_type_trans_targs, :_content_type_trans_targs= end self._content_type_trans_targs = [ 2, 0, 2, 3, 33, 4, 5, 7, 27, 18, 6, 7, 8, 9, 10, 37, 12, 24, 9, 10, 12, 24, 11, 13, 14, 34, 23, 13, 14, 34, 23, 15, 17, 35, 19, 20, 22, 21, 19, 20, 7, 22, 9, 10, 12, 24, 26, 38, 4, 5, 27, 18, 29, 30, 29, 40, 32, 29, 30, 29, 40, 32, 31, 4, 5, 33, 27, 18, 35, 16, 36, 18, 35, 16, 36, 18, 38, 25, 37, 39, 25, 39, 38, 25, 39 ] class << self attr_accessor :_content_type_trans_actions private :_content_type_trans_actions, :_content_type_trans_actions= end self._content_type_trans_actions = [ 1, 0, 0, 2, 3, 0, 0, 4, 5, 0, 0, 0, 6, 7, 7, 7, 7, 8, 0, 0, 0, 5, 0, 9, 9, 10, 9, 0, 0, 11, 0, 0, 0, 0, 0, 0, 5, 0, 12, 12, 13, 14, 12, 12, 12, 14, 0, 0, 12, 12, 14, 12, 15, 15, 16, 17, 15, 0, 0, 5, 18, 0, 0, 19, 19, 0, 20, 19, 21, 21, 22, 21, 23, 23, 24, 23, 21, 21, 0, 25, 0, 5, 12, 12, 14 ] class << self attr_accessor :_content_type_eof_actions private :_content_type_eof_actions, :_content_type_eof_actions= end self._content_type_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 21, 21, 23, 21, 0, 12, 0 ] class << self attr_accessor :content_type_start end self.content_type_start = 1; class << self attr_accessor :content_type_first_final end self.content_type_first_final = 33; class << self attr_accessor :content_type_error end self.content_type_error = 0; class << self attr_accessor :content_type_en_comment_tail end self.content_type_en_comment_tail = 28; class << self attr_accessor :content_type_en_main end self.content_type_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 513 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" begin p ||= 0 pe ||= data.length cs = content_type_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" # line 523 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _content_type_index_offsets[cs] _slen = _content_type_key_spans[cs] _trans = if ( _slen > 0 && _content_type_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _content_type_trans_keys[_keys + 1] ) then _content_type_indicies[ _inds + ( data_unpacked[p]) - _content_type_trans_keys[_keys] ] else _content_type_indicies[ _inds + _slen ] end cs = _content_type_trans_targs[_trans] if _content_type_trans_actions[_trans] != 0 case _content_type_trans_actions[_trans] when 12 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 15 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 2 then # line 25 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(22, p) end when 1 then # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(23, p) end when 6 then # line 35 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(32, p) end when 4 then # line 36 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(33, p) end when 21 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 7 then # line 38 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(35, p) end when 11 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 9 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 19 then # line 45 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(42, p) end when 3 then # line 46 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(43, p) end when 5 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 18 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 13 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 36 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(33, p) end when 23 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 14 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 16 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 17 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 25 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 8 then # line 38 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(35, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 10 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 20 then # line 45 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(42, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end when 22 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 24 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 28 _goto_level = _again next end end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end # line 763 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _content_type_eof_actions[cs] when 12 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 21 then # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end when 19 then # line 45 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(42, p) end when 23 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 37 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(34, p) end # line 800 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" if p == eof && cs >= # line 814 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb" 33 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl000066400000000000000000000012661267453234600266370ustar00rootroot00000000000000%%{ machine content_type; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := content_type; }%% module Mail module Parsers module Ragel module ContentTypeMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb000066400000000000000000000541751267453234600254520ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" module Mail module Parsers module Ragel module DateTimeMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" class << self attr_accessor :_date_time_trans_keys private :_date_time_trans_keys, :_date_time_trans_keys= end self._date_time_trans_keys = [ 0, 0, 9, 87, 9, 87, 10, 10, 9, 32, 9, 87, 9, 83, 9, 83, 10, 10, 9, 32, 9, 83, 112, 117, 114, 114, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 57, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 10, 10, 9, 32, 9, 58, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 9, 122, 10, 10, 9, 32, 9, 58, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 40, 9, 122, 10, 10, 9, 32, 9, 40, 48, 57, 48, 57, 48, 57, 48, 57, 10, 10, 9, 32, 84, 84, 103, 103, 101, 101, 99, 99, 101, 101, 98, 98, 97, 117, 110, 110, 108, 110, 97, 97, 114, 121, 111, 111, 118, 118, 99, 99, 116, 116, 101, 101, 112, 112, 114, 114, 105, 105, 9, 44, 10, 10, 9, 32, 9, 44, 9, 57, 9, 57, 10, 10, 9, 32, 9, 57, 111, 111, 110, 110, 97, 117, 116, 116, 104, 117, 117, 117, 101, 101, 101, 101, 100, 100, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 40, 9, 40, 9, 40, 9, 83, 9, 77, 9, 84, 0, 0, 0 ] class << self attr_accessor :_date_time_key_spans private :_date_time_key_spans, :_date_time_key_spans= end self._date_time_key_spans = [ 0, 79, 79, 1, 24, 79, 75, 75, 1, 24, 75, 6, 1, 49, 1, 24, 49, 10, 49, 49, 1, 24, 49, 10, 50, 1, 24, 50, 49, 1, 24, 49, 10, 50, 114, 1, 24, 50, 49, 1, 24, 49, 10, 32, 114, 1, 24, 32, 10, 10, 10, 10, 1, 24, 1, 1, 1, 1, 1, 1, 21, 1, 3, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 24, 36, 49, 49, 1, 24, 49, 1, 1, 21, 1, 14, 1, 1, 1, 1, 127, 127, 1, 24, 128, 32, 32, 32, 75, 69, 76, 0 ] class << self attr_accessor :_date_time_index_offsets private :_date_time_index_offsets, :_date_time_index_offsets= end self._date_time_index_offsets = [ 0, 0, 80, 160, 162, 187, 267, 343, 419, 421, 446, 522, 529, 531, 581, 583, 608, 658, 669, 719, 769, 771, 796, 846, 857, 908, 910, 935, 986, 1036, 1038, 1063, 1113, 1124, 1175, 1290, 1292, 1317, 1368, 1418, 1420, 1445, 1495, 1506, 1539, 1654, 1656, 1681, 1714, 1725, 1736, 1747, 1758, 1760, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1819, 1821, 1825, 1827, 1836, 1838, 1840, 1842, 1844, 1846, 1848, 1850, 1852, 1889, 1891, 1916, 1953, 2003, 2053, 2055, 2080, 2130, 2132, 2134, 2156, 2158, 2173, 2175, 2177, 2179, 2181, 2309, 2437, 2439, 2464, 2593, 2626, 2659, 2692, 2768, 2838, 2915 ] class << self attr_accessor :_date_time_indicies private :_date_time_indicies, :_date_time_indicies= end self._date_time_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 8, 1, 1, 9, 1, 10, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 8, 1, 1, 9, 1, 14, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 15, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 1, 1, 1, 1, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 21, 22, 1, 1, 23, 1, 24, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 1, 1, 1, 1, 1, 1, 26, 1, 1, 1, 1, 1, 1, 1, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 28, 1, 29, 1, 1, 1, 30, 1, 1, 31, 32, 33, 1, 1, 1, 34, 1, 24, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 1, 1, 1, 1, 1, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 28, 1, 29, 1, 1, 1, 30, 1, 1, 31, 32, 33, 1, 1, 1, 34, 1, 35, 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 36, 1, 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39, 1, 1, 40, 1, 41, 1, 1, 1, 42, 1, 1, 43, 44, 45, 1, 1, 1, 46, 1, 47, 1, 1, 1, 1, 48, 1, 49, 1, 49, 1, 1, 1, 50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1, 1, 1, 51, 1, 1, 1, 1, 1, 1, 1, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 1, 53, 1, 49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 54, 1, 1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 1, 1, 1, 1, 1, 1, 1, 56, 1, 1, 1, 1, 1, 1, 1, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 59, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 59, 1, 1, 1, 1, 1, 1, 1, 61, 1, 1, 1, 1, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 59, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 59, 1, 1, 1, 1, 1, 1, 1, 61, 1, 1, 1, 1, 1, 1, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 63, 1, 59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 59, 1, 64, 1, 1, 1, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 66, 1, 1, 1, 1, 1, 1, 1, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 72, 1, 68, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 1, 73, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 71, 1, 1, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 1, 1, 1, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 1, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 1, 80, 1, 71, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 76, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1, 82, 1, 1, 1, 1, 1, 1, 1, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 1, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 1, 85, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 1, 1, 1, 1, 87, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 88, 1, 85, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 1, 1, 1, 1, 87, 1, 1, 89, 1, 89, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 1, 1, 1, 1, 90, 90, 91, 90, 91, 90, 92, 90, 90, 1, 90, 90, 91, 90, 90, 91, 90, 90, 90, 90, 93, 90, 90, 90, 90, 90, 1, 1, 1, 1, 1, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 1, 94, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 95, 1, 1, 1, 96, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 95, 1, 1, 1, 1, 1, 1, 1, 97, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 98, 1, 88, 1, 1, 1, 99, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 88, 1, 1, 1, 1, 1, 1, 1, 100, 1, 1, 1, 1, 1, 1, 1, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 1, 102, 1, 88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 88, 1, 98, 1, 1, 1, 103, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 98, 1, 1, 1, 1, 1, 1, 1, 104, 1, 1, 1, 1, 1, 1, 1, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 1, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1, 107, 1, 1, 1, 108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 109, 1, 107, 1, 1, 1, 108, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 109, 1, 1, 89, 1, 89, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 90, 90, 91, 90, 91, 90, 92, 90, 90, 1, 90, 90, 91, 90, 90, 91, 90, 90, 90, 90, 93, 90, 90, 90, 90, 90, 1, 1, 1, 1, 1, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 1, 110, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 1, 111, 1, 1, 1, 112, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 111, 1, 1, 1, 1, 1, 1, 1, 113, 1, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 1, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 1, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 1, 117, 1, 118, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 118, 1, 90, 1, 49, 1, 119, 1, 49, 1, 120, 1, 49, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 122, 1, 49, 1, 49, 1, 49, 1, 123, 1, 49, 1, 1, 1, 1, 1, 1, 49, 1, 124, 1, 49, 1, 125, 1, 49, 1, 126, 1, 49, 1, 127, 1, 128, 1, 128, 1, 1, 1, 129, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 128, 1, 1, 1, 1, 1, 1, 1, 130, 1, 1, 1, 131, 1, 132, 1, 128, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 128, 1, 133, 1, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 135, 1, 1, 1, 136, 1, 137, 1, 1, 1, 138, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 137, 1, 1, 1, 1, 1, 1, 1, 139, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 140, 1, 1, 1, 141, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 140, 1, 1, 1, 1, 1, 1, 1, 142, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 143, 1, 140, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 140, 1, 144, 1, 1, 1, 145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 144, 1, 1, 1, 1, 1, 1, 1, 146, 1, 1, 1, 1, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 147, 1, 128, 1, 148, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 147, 1, 128, 1, 149, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 150, 1, 128, 1, 128, 1, 151, 1, 128, 1, 152, 152, 152, 152, 152, 152, 152, 152, 152, 1, 152, 152, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 155, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 156, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 1, 157, 157, 157, 157, 157, 157, 157, 157, 157, 1, 157, 157, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 159, 160, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 161, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 1, 162, 1, 157, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 157, 1, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 1, 163, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 165, 1, 118, 1, 1, 1, 166, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 118, 1, 1, 1, 1, 1, 1, 1, 167, 1, 168, 1, 1, 1, 169, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 168, 1, 1, 1, 1, 1, 1, 1, 170, 1, 163, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 171, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 171, 1, 163, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 171, 1, 163, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 90, 1, 1, 0 ] class << self attr_accessor :_date_time_trans_targs private :_date_time_trans_targs, :_date_time_trans_targs= end self._date_time_trans_targs = [ 2, 0, 3, 5, 6, 71, 82, 84, 86, 89, 2, 3, 5, 6, 4, 2, 3, 5, 6, 71, 82, 84, 86, 89, 7, 8, 10, 11, 56, 58, 60, 63, 65, 67, 69, 9, 7, 8, 10, 11, 56, 58, 60, 63, 65, 67, 69, 12, 55, 13, 14, 16, 17, 15, 13, 14, 16, 17, 18, 19, 20, 22, 23, 21, 19, 20, 22, 23, 24, 25, 27, 28, 26, 24, 25, 27, 28, 29, 31, 32, 30, 29, 31, 32, 33, 34, 35, 37, 38, 48, 96, 99, 100, 101, 36, 34, 35, 37, 38, 39, 41, 42, 40, 39, 41, 42, 43, 44, 45, 47, 46, 44, 45, 47, 49, 50, 51, 53, 97, 57, 59, 61, 62, 64, 66, 68, 70, 72, 73, 74, 76, 77, 75, 73, 74, 76, 77, 78, 79, 81, 78, 79, 81, 80, 78, 79, 81, 83, 85, 87, 88, 90, 92, 93, 92, 102, 95, 92, 93, 92, 102, 95, 94, 97, 52, 98, 52, 98, 97, 52, 98, 54 ] class << self attr_accessor :_date_time_trans_actions private :_date_time_trans_actions, :_date_time_trans_actions= end self._date_time_trans_actions = [ 1, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 0, 0, 4, 4, 5, 4, 0, 0, 0, 3, 6, 0, 4, 4, 5, 7, 0, 0, 3, 0, 0, 4, 4, 5, 4, 0, 3, 0, 0, 4, 5, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 4, 5, 4, 0, 3, 0, 0, 4, 5, 4, 0, 0, 0, 3, 0, 4, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4, 5, 4, 1, 1, 8, 0, 0, 3, 0, 4, 4, 5, 0, 0, 0, 0, 0, 9, 9, 10, 11, 9, 0, 0, 3, 12, 0, 0, 13, 13, 14, 0, 3, 4, 4, 5, 0 ] class << self attr_accessor :_date_time_eof_actions private :_date_time_eof_actions, :_date_time_eof_actions= end self._date_time_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 13, 13, 13, 0 ] class << self attr_accessor :date_time_start end self.date_time_start = 1; class << self attr_accessor :date_time_first_final end self.date_time_first_final = 96; class << self attr_accessor :date_time_error end self.date_time_error = 0; class << self attr_accessor :date_time_en_comment_tail end self.date_time_en_comment_tail = 91; class << self attr_accessor :date_time_en_main end self.date_time_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 583 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" begin p ||= 0 pe ||= data.length cs = date_time_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" # line 593 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _date_time_index_offsets[cs] _slen = _date_time_key_spans[cs] _trans = if ( _slen > 0 && _date_time_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _date_time_trans_keys[_keys + 1] ) then _date_time_indicies[ _inds + ( data_unpacked[p]) - _date_time_trans_keys[_keys] ] else _date_time_indicies[ _inds + _slen ] end cs = _date_time_trans_targs[_trans] if _date_time_trans_actions[_trans] != 0 case _date_time_trans_actions[_trans] when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 9 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 1 then # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end when 13 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end when 3 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end when 12 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 5 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end when 10 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end when 11 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 6 then # line 11 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(8, p) end # line 48 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(45, p) end when 8 then # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end when 14 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end when 2 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 91 _goto_level = _again next end end # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end when 7 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 11 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(8, p) end # line 48 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(45, p) end # line 766 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _date_time_eof_actions[cs] when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 13 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end # line 792 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" if p == eof && cs >= # line 806 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb" 96 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl000066400000000000000000000012551267453234600260550ustar00rootroot00000000000000%%{ machine date_time; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := date_time; }%% module Mail module Parsers module Ragel module DateTimeMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb000066400000000000000000002053611267453234600263520ustar00rootroot00000000000000 # line 1 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" # line 10 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" module Mail module Parsers module Ragel module EnvelopeFromMachine # line 13 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" class << self attr_accessor :_envelope_from_trans_keys private :_envelope_from_trans_keys, :_envelope_from_trans_keys= end self._envelope_from_trans_keys = [ 0, 0, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 87, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 87, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 46, 10, 10, 9, 32, 9, 87, 9, 46, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 114, 114, 105, 105, 32, 32, 32, 83, 112, 117, 114, 114, 32, 32, 9, 57, 10, 10, 9, 32, 9, 57, 9, 57, 9, 40, 10, 10, 9, 32, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 10, 10, 9, 32, 9, 58, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 10, 10, 9, 32, 9, 58, 10, 10, 9, 32, 9, 58, 48, 57, 10, 10, 9, 32, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 40, 10, 10, 9, 32, 9, 57, 10, 10, 9, 32, 9, 57, 9, 40, 9, 58, 9, 40, 103, 103, 101, 101, 99, 99, 101, 101, 98, 98, 97, 117, 110, 110, 108, 110, 97, 97, 114, 121, 111, 111, 118, 118, 99, 99, 116, 116, 101, 101, 112, 112, 111, 111, 110, 110, 97, 117, 116, 116, 104, 117, 117, 117, 101, 101, 101, 101, 100, 100, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 40, 10, 10, 9, 32, 9, 87, 9, 40, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 87, 9, 64, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 87, 101, 114, 97, 111, 97, 117, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 87, 9, 64, -128, -1, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 87, 9, 64, 9, 126, 33, 126, 62, 62, 32, 32, 32, 87, 70, 87, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 57, 9, 40, 9, 40, 0, 0, 0 ] class << self attr_accessor :_envelope_from_key_spans private :_envelope_from_key_spans, :_envelope_from_key_spans= end self._envelope_from_key_spans = [ 0, 118, 118, 1, 24, 118, 56, 1, 24, 79, 56, 118, 1, 24, 118, 56, 1, 24, 79, 56, 118, 118, 1, 24, 118, 38, 1, 24, 79, 38, 118, 1, 24, 118, 118, 1, 1, 1, 52, 6, 1, 1, 49, 1, 24, 49, 49, 32, 1, 24, 49, 1, 24, 49, 10, 50, 1, 24, 50, 49, 1, 24, 49, 10, 50, 1, 24, 50, 1, 24, 50, 10, 1, 24, 49, 1, 24, 49, 10, 32, 1, 24, 49, 1, 24, 49, 32, 50, 32, 1, 1, 1, 1, 1, 21, 1, 3, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 21, 1, 14, 1, 1, 1, 1, 127, 127, 1, 24, 118, 32, 1, 24, 79, 32, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 79, 56, 128, 1, 24, 118, 118, 1, 24, 118, 118, 118, 118, 118, 79, 14, 15, 21, 118, 118, 118, 118, 118, 118, 118, 118, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 79, 56, 128, 127, 1, 24, 56, 1, 24, 79, 56, 118, 94, 1, 1, 56, 18, 127, 127, 1, 24, 128, 49, 32, 32, 0 ] class << self attr_accessor :_envelope_from_index_offsets private :_envelope_from_index_offsets, :_envelope_from_index_offsets= end self._envelope_from_index_offsets = [ 0, 0, 119, 238, 240, 265, 384, 441, 443, 468, 548, 605, 724, 726, 751, 870, 927, 929, 954, 1034, 1091, 1210, 1329, 1331, 1356, 1475, 1514, 1516, 1541, 1621, 1660, 1779, 1781, 1806, 1925, 2044, 2046, 2048, 2050, 2103, 2110, 2112, 2114, 2164, 2166, 2191, 2241, 2291, 2324, 2326, 2351, 2401, 2403, 2428, 2478, 2489, 2540, 2542, 2567, 2618, 2668, 2670, 2695, 2745, 2756, 2807, 2809, 2834, 2885, 2887, 2912, 2963, 2974, 2976, 3001, 3051, 3053, 3078, 3128, 3139, 3172, 3174, 3199, 3249, 3251, 3276, 3326, 3359, 3410, 3443, 3445, 3447, 3449, 3451, 3453, 3475, 3477, 3481, 3483, 3492, 3494, 3496, 3498, 3500, 3502, 3504, 3506, 3508, 3530, 3532, 3547, 3549, 3551, 3553, 3555, 3683, 3811, 3813, 3838, 3957, 3990, 3992, 4017, 4097, 4130, 4225, 4354, 4356, 4381, 4500, 4619, 4747, 4749, 4774, 4903, 5031, 5159, 5161, 5186, 5315, 5434, 5562, 5690, 5692, 5717, 5836, 5893, 5895, 5920, 6000, 6057, 6186, 6188, 6213, 6332, 6451, 6453, 6478, 6597, 6716, 6835, 6954, 7073, 7153, 7168, 7184, 7206, 7325, 7444, 7563, 7682, 7801, 7920, 8039, 8158, 8277, 8405, 8533, 8535, 8560, 8679, 8808, 8936, 8938, 8963, 9091, 9219, 9221, 9246, 9365, 9422, 9424, 9449, 9529, 9586, 9715, 9843, 9845, 9870, 9927, 9929, 9954, 10034, 10091, 10210, 10305, 10307, 10309, 10366, 10385, 10513, 10641, 10643, 10668, 10797, 10847, 10880, 10913 ] class << self attr_accessor :_envelope_from_indicies private :_envelope_from_indicies, :_envelope_from_indicies= end self._envelope_from_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 7, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 8, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 10, 11, 10, 10, 10, 10, 10, 12, 1, 10, 10, 1, 10, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 10, 1, 10, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 14, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 15, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 18, 19, 18, 18, 18, 18, 18, 20, 1, 18, 18, 1, 18, 21, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 1, 18, 22, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 23, 1, 1, 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 26, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 29, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 1, 23, 1, 1, 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 26, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 35, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 40, 1, 27, 1, 1, 1, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 42, 43, 42, 42, 42, 42, 42, 44, 1, 42, 42, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 45, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 1, 51, 1, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 52, 1, 1, 1, 53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1, 57, 1, 1, 1, 58, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 59, 60, 59, 59, 59, 59, 59, 61, 1, 59, 59, 1, 59, 62, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 1, 1, 1, 59, 1, 59, 1, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 63, 1, 1, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 1, 64, 1, 1, 1, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 66, 67, 66, 66, 66, 66, 66, 68, 1, 66, 66, 1, 66, 69, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 1, 1, 66, 1, 66, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 70, 1, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 71, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 1, 72, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 66, 67, 66, 66, 66, 66, 66, 75, 1, 66, 66, 1, 66, 76, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 1, 1, 66, 1, 66, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 1, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 72, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 77, 1, 78, 1, 72, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 72, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 1, 1, 1, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 79, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1, 82, 1, 1, 1, 1, 1, 83, 1, 77, 1, 1, 1, 84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 85, 1, 85, 85, 85, 85, 85, 86, 1, 85, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 87, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 1, 72, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 85, 1, 85, 85, 85, 85, 85, 75, 1, 85, 85, 1, 85, 77, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 1, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 1, 83, 1, 1, 1, 88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 89, 1, 89, 89, 89, 89, 89, 90, 1, 89, 89, 1, 89, 1, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 1, 1, 89, 1, 89, 1, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 1, 1, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 91, 1, 92, 1, 93, 1, 93, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 94, 1, 1, 95, 1, 96, 1, 1, 1, 97, 1, 1, 98, 99, 100, 1, 1, 1, 101, 1, 102, 1, 1, 1, 1, 103, 1, 104, 1, 105, 1, 105, 1, 1, 1, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 105, 1, 1, 1, 1, 1, 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 1, 109, 1, 105, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 105, 1, 110, 1, 1, 1, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 1, 1, 1, 1, 1, 1, 1, 112, 1, 1, 1, 1, 1, 1, 1, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 114, 1, 1, 1, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 116, 1, 1, 1, 1, 1, 1, 1, 117, 1, 1, 1, 1, 1, 1, 1, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 1, 114, 1, 1, 1, 115, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 116, 1, 1, 1, 1, 1, 1, 1, 117, 1, 118, 1, 114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 114, 1, 116, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 116, 1, 1, 1, 1, 1, 1, 1, 120, 1, 1, 1, 1, 1, 1, 1, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 1, 122, 1, 116, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 116, 1, 123, 1, 1, 1, 124, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 1, 1, 1, 1, 1, 1, 1, 125, 1, 1, 1, 1, 1, 1, 1, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 127, 1, 1, 1, 128, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127, 1, 1, 1, 1, 1, 1, 1, 129, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 130, 1, 131, 1, 127, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127, 1, 132, 1, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 132, 1, 1, 1, 1, 1, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 135, 1, 130, 1, 1, 1, 136, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 130, 1, 1, 1, 1, 1, 1, 1, 137, 1, 1, 1, 1, 1, 1, 1, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 1, 139, 1, 130, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 130, 1, 135, 1, 1, 1, 140, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 135, 1, 1, 1, 1, 1, 1, 1, 141, 1, 1, 1, 1, 1, 1, 1, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 143, 1, 1, 1, 144, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 145, 1, 1, 1, 1, 1, 1, 1, 146, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 147, 1, 148, 1, 143, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 143, 1, 145, 1, 1, 1, 149, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 145, 1, 1, 1, 1, 1, 1, 1, 150, 1, 1, 1, 1, 1, 1, 1, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 147, 1, 152, 1, 145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 145, 1, 153, 1, 1, 1, 154, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 153, 1, 1, 1, 1, 1, 1, 1, 155, 1, 1, 1, 1, 1, 1, 1, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 1, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 1, 159, 1, 160, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 160, 1, 147, 1, 1, 1, 161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 147, 1, 1, 1, 1, 1, 1, 1, 162, 1, 1, 1, 1, 1, 1, 1, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 1, 164, 1, 147, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 147, 1, 157, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 157, 1, 1, 1, 1, 1, 1, 1, 166, 1, 1, 1, 1, 1, 1, 1, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 1, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 168, 1, 1, 1, 169, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 170, 1, 1, 1, 1, 1, 1, 1, 171, 1, 172, 1, 168, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 168, 1, 170, 1, 1, 1, 173, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 170, 1, 1, 1, 1, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 1, 175, 1, 170, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 170, 1, 176, 1, 1, 1, 177, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 176, 1, 1, 1, 1, 1, 1, 1, 178, 1, 1, 1, 1, 1, 1, 1, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 1, 179, 1, 1, 1, 180, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 176, 1, 1, 1, 1, 1, 1, 1, 181, 1, 182, 1, 1, 1, 183, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 153, 1, 1, 1, 1, 1, 1, 1, 184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 157, 1, 185, 1, 1, 1, 186, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 1, 1, 1, 1, 1, 1, 1, 187, 1, 104, 1, 188, 1, 104, 1, 189, 1, 104, 1, 190, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 191, 1, 104, 1, 104, 1, 104, 1, 192, 1, 104, 1, 1, 1, 1, 1, 1, 104, 1, 193, 1, 104, 1, 194, 1, 104, 1, 195, 1, 104, 1, 196, 1, 92, 1, 197, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 92, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199, 1, 92, 1, 92, 1, 200, 1, 92, 1, 201, 201, 201, 201, 201, 201, 201, 201, 67, 1, 201, 201, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 67, 201, 1, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 203, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 1, 201, 201, 201, 201, 201, 201, 201, 201, 201, 1, 201, 201, 204, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 205, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 203, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 1, 206, 1, 201, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 201, 1, 207, 1, 1, 1, 208, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 209, 205, 67, 205, 205, 205, 205, 205, 210, 1, 205, 205, 1, 205, 69, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 1, 1, 205, 1, 205, 1, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 1, 1, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 207, 1, 1, 1, 208, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 210, 1, 211, 1, 207, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 207, 1, 207, 1, 1, 1, 208, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 210, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 212, 1, 1, 1, 213, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 214, 1, 1, 1, 1, 1, 1, 1, 215, 1, 205, 67, 205, 205, 205, 205, 205, 1, 1, 205, 205, 1, 205, 69, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 1, 1, 205, 1, 205, 1, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 1, 1, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 201, 216, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 67, 1, 77, 1, 1, 1, 84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 66, 67, 66, 66, 66, 66, 66, 86, 1, 66, 66, 1, 66, 69, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 1, 1, 66, 1, 66, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 1, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 217, 1, 1, 1, 218, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 217, 219, 220, 219, 219, 219, 219, 219, 221, 1, 219, 219, 1, 219, 222, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 1, 1, 1, 219, 1, 219, 1, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 223, 1, 1, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 1, 70, 70, 70, 70, 70, 70, 70, 70, 70, 1, 70, 70, 224, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 1, 225, 207, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 1, 226, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 227, 227, 227, 227, 227, 227, 227, 227, 227, 1, 227, 227, 228, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 229, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 230, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 1, 231, 231, 231, 231, 231, 231, 231, 231, 231, 1, 231, 231, 232, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 233, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 234, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 1, 235, 1, 231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 231, 39, 1, 1, 1, 236, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39, 237, 238, 237, 237, 237, 237, 237, 239, 1, 237, 237, 1, 237, 1, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 1, 1, 237, 1, 237, 1, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 1, 1, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 240, 240, 240, 240, 240, 240, 240, 240, 19, 1, 240, 240, 241, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 19, 240, 1, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 242, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 1, 240, 240, 240, 240, 240, 240, 240, 240, 240, 1, 240, 240, 243, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 244, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 242, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 1, 245, 1, 240, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 240, 1, 246, 1, 1, 1, 247, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 248, 244, 19, 244, 244, 244, 244, 244, 249, 1, 244, 244, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 1, 244, 22, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 250, 1, 1, 1, 251, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 253, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 254, 1, 250, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 250, 1, 250, 1, 1, 1, 251, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 253, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 255, 1, 1, 1, 256, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 257, 1, 1, 1, 1, 1, 1, 1, 258, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 240, 259, 1, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 1, 260, 1, 1, 1, 261, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 262, 18, 263, 18, 18, 18, 18, 18, 264, 1, 18, 18, 1, 18, 244, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 1, 18, 22, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 1, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 265, 1, 1, 1, 266, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 267, 42, 43, 42, 42, 42, 42, 42, 268, 1, 42, 42, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 28, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 269, 1, 265, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 265, 1, 265, 1, 1, 1, 266, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 267, 42, 43, 42, 42, 42, 42, 42, 268, 1, 42, 42, 1, 42, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 28, 42, 42, 42, 42, 42, 270, 42, 42, 42, 42, 42, 42, 271, 42, 42, 42, 42, 42, 272, 273, 42, 42, 274, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 275, 1, 1, 1, 276, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 277, 237, 238, 237, 237, 237, 237, 237, 278, 1, 237, 237, 1, 237, 1, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 1, 1, 237, 1, 237, 40, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 1, 1, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 279, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 281, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 281, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 94, 1, 1, 95, 1, 282, 1, 1, 1, 97, 1, 1, 283, 99, 100, 1, 1, 1, 284, 33, 1, 1, 34, 1, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 91, 1, 192, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 197, 1, 1, 1, 195, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 285, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 286, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 285, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 287, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 288, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 289, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 46, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 42, 1, 42, 42, 42, 42, 42, 49, 1, 42, 42, 1, 42, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 1, 42, 50, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 280, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 1, 290, 290, 290, 290, 290, 290, 290, 290, 291, 1, 290, 290, 292, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, 290, 229, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 293, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 1, 294, 294, 294, 294, 294, 294, 294, 294, 294, 1, 294, 294, 295, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 296, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 297, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 1, 298, 1, 294, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 294, 1, 15, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 244, 19, 244, 244, 244, 244, 244, 20, 1, 244, 244, 1, 244, 21, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 1, 244, 22, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 294, 294, 294, 294, 294, 294, 294, 294, 294, 299, 1, 294, 294, 300, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 299, 294, 233, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 297, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 1, 301, 1, 299, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 299, 1, 302, 302, 302, 302, 302, 302, 302, 302, 303, 1, 302, 302, 304, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 303, 302, 305, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 306, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 1, 307, 307, 307, 307, 307, 307, 307, 307, 307, 1, 307, 307, 308, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 309, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 310, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 1, 311, 1, 307, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 307, 1, 312, 1, 1, 1, 313, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 314, 244, 19, 244, 244, 244, 244, 244, 315, 1, 244, 244, 1, 244, 21, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 1, 244, 316, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 317, 1, 1, 1, 318, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 319, 1, 1, 1, 1, 1, 1, 1, 320, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 321, 1, 322, 1, 317, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 317, 1, 317, 1, 1, 1, 318, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 319, 1, 1, 1, 1, 1, 1, 1, 320, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 321, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 323, 1, 1, 1, 324, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 325, 1, 1, 1, 1, 1, 1, 1, 326, 1, 1, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 327, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 307, 307, 307, 307, 307, 307, 307, 307, 307, 328, 1, 307, 307, 329, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 328, 307, 330, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 310, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 1, 331, 1, 328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 328, 1, 332, 1, 1, 1, 333, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 334, 1, 1, 1, 1, 1, 1, 1, 335, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 336, 1, 337, 1, 332, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 332, 1, 332, 1, 1, 1, 333, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 334, 1, 1, 1, 1, 1, 1, 1, 335, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 336, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 338, 1, 1, 1, 339, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 340, 1, 1, 1, 1, 1, 1, 1, 341, 1, 1, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 342, 1, 343, 1, 1, 1, 344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 345, 346, 345, 345, 345, 345, 345, 347, 1, 345, 345, 1, 345, 348, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 1, 1, 1, 345, 1, 345, 1, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 1, 1, 1, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 1, 244, 19, 244, 244, 244, 244, 244, 1, 1, 244, 244, 1, 244, 349, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 1, 244, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 1, 1, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 1, 350, 1, 351, 1, 352, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 30, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 32, 33, 1, 1, 34, 1, 353, 353, 353, 353, 353, 353, 353, 353, 353, 1, 353, 353, 354, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 355, 356, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 357, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 1, 358, 358, 358, 358, 358, 358, 358, 358, 358, 1, 358, 358, 359, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 360, 361, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 362, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 1, 363, 1, 358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 358, 160, 1, 1, 1, 364, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 160, 1, 1, 1, 1, 1, 1, 1, 365, 1, 1, 1, 1, 1, 1, 1, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 1, 160, 1, 1, 1, 364, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 160, 1, 1, 1, 1, 1, 1, 1, 365, 1, 366, 1, 1, 1, 367, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 366, 1, 1, 1, 1, 1, 1, 1, 368, 1, 1, 0 ] class << self attr_accessor :_envelope_from_trans_targs private :_envelope_from_trans_targs, :_envelope_from_trans_targs= end self._envelope_from_trans_targs = [ 2, 0, 3, 5, 184, 203, 204, 205, 2, 3, 5, 184, 203, 204, 4, 6, 7, 9, 5, 140, 10, 153, 20, 6, 7, 9, 10, 11, 20, 8, 35, 105, 107, 109, 112, 6, 7, 9, 10, 11, 20, 12, 14, 134, 139, 13, 15, 16, 18, 19, 20, 17, 15, 16, 18, 19, 20, 21, 22, 24, 114, 129, 124, 130, 21, 22, 24, 114, 129, 124, 130, 23, 25, 26, 28, 29, 128, 30, 27, 25, 26, 28, 29, 30, 31, 33, 34, 32, 31, 33, 34, 36, 37, 38, 39, 90, 92, 94, 97, 99, 101, 103, 40, 89, 41, 42, 43, 45, 46, 44, 42, 43, 45, 46, 47, 48, 50, 88, 49, 51, 53, 54, 52, 50, 51, 53, 54, 55, 56, 58, 59, 57, 55, 56, 58, 59, 60, 62, 63, 61, 60, 62, 63, 64, 65, 67, 87, 74, 66, 68, 70, 71, 69, 67, 68, 70, 71, 74, 214, 73, 215, 75, 77, 78, 76, 75, 77, 78, 79, 80, 82, 86, 81, 83, 85, 84, 82, 83, 85, 79, 80, 86, 64, 65, 87, 47, 48, 88, 91, 93, 95, 96, 98, 100, 102, 104, 106, 108, 110, 111, 113, 115, 126, 125, 116, 118, 117, 119, 120, 122, 123, 121, 119, 120, 122, 123, 127, 21, 22, 24, 114, 129, 124, 130, 131, 133, 132, 135, 136, 15, 138, 135, 136, 15, 138, 137, 12, 14, 134, 139, 141, 151, 150, 142, 144, 143, 145, 146, 148, 149, 145, 146, 148, 149, 147, 145, 146, 148, 149, 152, 154, 155, 157, 175, 158, 154, 155, 157, 158, 156, 159, 166, 168, 170, 173, 154, 155, 157, 158, 160, 161, 162, 163, 164, 165, 167, 169, 171, 172, 174, 176, 181, 182, 180, 176, 177, 179, 180, 178, 181, 182, 183, 185, 195, 196, 198, 194, 185, 186, 188, 194, 187, 189, 190, 192, 193, 20, 189, 190, 192, 193, 20, 191, 189, 190, 192, 193, 20, 195, 196, 198, 197, 198, 199, 201, 202, 20, 200, 198, 199, 201, 202, 20, 2, 3, 5, 184, 203, 204, 204, 206, 207, 208, 210, 211, 210, 217, 213, 210, 211, 210, 217, 213, 212, 72, 216, 215, 72, 216 ] class << self attr_accessor :_envelope_from_trans_actions private :_envelope_from_trans_actions, :_envelope_from_trans_actions= end self._envelope_from_trans_actions = [ 1, 0, 1, 1, 1, 2, 1, 3, 0, 0, 4, 4, 5, 4, 0, 6, 6, 7, 0, 0, 8, 0, 9, 0, 0, 10, 5, 0, 11, 0, 12, 12, 12, 12, 12, 13, 13, 14, 15, 13, 16, 0, 0, 0, 5, 0, 0, 0, 17, 5, 0, 0, 13, 13, 18, 15, 13, 19, 19, 19, 19, 20, 19, 19, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 21, 5, 0, 0, 0, 13, 13, 22, 15, 13, 0, 0, 5, 0, 13, 13, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 13, 13, 15, 13, 0, 0, 0, 5, 0, 0, 5, 0, 0, 13, 13, 15, 13, 0, 0, 5, 0, 0, 13, 13, 15, 13, 0, 5, 0, 0, 13, 15, 13, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 13, 13, 15, 13, 13, 0, 0, 0, 0, 5, 0, 0, 13, 15, 13, 0, 0, 0, 5, 0, 0, 5, 0, 13, 13, 15, 13, 13, 15, 13, 13, 15, 13, 13, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 5, 0, 13, 13, 22, 15, 0, 13, 13, 13, 13, 15, 13, 13, 0, 0, 0, 23, 23, 24, 23, 0, 0, 25, 0, 0, 13, 13, 13, 15, 0, 0, 0, 0, 0, 0, 6, 6, 7, 8, 0, 0, 10, 5, 0, 13, 13, 14, 15, 0, 6, 6, 7, 0, 8, 0, 0, 10, 5, 0, 12, 12, 12, 12, 12, 13, 13, 14, 15, 0, 0, 17, 12, 12, 12, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0, 0, 25, 0, 0, 0, 0, 0, 23, 23, 23, 24, 23, 0, 0, 25, 0, 0, 6, 6, 26, 8, 27, 0, 0, 28, 5, 29, 0, 13, 13, 30, 15, 31, 0, 0, 25, 0, 0, 0, 32, 5, 33, 0, 13, 13, 34, 15, 35, 13, 13, 36, 36, 15, 36, 0, 0, 17, 17, 37, 37, 38, 39, 37, 0, 0, 5, 40, 0, 0, 0, 5, 13, 13, 15 ] class << self attr_accessor :_envelope_from_eof_actions private :_envelope_from_eof_actions, :_envelope_from_eof_actions= end self._envelope_from_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 42, 0 ] class << self attr_accessor :envelope_from_start end self.envelope_from_start = 1; class << self attr_accessor :envelope_from_first_final end self.envelope_from_first_final = 214; class << self attr_accessor :envelope_from_error end self.envelope_from_error = 0; class << self attr_accessor :envelope_from_en_comment_tail end self.envelope_from_en_comment_tail = 209; class << self attr_accessor :envelope_from_en_main end self.envelope_from_en_main = 1; # line 17 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 1721 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" begin p ||= 0 pe ||= data.length cs = envelope_from_start top = 0 end # line 26 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" # line 1731 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _envelope_from_index_offsets[cs] _slen = _envelope_from_key_spans[cs] _trans = if ( _slen > 0 && _envelope_from_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _envelope_from_trans_keys[_keys + 1] ) then _envelope_from_indicies[ _inds + ( data_unpacked[p]) - _envelope_from_trans_keys[_keys] ] else _envelope_from_indicies[ _inds + _slen ] end cs = _envelope_from_trans_targs[_trans] if _envelope_from_trans_actions[_trans] != 0 case _envelope_from_trans_actions[_trans] when 17 then # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 3 then # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end when 13 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 37 then # line 8 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 12 then # line 10 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(7, p) end when 19 then # line 16 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 11 then # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 6 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 4 then # line 23 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 33 then # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 25 then # line 41 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 23 then # line 42 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 5 then # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 40 then # line 6 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 1 then # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 23 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 18 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 16 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 36 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 35 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 15 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 38 then # line 8 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 39 then # line 8 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 21 then # line 15 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 20 then # line 16 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 10 then # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 29 then # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 9 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 8 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 32 then # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 24 then # line 42 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 2 then # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(2, p) end # line 23 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 209 _goto_level = _again next end end when 22 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 14 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 31 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 34 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 28 then # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 7 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 27 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 30 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end when 26 then # line 22 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 4 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(1, p) end # line 2095 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _envelope_from_eof_actions[cs] when 41 then # line 9 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(6, p) end when 42 then # line 7 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 9 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(6, p) end # line 2124 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" if p == eof && cs >= # line 2138 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb" 214 # line 28 "/Users/raindrift/workspace/mail/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl000066400000000000000000000012711267453234600267600ustar00rootroot00000000000000%%{ machine envelope_from; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := envelope_from; }%% module Mail module Parsers module Ragel module EnvelopeFromMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb000066400000000000000000001377751267453234600260120ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" module Mail module Parsers module Ragel module MessageIdsMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" class << self attr_accessor :_message_ids_trans_keys private :_message_ids_trans_keys, :_message_ids_trans_keys= end self._message_ids_trans_keys = [ 0, 0, 9, 60, 10, 10, 9, 32, 9, 60, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 33, 126, 33, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, -128, -1, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, -128, -1, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 33, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 60, 9, 60, 9, 60, 0, 0, 0 ] class << self attr_accessor :_message_ids_key_spans private :_message_ids_key_spans, :_message_ids_key_spans= end self._message_ids_key_spans = [ 0, 52, 1, 24, 52, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 1, 24, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 94, 94, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 94, 127, 127, 1, 24, 128, 52, 52, 52, 0 ] class << self attr_accessor :_message_ids_index_offsets private :_message_ids_index_offsets, :_message_ids_index_offsets= end self._message_ids_index_offsets = [ 0, 0, 53, 55, 80, 133, 252, 371, 373, 398, 517, 574, 576, 601, 658, 777, 779, 804, 923, 980, 982, 1007, 1064, 1183, 1302, 1304, 1329, 1448, 1503, 1505, 1530, 1585, 1704, 1706, 1731, 1850, 1852, 1877, 1996, 2124, 2252, 2254, 2279, 2398, 2453, 2455, 2480, 2535, 2630, 2759, 2761, 2786, 2905, 3024, 3152, 3154, 3179, 3308, 3427, 3546, 3641, 3736, 3864, 3992, 3994, 4019, 4148, 4267, 4395, 4523, 4525, 4550, 4669, 4726, 4728, 4753, 4810, 4939, 4941, 4966, 5085, 5204, 5206, 5231, 5350, 5478, 5606, 5608, 5633, 5752, 5881, 6009, 6011, 6036, 6164, 6292, 6294, 6319, 6438, 6495, 6497, 6522, 6579, 6708, 6836, 6838, 6863, 6920, 6922, 6947, 7004, 7123, 7218, 7346, 7474, 7476, 7501, 7630, 7683, 7736, 7789 ] class << self attr_accessor :_message_ids_indicies private :_message_ids_indicies, :_message_ids_indicies= end self._message_ids_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 10, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 12, 13, 12, 12, 12, 12, 12, 14, 1, 12, 12, 1, 12, 15, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 1, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 16, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 12, 13, 12, 12, 12, 12, 12, 18, 1, 12, 12, 1, 12, 15, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 1, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 19, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 20, 1, 1, 1, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 22, 23, 22, 22, 22, 22, 22, 24, 1, 22, 22, 1, 22, 25, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 22, 1, 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 27, 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 1, 1, 1, 29, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, 1, 32, 1, 27, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 33, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 1, 1, 1, 1, 1, 1, 1, 35, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 30, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 39, 40, 39, 39, 39, 39, 39, 41, 1, 39, 39, 1, 39, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 1, 39, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 42, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 43, 1, 1, 1, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 43, 39, 1, 39, 39, 39, 39, 39, 45, 1, 39, 39, 1, 39, 30, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 1, 39, 46, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 43, 1, 1, 1, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 43, 1, 1, 1, 1, 1, 1, 1, 45, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 1, 47, 1, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 43, 1, 48, 1, 1, 1, 49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 1, 1, 1, 1, 1, 1, 50, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 51, 1, 52, 1, 1, 1, 53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 54, 55, 54, 54, 54, 54, 54, 56, 1, 54, 54, 1, 54, 57, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 1, 1, 1, 54, 1, 54, 58, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 59, 1, 1, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 1, 60, 1, 1, 1, 61, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 62, 63, 62, 62, 62, 62, 62, 64, 1, 62, 62, 1, 62, 65, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 1, 1, 62, 1, 62, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 66, 1, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 67, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 62, 63, 62, 62, 62, 62, 62, 70, 1, 62, 62, 1, 62, 71, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 1, 1, 62, 72, 62, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 1, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 74, 1, 68, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 1, 75, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 77, 1, 1, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 1, 73, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 81, 1, 81, 81, 81, 81, 81, 82, 1, 81, 81, 1, 81, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 1, 81, 1, 81, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 83, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 81, 1, 81, 81, 81, 81, 81, 70, 1, 81, 81, 1, 81, 73, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 1, 81, 72, 81, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 1, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 84, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 78, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 78, 87, 1, 87, 87, 87, 87, 87, 88, 1, 87, 87, 1, 87, 1, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 1, 1, 87, 1, 87, 1, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 1, 1, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 89, 89, 89, 89, 89, 89, 89, 89, 63, 1, 89, 89, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 63, 89, 1, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 89, 89, 92, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 93, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 1, 94, 1, 89, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 1, 95, 1, 1, 1, 96, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 95, 93, 63, 93, 93, 93, 93, 93, 97, 1, 93, 93, 1, 93, 65, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 1, 1, 93, 72, 93, 1, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 1, 1, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 95, 1, 1, 1, 96, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 95, 1, 1, 1, 1, 1, 1, 1, 97, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 98, 1, 95, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 95, 1, 99, 1, 1, 1, 100, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 99, 1, 1, 1, 1, 1, 1, 1, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 1, 93, 63, 93, 93, 93, 93, 93, 1, 1, 93, 93, 1, 93, 65, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 1, 1, 93, 1, 93, 1, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 1, 1, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 102, 1, 63, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 1, 73, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 62, 63, 62, 62, 62, 62, 62, 82, 1, 62, 62, 1, 62, 65, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 1, 1, 62, 1, 62, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 1, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1, 103, 1, 1, 1, 104, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 103, 105, 106, 105, 105, 105, 105, 105, 107, 1, 105, 105, 1, 105, 108, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 1, 1, 1, 105, 1, 105, 1, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 109, 1, 1, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 66, 66, 110, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 111, 95, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 112, 1, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 66, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 1, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 68, 113, 63, 113, 113, 113, 113, 113, 70, 1, 113, 113, 1, 113, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 1, 1, 113, 72, 113, 58, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 1, 1, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 73, 1, 1, 1, 80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 113, 63, 113, 113, 113, 113, 113, 82, 1, 113, 113, 1, 113, 65, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 1, 1, 113, 115, 113, 58, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 1, 1, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 58, 1, 58, 58, 58, 58, 58, 1, 1, 58, 58, 1, 58, 116, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 58, 115, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 58, 1, 58, 58, 58, 58, 58, 1, 1, 58, 58, 1, 58, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 58, 115, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1, 117, 117, 117, 117, 117, 117, 117, 117, 117, 1, 117, 117, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 120, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 1, 121, 121, 121, 121, 121, 121, 121, 121, 121, 1, 121, 121, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 124, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 1, 125, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 121, 36, 1, 1, 1, 126, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 127, 128, 127, 127, 127, 127, 127, 129, 1, 127, 127, 1, 127, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 1, 1, 127, 1, 127, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 1, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 130, 130, 130, 130, 130, 130, 130, 130, 23, 1, 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 23, 130, 1, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 1, 130, 130, 130, 130, 130, 130, 130, 130, 130, 1, 130, 130, 133, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 134, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 1, 135, 1, 130, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 130, 1, 136, 1, 1, 1, 137, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 136, 134, 23, 134, 134, 134, 134, 134, 138, 1, 134, 134, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 1, 134, 26, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 139, 1, 1, 1, 140, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 139, 1, 1, 1, 1, 1, 1, 1, 141, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, 1, 142, 1, 139, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 139, 1, 143, 1, 1, 1, 144, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 143, 1, 1, 1, 1, 1, 1, 1, 145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 130, 146, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 1, 147, 1, 1, 1, 148, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 147, 22, 149, 22, 22, 22, 22, 22, 150, 1, 22, 22, 1, 22, 134, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 22, 1, 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 151, 1, 1, 1, 152, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 151, 39, 40, 39, 39, 39, 39, 39, 153, 1, 39, 39, 1, 39, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 1, 39, 31, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 1, 1, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 1, 154, 1, 151, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 151, 1, 155, 1, 1, 1, 156, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 155, 127, 128, 127, 127, 127, 127, 127, 157, 1, 127, 127, 1, 127, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 1, 1, 127, 1, 127, 37, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 1, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 158, 158, 158, 158, 158, 158, 158, 158, 159, 1, 158, 158, 160, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 158, 119, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 161, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 1, 162, 162, 162, 162, 162, 162, 162, 162, 162, 1, 162, 162, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 165, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 1, 166, 1, 162, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162, 1, 20, 1, 1, 1, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 134, 23, 134, 134, 134, 134, 134, 24, 1, 134, 134, 1, 134, 25, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 1, 134, 26, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162, 162, 162, 162, 162, 162, 162, 162, 162, 167, 1, 162, 162, 168, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 167, 162, 123, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 165, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 1, 169, 1, 167, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 167, 1, 170, 170, 170, 170, 170, 170, 170, 170, 171, 1, 170, 170, 172, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 174, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 1, 175, 175, 175, 175, 175, 175, 175, 175, 175, 1, 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 177, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 178, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 1, 179, 1, 175, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 175, 1, 180, 1, 1, 1, 181, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 134, 23, 134, 134, 134, 134, 134, 182, 1, 134, 134, 1, 134, 25, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 1, 134, 183, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 184, 1, 1, 1, 185, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 184, 1, 1, 1, 1, 1, 1, 1, 186, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 187, 1, 188, 1, 184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 184, 1, 189, 1, 1, 1, 190, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 189, 1, 1, 1, 1, 1, 1, 1, 191, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 192, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 175, 175, 175, 175, 175, 175, 175, 175, 175, 193, 1, 175, 175, 194, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 193, 175, 195, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 178, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 1, 196, 1, 193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 1, 197, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 1, 1, 1, 1, 1, 1, 199, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 200, 1, 201, 1, 197, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 202, 1, 1, 1, 203, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 202, 1, 1, 1, 1, 1, 1, 1, 204, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 205, 1, 206, 1, 1, 1, 207, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206, 208, 209, 208, 208, 208, 208, 208, 210, 1, 208, 208, 1, 208, 211, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 1, 1, 1, 208, 1, 208, 1, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 1, 1, 1, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 1, 134, 23, 134, 134, 134, 134, 134, 1, 1, 134, 134, 1, 134, 212, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 1, 134, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 1, 1, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 1, 213, 213, 213, 213, 213, 213, 213, 213, 213, 1, 213, 213, 214, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 215, 216, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 217, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 1, 218, 218, 218, 218, 218, 218, 218, 218, 218, 1, 218, 218, 219, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 220, 221, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 222, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 1, 223, 1, 218, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 218, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 218, 224, 1, 1, 1, 225, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 1, 1, 1, 1, 1, 1, 226, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 227, 1, 85, 1, 1, 1, 228, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 1, 1, 1, 1, 1, 1, 229, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 230, 1, 1, 1, 231, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 230, 1, 1, 1, 1, 1, 1, 1, 232, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 0 ] class << self attr_accessor :_message_ids_trans_targs private :_message_ids_trans_targs, :_message_ids_trans_targs= end self._message_ids_trans_targs = [ 1, 0, 2, 4, 5, 3, 1, 2, 4, 5, 6, 7, 9, 93, 110, 111, 6, 7, 110, 8, 10, 11, 9, 67, 13, 79, 22, 10, 11, 13, 14, 22, 12, 10, 11, 13, 14, 22, 15, 17, 61, 66, 16, 18, 19, 21, 22, 20, 18, 19, 21, 22, 23, 24, 57, 38, 52, 47, 59, 53, 23, 24, 26, 38, 52, 47, 53, 25, 27, 28, 30, 51, 117, 31, 29, 27, 28, 30, 31, 117, 32, 34, 37, 33, 36, 118, 32, 34, 37, 39, 49, 48, 40, 42, 41, 43, 44, 46, 45, 43, 44, 46, 50, 23, 24, 26, 38, 52, 47, 53, 54, 56, 55, 57, 58, 117, 60, 62, 63, 18, 65, 62, 63, 18, 65, 64, 15, 17, 61, 66, 68, 77, 76, 69, 71, 70, 72, 73, 75, 72, 73, 75, 74, 72, 73, 75, 78, 80, 81, 84, 83, 80, 81, 83, 82, 80, 81, 83, 85, 90, 91, 89, 85, 86, 88, 89, 87, 90, 91, 92, 94, 103, 104, 106, 102, 94, 95, 97, 102, 96, 98, 99, 101, 22, 98, 99, 101, 22, 100, 98, 99, 101, 22, 103, 104, 106, 105, 106, 107, 109, 22, 108, 106, 107, 109, 22, 6, 7, 9, 93, 110, 111, 111, 113, 114, 113, 120, 116, 113, 114, 113, 120, 116, 115, 118, 35, 119, 5, 35, 119, 118, 35, 119 ] class << self attr_accessor :_message_ids_trans_actions private :_message_ids_trans_actions, :_message_ids_trans_actions= end self._message_ids_trans_actions = [ 0, 0, 0, 1, 2, 0, 3, 3, 4, 5, 6, 6, 6, 6, 7, 6, 0, 0, 1, 0, 8, 8, 0, 0, 9, 0, 10, 0, 0, 1, 0, 11, 0, 3, 3, 4, 3, 12, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3, 3, 4, 3, 13, 13, 13, 13, 14, 13, 0, 13, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 15, 0, 0, 3, 3, 4, 3, 16, 0, 0, 1, 0, 0, 0, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 4, 0, 3, 3, 3, 3, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 17, 17, 18, 17, 0, 0, 19, 0, 0, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 1, 0, 3, 3, 4, 0, 8, 8, 0, 9, 0, 0, 1, 0, 3, 3, 4, 17, 17, 17, 17, 0, 0, 19, 0, 0, 0, 0, 0, 17, 17, 17, 18, 17, 0, 0, 19, 0, 0, 8, 8, 9, 20, 0, 0, 1, 21, 0, 3, 3, 4, 22, 0, 0, 19, 0, 0, 0, 1, 23, 0, 3, 3, 4, 24, 3, 3, 25, 25, 4, 25, 0, 26, 26, 27, 28, 26, 0, 0, 1, 29, 0, 0, 30, 30, 31, 32, 0, 1, 3, 3, 4 ] class << self attr_accessor :_message_ids_eof_actions private :_message_ids_eof_actions, :_message_ids_eof_actions= end self._message_ids_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 3, 0 ] class << self attr_accessor :message_ids_start end self.message_ids_start = 1; class << self attr_accessor :message_ids_first_final end self.message_ids_first_final = 117; class << self attr_accessor :message_ids_error end self.message_ids_error = 0; class << self attr_accessor :message_ids_en_comment_tail end self.message_ids_en_comment_tail = 112; class << self attr_accessor :message_ids_en_main end self.message_ids_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 1224 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" begin p ||= 0 pe ||= data.length cs = message_ids_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" # line 1234 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _message_ids_index_offsets[cs] _slen = _message_ids_key_spans[cs] _trans = if ( _slen > 0 && _message_ids_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _message_ids_trans_keys[_keys + 1] ) then _message_ids_indicies[ _inds + ( data_unpacked[p]) - _message_ids_trans_keys[_keys] ] else _message_ids_indicies[ _inds + _slen ] end cs = _message_ids_trans_targs[_trans] if _message_ids_trans_actions[_trans] != 0 case _message_ids_trans_actions[_trans] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 26 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 15 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 13 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 11 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 8 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 6 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 23 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 30 then # line 31 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(28, p) end when 2 then # line 32 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(29, p) end when 19 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 17 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 1 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 29 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 16 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 12 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 25 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 24 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 5 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 32 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(29, p) end when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 27 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 28 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 14 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 21 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 10 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 9 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 7 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 32 then # line 31 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(28, p) end # line 32 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(29, p) end when 31 then # line 31 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(28, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 112 _goto_level = _again next end end when 18 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 22 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 20 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 1519 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _message_ids_eof_actions[cs] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 30 then # line 31 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(28, p) end # line 1545 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" if p == eof && cs >= # line 1559 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb" 117 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl000066400000000000000000000012631267453234600264040ustar00rootroot00000000000000%%{ machine message_ids; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := message_ids; }%% module Mail module Parsers module Ragel module MessageIdsMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb000066400000000000000000000266541267453234600262140ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" module Mail module Parsers module Ragel module MimeVersionMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" class << self attr_accessor :_mime_version_trans_keys private :_mime_version_trans_keys, :_mime_version_trans_keys= end self._mime_version_trans_keys = [ 0, 0, 9, 57, 10, 10, 9, 32, 9, 57, 40, 57, 46, 46, 40, 57, 48, 57, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 57, 9, 40, 9, 40, 0, 0, 0 ] class << self attr_accessor :_mime_version_key_spans private :_mime_version_key_spans, :_mime_version_key_spans= end self._mime_version_key_spans = [ 0, 49, 1, 24, 49, 18, 1, 18, 10, 1, 24, 127, 127, 1, 24, 128, 49, 32, 32, 0 ] class << self attr_accessor :_mime_version_index_offsets private :_mime_version_index_offsets, :_mime_version_index_offsets= end self._mime_version_index_offsets = [ 0, 0, 50, 52, 77, 127, 146, 148, 167, 178, 180, 205, 333, 461, 463, 488, 617, 667, 700, 733 ] class << self attr_accessor :_mime_version_indicies private :_mime_version_indicies, :_mime_version_indicies= end self._mime_version_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 10, 1, 1, 1, 1, 1, 11, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 13, 1, 14, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 17, 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 1, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 21, 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 23, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 24, 24, 24, 24, 24, 24, 24, 24, 24, 1, 24, 24, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 26, 27, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 1, 29, 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 1, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 1, 30, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1, 1, 1, 1, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 18, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 1, 1, 1, 1, 1, 1, 1, 35, 1, 36, 1, 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 1, 1, 1, 1, 1, 1, 38, 1, 1, 0 ] class << self attr_accessor :_mime_version_trans_targs private :_mime_version_trans_targs, :_mime_version_trans_targs= end self._mime_version_trans_targs = [ 1, 0, 2, 4, 5, 3, 1, 2, 4, 5, 6, 7, 5, 7, 8, 16, 16, 10, 17, 12, 13, 12, 19, 15, 12, 13, 12, 19, 15, 14, 17, 9, 18, 16, 9, 18, 17, 9, 18 ] class << self attr_accessor :_mime_version_trans_actions private :_mime_version_trans_actions, :_mime_version_trans_actions= end self._mime_version_trans_actions = [ 0, 0, 0, 1, 2, 0, 3, 3, 4, 5, 6, 7, 0, 3, 1, 8, 9, 0, 0, 10, 10, 11, 12, 10, 0, 0, 1, 13, 0, 0, 14, 14, 15, 0, 0, 1, 3, 3, 4 ] class << self attr_accessor :_mime_version_eof_actions private :_mime_version_eof_actions, :_mime_version_eof_actions= end self._mime_version_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 3, 0 ] class << self attr_accessor :mime_version_start end self.mime_version_start = 1; class << self attr_accessor :mime_version_first_final end self.mime_version_first_final = 16; class << self attr_accessor :mime_version_error end self.mime_version_error = 0; class << self attr_accessor :mime_version_en_comment_tail end self.mime_version_en_comment_tail = 11; class << self attr_accessor :mime_version_en_main end self.mime_version_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 215 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" begin p ||= 0 pe ||= data.length cs = mime_version_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" # line 225 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _mime_version_index_offsets[cs] _slen = _mime_version_key_spans[cs] _trans = if ( _slen > 0 && _mime_version_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _mime_version_trans_keys[_keys + 1] ) then _mime_version_indicies[ _inds + ( data_unpacked[p]) - _mime_version_trans_keys[_keys] ] else _mime_version_indicies[ _inds + _slen ] end cs = _mime_version_trans_targs[_trans] if _mime_version_trans_actions[_trans] != 0 case _mime_version_trans_actions[_trans] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 10 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 7 then # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(24, p) end when 2 then # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(25, p) end when 14 then # line 29 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(26, p) end when 8 then # line 30 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(27, p) end when 1 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 11 _goto_level = _again next end end when 13 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 5 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(25, p) end when 9 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 30 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(27, p) end when 4 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 11 _goto_level = _again next end end when 11 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 11 _goto_level = _again next end end when 12 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 6 then # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(24, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 11 _goto_level = _again next end end when 15 then # line 29 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(26, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 11 _goto_level = _again next end end # line 389 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _mime_version_eof_actions[cs] when 3 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 14 then # line 29 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(26, p) end # line 415 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" if p == eof && cs >= # line 429 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb" 16 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl000066400000000000000000000012661267453234600266200ustar00rootroot00000000000000%%{ machine mime_version; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := mime_version; }%% module Mail module Parsers module Ragel module MimeVersionMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb000066400000000000000000000356251267453234600262160ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" module Mail module Parsers module Ragel module PhraseListsMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" class << self attr_accessor :_phrase_lists_trans_keys private :_phrase_lists_trans_keys, :_phrase_lists_trans_keys= end self._phrase_lists_trans_keys = [ 0, 0, 9, 126, 9, 126, 10, 10, 9, 32, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 9, 126, 9, 126, 9, 126, 0, 0, 0 ] class << self attr_accessor :_phrase_lists_key_spans private :_phrase_lists_key_spans, :_phrase_lists_key_spans= end self._phrase_lists_key_spans = [ 0, 118, 118, 1, 24, 1, 24, 127, 127, 1, 24, 128, 118, 1, 24, 118, 127, 127, 1, 24, 128, 118, 118, 118, 0 ] class << self attr_accessor :_phrase_lists_index_offsets private :_phrase_lists_index_offsets, :_phrase_lists_index_offsets= end self._phrase_lists_index_offsets = [ 0, 0, 119, 238, 240, 265, 267, 292, 420, 548, 550, 575, 704, 823, 825, 850, 969, 1097, 1225, 1227, 1252, 1381, 1500, 1619, 1738 ] class << self attr_accessor :_phrase_lists_indicies private :_phrase_lists_indicies, :_phrase_lists_indicies= end self._phrase_lists_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 7, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 10, 9, 9, 9, 9, 9, 11, 1, 9, 9, 1, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 1, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 12, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 13, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 18, 18, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 21, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 1, 22, 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 23, 1, 1, 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 25, 1, 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 1, 27, 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 29, 30, 29, 29, 29, 29, 29, 31, 1, 29, 29, 1, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 1, 1, 29, 1, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 1, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 32, 32, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 35, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 36, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 39, 40, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 41, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, 42, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 9, 1, 1, 1, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 10, 9, 9, 9, 9, 9, 44, 1, 9, 9, 45, 9, 46, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 1, 9, 46, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 29, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 29, 29, 30, 29, 29, 29, 29, 29, 48, 1, 29, 29, 49, 29, 50, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 1, 1, 29, 1, 29, 50, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 1, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 1, 7, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 10, 9, 9, 9, 9, 9, 11, 1, 9, 9, 45, 9, 46, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 1, 9, 46, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 0 ] class << self attr_accessor :_phrase_lists_trans_targs private :_phrase_lists_trans_targs, :_phrase_lists_trans_targs= end self._phrase_lists_trans_targs = [ 2, 0, 3, 21, 7, 15, 23, 2, 3, 21, 7, 15, 4, 6, 8, 9, 21, 11, 8, 9, 21, 11, 10, 12, 13, 14, 12, 2, 3, 21, 7, 15, 17, 18, 17, 24, 20, 17, 18, 17, 24, 20, 19, 5, 22, 12, 23, 5, 22, 12, 23 ] class << self attr_accessor :_phrase_lists_trans_actions private :_phrase_lists_trans_actions, :_phrase_lists_trans_actions= end self._phrase_lists_trans_actions = [ 1, 0, 1, 1, 1, 2, 1, 0, 0, 0, 0, 3, 0, 0, 4, 4, 5, 4, 0, 0, 6, 0, 0, 1, 1, 0, 0, 7, 7, 7, 7, 8, 9, 9, 10, 11, 9, 0, 0, 3, 12, 0, 0, 0, 3, 13, 0, 7, 8, 14, 7 ] class << self attr_accessor :_phrase_lists_eof_actions private :_phrase_lists_eof_actions, :_phrase_lists_eof_actions= end self._phrase_lists_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 13, 0 ] class << self attr_accessor :phrase_lists_start end self.phrase_lists_start = 1; class << self attr_accessor :phrase_lists_first_final end self.phrase_lists_first_final = 21; class << self attr_accessor :phrase_lists_error end self.phrase_lists_error = 0; class << self attr_accessor :phrase_lists_en_comment_tail end self.phrase_lists_en_comment_tail = 16; class << self attr_accessor :phrase_lists_en_main end self.phrase_lists_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 350 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" begin p ||= 0 pe ||= data.length cs = phrase_lists_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" # line 360 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _phrase_lists_index_offsets[cs] _slen = _phrase_lists_key_spans[cs] _trans = if ( _slen > 0 && _phrase_lists_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _phrase_lists_trans_keys[_keys + 1] ) then _phrase_lists_indicies[ _inds + ( data_unpacked[p]) - _phrase_lists_trans_keys[_keys] ] else _phrase_lists_indicies[ _inds + _slen ] end cs = _phrase_lists_trans_targs[_trans] if _phrase_lists_trans_actions[_trans] != 0 case _phrase_lists_trans_actions[_trans] when 7 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 9 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 13 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 1 then # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end when 6 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 4 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 3 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 16 _goto_level = _again next end end when 12 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 14 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 8 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 16 _goto_level = _again next end end when 10 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 16 _goto_level = _again next end end when 11 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 2 then # line 40 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(37, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 16 _goto_level = _again next end end when 5 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end # line 510 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _phrase_lists_eof_actions[cs] when 13 then # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end when 14 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 39 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(36, p) end # line 539 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" if p == eof && cs >= # line 553 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb" 21 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl000066400000000000000000000012661267453234600266240ustar00rootroot00000000000000%%{ machine phrase_lists; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := phrase_lists; }%% module Mail module Parsers module Ragel module PhraseListsMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl000066400000000000000000000040711267453234600241560ustar00rootroot00000000000000%%{ machine rb_actions; action addr_spec { actions.push(0, p) } action address_e { actions.push(1, p) } action address_s { actions.push(2, p) } action angle_addr_s { actions.push(3, p) } action comment_e { actions.push(4, p) } action comment_s { actions.push(5, p) } action ctime_date_e { actions.push(6, p) } action ctime_date_s { actions.push(7, p) } action date_e { actions.push(8, p) } action date_s { actions.push(9, p) } action disp_type_e { actions.push(10, p) } action disp_type_s { actions.push(11, p) } action domain_e { actions.push(12, p) } action domain_s { actions.push(13, p) } action encoding_e { actions.push(14, p) } action encoding_s { actions.push(15, p) } action group_name_e { actions.push(16, p) } action group_name_s { actions.push(17, p) } action local_dot_atom_e { actions.push(18, p) } action local_dot_atom_pre_comment_e { actions.push(19, p) } action local_dot_atom_s { actions.push(20, p) } action local_quoted_string_e { actions.push(21, p) } action main_type_e { actions.push(22, p) } action main_type_s { actions.push(23, p) } action major_digits_e { actions.push(24, p) } action major_digits_s { actions.push(25, p) } action minor_digits_e { actions.push(26, p) } action minor_digits_s { actions.push(27, p) } action msg_id_e { actions.push(28, p) } action msg_id_s { actions.push(29, p) } action obs_domain_list_e { actions.push(30, p) } action obs_domain_list_s { actions.push(31, p) } action param_attr_e { actions.push(32, p) } action param_attr_s { actions.push(33, p) } action param_val_e { actions.push(34, p) } action param_val_s { actions.push(35, p) } action phrase_e { actions.push(36, p) } action phrase_s { actions.push(37, p) } action qstr_e { actions.push(38, p) } action qstr_s { actions.push(39, p) } action received_tokens_e { actions.push(40, p) } action received_tokens_s { actions.push(41, p) } action sub_type_e { actions.push(42, p) } action sub_type_s { actions.push(43, p) } action time_e { actions.push(44, p) } action time_s { actions.push(45, p) } action token_string_e { actions.push(46, p) } action token_string_s { actions.push(47, p) } }%%mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/received_machine.rb000066400000000000000000005370001267453234600252760ustar00rootroot00000000000000 # line 1 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" # line 10 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" module Mail module Parsers module Ragel module ReceivedMachine # line 13 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" class << self attr_accessor :_received_trans_keys private :_received_trans_keys, :_received_trans_keys= end self._received_trans_keys = [ 0, 0, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 10, 10, 9, 32, 9, 126, 9, 87, 9, 87, 10, 10, 9, 32, 9, 87, 9, 83, 9, 83, 10, 10, 9, 32, 9, 83, 112, 117, 114, 114, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 57, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 10, 10, 9, 32, 9, 58, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 58, 9, 122, 10, 10, 9, 32, 9, 58, 9, 57, 10, 10, 9, 32, 9, 57, 48, 57, 9, 40, 9, 122, 10, 10, 9, 32, 9, 40, 48, 57, 48, 57, 48, 57, 48, 57, 10, 10, 9, 32, 84, 84, 103, 103, 101, 101, 99, 99, 101, 101, 98, 98, 97, 117, 110, 110, 108, 110, 97, 97, 114, 121, 111, 111, 118, 118, 99, 99, 116, 116, 101, 101, 112, 112, 114, 114, 105, 105, 9, 44, 10, 10, 9, 32, 9, 44, 9, 57, 9, 57, 10, 10, 9, 32, 9, 57, 111, 111, 110, 110, 97, 117, 116, 116, 104, 117, 117, 117, 101, 101, 101, 101, 100, 100, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 62, 10, 10, 9, 32, 9, 62, 33, 126, -128, -1, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 0, 127, 1, 127, 10, 10, 9, 32, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 0, 127, 1, 127, 10, 10, 9, 32, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 9, 64, 10, 10, 9, 32, 9, 64, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 58, 10, 10, 9, 32, 9, 58, 33, 126, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 33, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 33, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 9, 126, 0, 127, 10, 10, 9, 32, 9, 126, 33, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, -128, -1, 1, 127, 10, 10, 9, 32, 0, 127, 1, 127, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 10, 10, 9, 32, 9, 126, 9, 126, 9, 126, 9, 126, 1, 127, 1, 127, 10, 10, 9, 32, 0, 127, 9, 40, 9, 40, 9, 40, 9, 83, 9, 77, 9, 84, 0, 0, 0 ] class << self attr_accessor :_received_key_spans private :_received_key_spans, :_received_key_spans= end self._received_key_spans = [ 0, 118, 118, 1, 24, 118, 118, 1, 24, 127, 127, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 1, 24, 118, 79, 79, 1, 24, 79, 75, 75, 1, 24, 75, 6, 1, 49, 1, 24, 49, 10, 49, 49, 1, 24, 49, 10, 50, 1, 24, 50, 49, 1, 24, 49, 10, 50, 114, 1, 24, 50, 49, 1, 24, 49, 10, 32, 114, 1, 24, 32, 10, 10, 10, 10, 1, 24, 1, 1, 1, 1, 1, 1, 21, 1, 3, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 36, 1, 24, 36, 49, 49, 1, 24, 49, 1, 1, 21, 1, 14, 1, 1, 1, 1, 118, 118, 1, 24, 118, 56, 1, 24, 56, 118, 1, 24, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 54, 1, 24, 54, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 54, 1, 24, 54, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 127, 127, 1, 24, 128, 118, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 1, 24, 118, 118, 1, 24, 118, 127, 127, 1, 24, 118, 128, 127, 1, 24, 127, 127, 1, 24, 118, 56, 1, 24, 56, 128, 127, 1, 24, 56, 1, 24, 56, 118, 56, 1, 24, 56, 118, 118, 1, 24, 118, 50, 1, 24, 50, 56, 1, 24, 56, 118, 118, 1, 24, 118, 94, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 50, 1, 24, 50, 94, 128, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 118, 127, 1, 24, 128, 118, 118, 1, 24, 118, 94, 118, 118, 1, 24, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 128, 1, 24, 118, 118, 127, 127, 1, 24, 118, 118, 94, 127, 127, 1, 24, 128, 1, 24, 128, 127, 1, 24, 118, 118, 1, 24, 118, 118, 127, 127, 1, 24, 118, 128, 1, 24, 118, 94, 127, 127, 1, 24, 128, 118, 118, 118, 1, 24, 118, 127, 127, 1, 24, 128, 127, 1, 24, 128, 127, 1, 24, 118, 118, 118, 1, 24, 118, 118, 1, 24, 118, 118, 118, 118, 127, 127, 1, 24, 128, 32, 32, 32, 75, 69, 76, 0 ] class << self attr_accessor :_received_index_offsets private :_received_index_offsets, :_received_index_offsets= end self._received_index_offsets = [ 0, 0, 119, 238, 240, 265, 384, 503, 505, 530, 658, 786, 788, 813, 932, 1051, 1053, 1078, 1197, 1316, 1435, 1437, 1462, 1581, 1583, 1608, 1727, 1807, 1887, 1889, 1914, 1994, 2070, 2146, 2148, 2173, 2249, 2256, 2258, 2308, 2310, 2335, 2385, 2396, 2446, 2496, 2498, 2523, 2573, 2584, 2635, 2637, 2662, 2713, 2763, 2765, 2790, 2840, 2851, 2902, 3017, 3019, 3044, 3095, 3145, 3147, 3172, 3222, 3233, 3266, 3381, 3383, 3408, 3441, 3452, 3463, 3474, 3485, 3487, 3512, 3514, 3516, 3518, 3520, 3522, 3524, 3546, 3548, 3552, 3554, 3563, 3565, 3567, 3569, 3571, 3573, 3575, 3577, 3579, 3616, 3618, 3643, 3680, 3730, 3780, 3782, 3807, 3857, 3859, 3861, 3883, 3885, 3900, 3902, 3904, 3906, 3908, 4027, 4146, 4148, 4173, 4292, 4349, 4351, 4376, 4433, 4552, 4554, 4579, 4698, 4755, 4757, 4782, 4839, 4958, 5077, 5079, 5104, 5223, 5278, 5280, 5305, 5360, 5479, 5481, 5506, 5625, 5744, 5872, 6000, 6002, 6027, 6146, 6201, 6203, 6228, 6283, 6378, 6507, 6509, 6534, 6653, 6772, 6900, 6902, 6927, 7056, 7184, 7312, 7314, 7339, 7468, 7587, 7715, 7843, 7845, 7870, 7989, 8046, 8048, 8073, 8130, 8259, 8261, 8286, 8405, 8524, 8526, 8551, 8670, 8798, 8926, 8928, 8953, 9072, 9201, 9329, 9331, 9356, 9484, 9612, 9614, 9639, 9758, 9815, 9817, 9842, 9899, 10028, 10156, 10158, 10183, 10240, 10242, 10267, 10324, 10443, 10500, 10502, 10527, 10584, 10703, 10822, 10824, 10849, 10968, 11019, 11021, 11046, 11097, 11154, 11156, 11181, 11238, 11357, 11476, 11478, 11503, 11622, 11717, 11836, 11838, 11863, 11982, 12101, 12229, 12357, 12359, 12384, 12503, 12554, 12556, 12581, 12632, 12727, 12856, 12858, 12883, 13002, 13121, 13249, 13251, 13276, 13405, 13524, 13643, 13645, 13670, 13789, 13908, 13910, 13935, 14054, 14173, 14292, 14294, 14319, 14438, 14557, 14685, 14687, 14712, 14841, 14960, 15079, 15081, 15106, 15225, 15320, 15439, 15558, 15560, 15585, 15704, 15823, 15942, 15944, 15969, 16088, 16216, 16344, 16346, 16371, 16500, 16502, 16527, 16646, 16765, 16893, 17021, 17023, 17048, 17167, 17286, 17381, 17509, 17637, 17639, 17664, 17793, 17795, 17820, 17949, 18077, 18079, 18104, 18223, 18342, 18344, 18369, 18488, 18607, 18735, 18863, 18865, 18890, 19009, 19138, 19140, 19165, 19284, 19379, 19507, 19635, 19637, 19662, 19791, 19910, 20029, 20148, 20150, 20175, 20294, 20422, 20550, 20552, 20577, 20706, 20834, 20836, 20861, 20990, 21118, 21120, 21145, 21264, 21383, 21502, 21504, 21529, 21648, 21767, 21769, 21794, 21913, 22032, 22151, 22270, 22398, 22526, 22528, 22553, 22682, 22715, 22748, 22781, 22857, 22927, 23004 ] class << self attr_accessor :_received_indicies private :_received_indicies, :_received_indicies= end self._received_indicies = [ 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 4, 3, 3, 3, 3, 3, 5, 1, 3, 3, 1, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 7, 8, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 9, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 10, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 12, 13, 12, 12, 12, 12, 12, 14, 1, 12, 12, 1, 12, 15, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 16, 17, 12, 1, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 19, 1, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 21, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 23, 24, 23, 23, 23, 23, 23, 25, 1, 23, 23, 1, 23, 26, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 27, 28, 23, 1, 23, 29, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 30, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 31, 1, 1, 1, 32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, 33, 34, 33, 33, 33, 33, 33, 35, 1, 33, 33, 1, 33, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 37, 38, 33, 1, 33, 39, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 40, 1, 1, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 41, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 43, 43, 43, 43, 43, 43, 43, 43, 44, 1, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 43, 46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 47, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1, 48, 48, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1, 52, 1, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 53, 1, 1, 1, 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 53, 55, 56, 55, 55, 55, 55, 55, 57, 1, 55, 55, 1, 55, 58, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 1, 59, 60, 55, 1, 55, 61, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 62, 1, 1, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 1, 63, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 65, 66, 65, 65, 65, 65, 65, 67, 1, 65, 65, 1, 65, 68, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 69, 70, 65, 1, 65, 71, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 72, 1, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 73, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 1, 75, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 77, 78, 77, 77, 77, 77, 77, 79, 1, 77, 77, 1, 77, 80, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1, 81, 82, 77, 1, 77, 83, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 84, 1, 1, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 1, 85, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 87, 88, 87, 87, 87, 87, 87, 89, 1, 87, 87, 1, 87, 90, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 1, 1, 87, 1, 87, 1, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 1, 1, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 1, 85, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 91, 92, 91, 91, 91, 91, 91, 89, 1, 91, 91, 1, 91, 1, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 1, 1, 1, 91, 1, 91, 1, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 1, 1, 1, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 1, 93, 1, 85, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 85, 1, 94, 1, 1, 1, 95, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 94, 12, 13, 12, 12, 12, 12, 12, 96, 1, 12, 12, 1, 12, 97, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 16, 17, 12, 1, 12, 98, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 99, 1, 91, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 91, 1, 100, 1, 1, 1, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 102, 103, 102, 102, 102, 102, 102, 104, 1, 102, 102, 1, 102, 105, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 1, 106, 107, 102, 1, 102, 108, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 109, 1, 1, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 1, 110, 1, 1, 1, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110, 1, 1, 1, 1, 1, 1, 1, 112, 1, 1, 1, 1, 1, 1, 1, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 114, 1, 1, 1, 1, 1, 1, 115, 1, 1, 1, 1, 1, 116, 117, 1, 1, 118, 1, 119, 1, 1, 1, 120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 119, 1, 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 114, 1, 1, 1, 1, 1, 1, 115, 1, 1, 1, 1, 1, 116, 117, 1, 1, 118, 1, 123, 1, 119, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 119, 1, 124, 1, 1, 1, 125, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 124, 1, 1, 1, 1, 1, 1, 1, 126, 1, 1, 1, 1, 1, 1, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 128, 1, 1, 1, 1, 1, 1, 129, 1, 1, 1, 1, 1, 130, 131, 1, 1, 132, 1, 133, 1, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 135, 1, 1, 1, 1, 1, 1, 1, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 1, 1, 1, 1, 1, 1, 1, 136, 1, 1, 137, 1, 138, 1, 1, 1, 139, 1, 1, 140, 141, 142, 1, 1, 1, 143, 1, 133, 1, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 135, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 136, 1, 1, 137, 1, 138, 1, 1, 1, 139, 1, 1, 140, 141, 142, 1, 1, 1, 143, 1, 144, 1, 133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 145, 1, 1, 1, 146, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 145, 1, 1, 1, 1, 1, 1, 1, 147, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 148, 1, 1, 149, 1, 150, 1, 1, 1, 151, 1, 1, 152, 153, 154, 1, 1, 1, 155, 1, 156, 1, 1, 1, 1, 157, 1, 158, 1, 158, 1, 1, 1, 159, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 158, 1, 1, 1, 1, 1, 1, 1, 160, 1, 1, 1, 1, 1, 1, 1, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 1, 162, 1, 158, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 158, 1, 163, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 1, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 1, 168, 1, 1, 1, 169, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 168, 1, 1, 1, 1, 1, 1, 1, 170, 1, 1, 1, 1, 1, 1, 1, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 1, 168, 1, 1, 1, 169, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 168, 1, 1, 1, 1, 1, 1, 1, 170, 1, 1, 1, 1, 1, 1, 1, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 1, 172, 1, 168, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 168, 1, 173, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 173, 1, 1, 1, 1, 1, 1, 1, 175, 1, 1, 1, 1, 1, 1, 1, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 1, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 1, 177, 1, 1, 1, 178, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 1, 1, 1, 1, 1, 1, 179, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 1, 181, 1, 177, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 182, 1, 1, 1, 183, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 182, 1, 1, 1, 1, 1, 1, 1, 184, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 185, 1, 180, 1, 1, 1, 186, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 1, 1, 1, 1, 1, 1, 1, 187, 1, 1, 1, 1, 1, 1, 1, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 1, 189, 1, 180, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 1, 185, 1, 1, 1, 190, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 185, 1, 1, 1, 1, 1, 1, 1, 191, 1, 1, 1, 1, 1, 1, 1, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 1, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 1, 194, 1, 1, 1, 195, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 194, 1, 1, 1, 1, 1, 1, 1, 196, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 194, 1, 1, 1, 195, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 194, 1, 1, 1, 1, 1, 1, 1, 196, 1, 1, 198, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 1, 1, 1, 1, 1, 199, 199, 200, 199, 200, 199, 201, 199, 199, 1, 199, 199, 200, 199, 199, 200, 199, 199, 199, 199, 202, 199, 199, 199, 199, 199, 1, 1, 1, 1, 1, 1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 203, 1, 194, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 194, 1, 204, 1, 1, 1, 205, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 204, 1, 1, 1, 1, 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 207, 1, 197, 1, 1, 1, 208, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 1, 1, 1, 1, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 1, 211, 1, 197, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 1, 207, 1, 1, 1, 212, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 207, 1, 1, 1, 1, 1, 1, 1, 213, 1, 1, 1, 1, 1, 1, 1, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 1, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 1, 216, 1, 1, 1, 217, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 218, 1, 216, 1, 1, 1, 217, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 216, 1, 1, 1, 1, 1, 1, 1, 218, 1, 1, 198, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199, 199, 200, 199, 200, 199, 201, 199, 199, 1, 199, 199, 200, 199, 199, 200, 199, 199, 199, 199, 202, 199, 199, 199, 199, 199, 1, 1, 1, 1, 1, 1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 219, 1, 216, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 216, 1, 220, 1, 1, 1, 221, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 220, 1, 1, 1, 1, 1, 1, 1, 222, 1, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 1, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 1, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 1, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 226, 1, 227, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 227, 1, 199, 1, 158, 1, 228, 1, 158, 1, 229, 1, 158, 1, 230, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 231, 1, 158, 1, 158, 1, 158, 1, 232, 1, 158, 1, 1, 1, 1, 1, 1, 158, 1, 233, 1, 158, 1, 234, 1, 158, 1, 235, 1, 158, 1, 236, 1, 237, 1, 237, 1, 1, 1, 238, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 237, 1, 1, 1, 1, 1, 1, 1, 239, 1, 1, 1, 240, 1, 241, 1, 237, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 237, 1, 242, 1, 1, 1, 243, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 242, 1, 1, 1, 1, 1, 1, 1, 244, 1, 1, 1, 245, 1, 246, 1, 1, 1, 247, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 246, 1, 1, 1, 1, 1, 1, 1, 248, 1, 1, 1, 1, 1, 1, 1, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 1, 249, 1, 1, 1, 250, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 249, 1, 1, 1, 1, 1, 1, 1, 251, 1, 1, 1, 1, 1, 1, 1, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 1, 252, 1, 249, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 249, 1, 253, 1, 1, 1, 254, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 253, 1, 1, 1, 1, 1, 1, 1, 255, 1, 1, 1, 1, 1, 1, 1, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 1, 256, 1, 237, 1, 257, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 256, 1, 237, 1, 258, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 259, 1, 237, 1, 237, 1, 260, 1, 237, 1, 261, 1, 1, 1, 262, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 261, 263, 264, 263, 263, 263, 263, 263, 265, 1, 263, 263, 266, 263, 267, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 1, 263, 268, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 269, 1, 1, 1, 270, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 269, 263, 264, 263, 263, 263, 263, 263, 271, 1, 263, 263, 272, 263, 267, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 1, 263, 273, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 274, 1, 269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 269, 1, 275, 1, 1, 1, 276, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 275, 277, 278, 277, 277, 277, 277, 277, 279, 1, 277, 277, 1, 277, 280, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 1, 1, 277, 281, 277, 282, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 1, 1, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 283, 1, 1, 1, 284, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 283, 1, 1, 1, 1, 1, 1, 1, 285, 1, 1, 1, 1, 1, 286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 287, 1, 288, 1, 283, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 283, 1, 289, 1, 1, 1, 290, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 289, 1, 1, 1, 1, 1, 1, 1, 291, 1, 1, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 293, 1, 294, 1, 286, 1, 1, 1, 295, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 286, 296, 297, 296, 296, 296, 296, 296, 298, 1, 296, 296, 1, 296, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 1, 296, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 299, 1, 286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 286, 1, 300, 1, 1, 1, 301, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 300, 296, 1, 296, 296, 296, 296, 296, 302, 1, 296, 296, 1, 296, 286, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 20, 296, 303, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 300, 1, 1, 1, 301, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 300, 1, 1, 1, 1, 1, 1, 1, 302, 1, 1, 1, 1, 1, 286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 303, 1, 304, 1, 300, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 300, 1, 305, 1, 1, 1, 306, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 305, 1, 1, 1, 1, 1, 1, 1, 307, 1, 1, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 293, 1, 308, 1, 309, 1, 1, 1, 310, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 309, 311, 312, 311, 311, 311, 311, 311, 313, 1, 311, 311, 1, 311, 314, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 1, 1, 1, 311, 1, 311, 1, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 315, 1, 1, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 1, 316, 1, 1, 1, 317, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 316, 318, 319, 318, 318, 318, 318, 318, 320, 1, 318, 318, 1, 318, 321, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 1, 1, 318, 1, 318, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 322, 1, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 323, 1, 316, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 316, 1, 324, 1, 1, 1, 325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 324, 318, 319, 318, 318, 318, 318, 318, 326, 1, 318, 318, 1, 318, 327, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 1, 1, 318, 328, 318, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 1, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 324, 1, 1, 1, 325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 324, 1, 1, 1, 1, 1, 1, 1, 326, 1, 1, 1, 1, 1, 329, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 328, 1, 330, 1, 324, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 324, 1, 331, 1, 1, 1, 332, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 331, 1, 1, 1, 1, 1, 1, 1, 333, 1, 1, 1, 1, 1, 334, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 335, 1, 329, 1, 1, 1, 336, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 329, 337, 1, 337, 337, 337, 337, 337, 338, 1, 337, 337, 1, 337, 1, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 1, 1, 337, 1, 337, 1, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 1, 1, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 339, 1, 329, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 329, 1, 324, 1, 1, 1, 325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 324, 337, 1, 337, 337, 337, 337, 337, 326, 1, 337, 337, 1, 337, 329, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 1, 1, 337, 328, 337, 1, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 1, 1, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 1, 334, 1, 1, 1, 340, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 334, 341, 1, 341, 341, 341, 341, 341, 342, 1, 341, 341, 1, 341, 1, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 1, 1, 1, 341, 1, 341, 1, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 1, 1, 1, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 1, 343, 343, 343, 343, 343, 343, 343, 343, 319, 1, 343, 343, 344, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 319, 343, 1, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 345, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 1, 343, 343, 343, 343, 343, 343, 343, 343, 343, 1, 343, 343, 346, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 347, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 345, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 1, 348, 1, 343, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 1, 349, 1, 1, 1, 350, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 349, 347, 319, 347, 347, 347, 347, 347, 351, 1, 347, 347, 1, 347, 321, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 1, 1, 347, 328, 347, 1, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 1, 1, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 349, 1, 1, 1, 350, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 349, 1, 1, 1, 1, 1, 1, 1, 351, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 328, 1, 352, 1, 349, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 349, 1, 353, 1, 1, 1, 354, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 353, 1, 1, 1, 1, 1, 1, 1, 355, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 335, 1, 347, 319, 347, 347, 347, 347, 347, 1, 1, 347, 347, 1, 347, 321, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 1, 1, 347, 1, 347, 1, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 1, 1, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 343, 356, 1, 319, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 319, 1, 329, 1, 1, 1, 336, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 329, 318, 319, 318, 318, 318, 318, 318, 338, 1, 318, 318, 1, 318, 321, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 1, 1, 318, 1, 318, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 1, 1, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 1, 357, 1, 1, 1, 358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 357, 359, 360, 359, 359, 359, 359, 359, 361, 1, 359, 359, 1, 359, 362, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1, 1, 1, 359, 1, 359, 1, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 363, 1, 1, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1, 322, 322, 322, 322, 322, 322, 322, 322, 322, 1, 322, 322, 364, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 1, 365, 349, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 1, 366, 1, 322, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 322, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 322, 367, 367, 367, 367, 367, 367, 367, 367, 367, 1, 367, 367, 368, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 369, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 370, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 1, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 371, 371, 372, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 373, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 374, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 375, 1, 371, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 371, 1, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 1, 292, 1, 1, 1, 376, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 292, 377, 378, 377, 377, 377, 377, 377, 379, 1, 377, 377, 1, 377, 1, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 1, 1, 377, 1, 377, 1, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 1, 1, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 380, 380, 380, 380, 380, 380, 380, 380, 278, 1, 380, 380, 381, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 278, 380, 1, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 382, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 1, 380, 380, 380, 380, 380, 380, 380, 380, 380, 1, 380, 380, 383, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 384, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 382, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 1, 385, 1, 380, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 380, 1, 386, 1, 1, 1, 387, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 386, 384, 278, 384, 384, 384, 384, 384, 388, 1, 384, 384, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 281, 384, 282, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 389, 1, 1, 1, 390, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 389, 1, 1, 1, 1, 1, 1, 1, 391, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 287, 1, 392, 1, 389, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 389, 1, 393, 1, 1, 1, 394, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 393, 1, 1, 1, 1, 1, 1, 1, 395, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 293, 1, 294, 1, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 1, 396, 1, 278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 278, 1, 397, 1, 1, 1, 398, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 397, 277, 399, 277, 277, 277, 277, 277, 400, 1, 277, 277, 1, 277, 384, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 1, 1, 277, 281, 277, 282, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 1, 1, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 1, 401, 1, 1, 1, 402, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 401, 296, 297, 296, 296, 296, 296, 296, 403, 1, 296, 296, 1, 296, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 20, 296, 287, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 1, 1, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 1, 404, 1, 401, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 401, 1, 405, 1, 1, 1, 406, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 405, 377, 378, 377, 377, 377, 377, 377, 407, 1, 377, 377, 1, 377, 1, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 1, 1, 377, 293, 377, 294, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 1, 1, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 1, 408, 408, 408, 408, 408, 408, 408, 408, 409, 1, 408, 408, 410, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 409, 408, 369, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 411, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 1, 412, 412, 412, 412, 412, 412, 412, 412, 412, 1, 412, 412, 413, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 414, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 415, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 1, 416, 1, 412, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 412, 1, 275, 1, 1, 1, 276, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 275, 384, 278, 384, 384, 384, 384, 384, 279, 1, 384, 384, 1, 384, 280, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 281, 384, 282, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 1, 412, 412, 412, 412, 412, 412, 412, 412, 417, 1, 412, 412, 418, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 417, 412, 373, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 415, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 1, 419, 1, 417, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 417, 1, 420, 420, 420, 420, 420, 420, 420, 420, 421, 1, 420, 420, 422, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 421, 420, 423, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 424, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 1, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1, 425, 425, 426, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 427, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 428, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1, 429, 1, 425, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 425, 1, 430, 1, 1, 1, 431, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 430, 384, 278, 384, 384, 384, 384, 384, 432, 1, 384, 384, 1, 384, 280, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 281, 384, 433, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 434, 1, 1, 1, 435, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 434, 1, 1, 1, 1, 1, 1, 1, 436, 1, 1, 1, 1, 1, 286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 437, 1, 438, 1, 434, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 434, 1, 439, 1, 1, 1, 440, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 439, 1, 1, 1, 1, 1, 1, 1, 441, 1, 1, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 293, 1, 442, 1, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1, 425, 425, 425, 425, 425, 425, 425, 425, 443, 1, 425, 425, 444, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 443, 425, 445, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 428, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1, 446, 1, 443, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 443, 1, 447, 1, 1, 1, 448, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 447, 1, 1, 1, 1, 1, 1, 1, 449, 1, 1, 1, 1, 1, 286, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 450, 1, 451, 1, 447, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 447, 1, 452, 1, 1, 1, 453, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 452, 1, 1, 1, 1, 1, 1, 1, 454, 1, 1, 1, 1, 1, 292, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 293, 1, 455, 1, 456, 1, 1, 1, 457, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 456, 458, 459, 458, 458, 458, 458, 458, 460, 1, 458, 458, 461, 458, 462, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 1, 1, 458, 1, 458, 463, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 1, 1, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 272, 1, 1, 1, 464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 272, 1, 1, 1, 1, 1, 1, 1, 465, 1, 1, 1, 272, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 273, 1, 466, 1, 272, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 272, 1, 461, 1, 1, 1, 467, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 461, 1, 1, 1, 1, 1, 1, 1, 468, 1, 1, 1, 461, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 463, 1, 469, 1, 1, 1, 470, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 469, 471, 472, 471, 471, 471, 471, 471, 473, 1, 471, 471, 1, 471, 474, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 1, 1, 1, 471, 1, 471, 1, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 475, 1, 1, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 1, 476, 1, 1, 1, 477, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 476, 478, 479, 478, 478, 478, 478, 478, 480, 1, 478, 478, 1, 478, 481, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 1, 1, 478, 1, 478, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 482, 1, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 483, 1, 476, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 476, 1, 484, 1, 1, 1, 485, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 484, 478, 479, 478, 478, 478, 478, 478, 486, 1, 478, 478, 487, 478, 488, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 489, 1, 1, 478, 1, 478, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 1, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 484, 1, 1, 1, 485, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 484, 1, 1, 1, 1, 1, 1, 1, 486, 1, 1, 1, 487, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 1, 491, 1, 484, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 484, 1, 492, 1, 1, 1, 493, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 492, 1, 1, 1, 1, 1, 1, 1, 494, 1, 1, 1, 495, 1, 496, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 497, 1, 498, 1, 1, 1, 499, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 498, 1, 1, 1, 1, 1, 1, 1, 500, 1, 1, 1, 498, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 501, 1, 1, 1, 1, 1, 273, 1, 502, 1, 498, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 498, 1, 503, 1, 1, 1, 504, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 503, 1, 1, 1, 1, 1, 1, 1, 505, 1, 1, 1, 503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 506, 1, 1, 1, 1, 1, 463, 1, 507, 1, 1, 1, 508, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 507, 509, 510, 509, 509, 509, 509, 509, 511, 1, 509, 509, 1, 509, 512, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 1, 1, 1, 509, 1, 509, 1, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 1, 1, 1, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 1, 513, 1, 1, 1, 514, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 513, 263, 264, 263, 263, 263, 263, 263, 515, 1, 263, 263, 1, 263, 267, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 1, 263, 1, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 1, 1, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 1, 516, 1, 513, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 513, 1, 517, 1, 1, 1, 518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 517, 458, 459, 458, 458, 458, 458, 458, 519, 1, 458, 458, 1, 458, 462, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 1, 1, 458, 1, 458, 1, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 1, 1, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 1, 384, 278, 384, 384, 384, 384, 384, 1, 1, 384, 384, 1, 384, 520, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 1, 384, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 1, 1, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 1, 490, 1, 1, 1, 521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 490, 522, 1, 522, 522, 522, 522, 522, 523, 1, 522, 522, 1, 522, 1, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 1, 1, 1, 522, 1, 522, 1, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 1, 1, 1, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 1, 524, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 490, 1, 484, 1, 1, 1, 485, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 484, 522, 1, 522, 522, 522, 522, 522, 486, 1, 522, 522, 487, 522, 490, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 489, 1, 1, 522, 1, 522, 1, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 1, 1, 1, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 1, 496, 1, 1, 1, 525, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 496, 526, 1, 526, 526, 526, 526, 526, 527, 1, 526, 526, 1, 526, 1, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 1, 1, 1, 526, 1, 526, 1, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 1, 1, 1, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 1, 528, 528, 528, 528, 528, 528, 528, 528, 479, 1, 528, 528, 529, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 479, 528, 1, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 530, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 1, 528, 528, 528, 528, 528, 528, 528, 528, 528, 1, 528, 528, 531, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 532, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 530, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 1, 533, 1, 528, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 528, 1, 534, 1, 1, 1, 535, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 534, 532, 479, 532, 532, 532, 532, 532, 536, 1, 532, 532, 487, 532, 481, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 489, 1, 1, 532, 1, 532, 1, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 1, 1, 1, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 1, 534, 1, 1, 1, 535, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 534, 1, 1, 1, 1, 1, 1, 1, 536, 1, 1, 1, 487, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 1, 537, 1, 534, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 534, 1, 538, 1, 1, 1, 539, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 538, 1, 1, 1, 1, 1, 1, 1, 540, 1, 1, 1, 495, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 497, 1, 532, 479, 532, 532, 532, 532, 532, 1, 1, 532, 532, 1, 532, 481, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 1, 1, 1, 532, 1, 532, 1, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 1, 1, 1, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 1, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 1, 541, 1, 479, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 479, 1, 490, 1, 1, 1, 521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 490, 478, 479, 478, 478, 478, 478, 478, 523, 1, 478, 478, 1, 478, 481, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 1, 1, 478, 1, 478, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 1, 1, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 1, 542, 1, 1, 1, 543, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 542, 544, 545, 544, 544, 544, 544, 544, 546, 1, 544, 544, 1, 544, 547, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 1, 1, 1, 544, 1, 544, 1, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 548, 1, 1, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 1, 482, 482, 482, 482, 482, 482, 482, 482, 482, 1, 482, 482, 549, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 1, 550, 534, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 1, 551, 1, 482, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 482, 1, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 1, 552, 1, 1, 1, 553, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 552, 554, 555, 554, 554, 554, 554, 554, 556, 1, 554, 554, 1, 554, 557, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 1, 1, 554, 1, 554, 1, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 18, 1, 1, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 1, 558, 1, 1, 1, 559, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 558, 560, 561, 560, 560, 560, 560, 560, 562, 1, 560, 560, 1, 560, 563, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1, 1, 1, 560, 1, 560, 1, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 564, 1, 1, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1, 565, 1, 558, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 558, 1, 566, 1, 1, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 566, 568, 569, 568, 568, 568, 568, 568, 570, 1, 568, 568, 1, 568, 571, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1, 572, 573, 568, 1, 568, 1, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 574, 1, 1, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1, 566, 1, 1, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 566, 575, 576, 575, 575, 575, 575, 575, 570, 1, 575, 575, 1, 575, 577, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 572, 578, 575, 1, 575, 1, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 574, 1, 1, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 579, 1, 580, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 580, 1, 581, 1, 1, 1, 582, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 581, 583, 584, 583, 583, 583, 583, 583, 585, 1, 583, 583, 1, 583, 586, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 587, 588, 583, 1, 583, 1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 589, 1, 1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 590, 1, 1, 1, 591, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 592, 593, 592, 592, 592, 592, 592, 594, 1, 592, 592, 1, 592, 90, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 1, 1, 1, 592, 1, 592, 1, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 1, 1, 1, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 1, 590, 1, 1, 1, 591, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 595, 1, 595, 595, 595, 595, 595, 594, 1, 595, 595, 1, 595, 1, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 1, 1, 1, 595, 1, 595, 1, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 1, 1, 1, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 1, 596, 1, 590, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 1, 566, 1, 1, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 566, 597, 598, 597, 597, 597, 597, 597, 570, 1, 597, 597, 1, 597, 599, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 1, 572, 573, 597, 1, 597, 1, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 574, 1, 1, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 1, 566, 1, 1, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 566, 597, 598, 597, 597, 597, 597, 597, 570, 1, 597, 597, 1, 597, 599, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 1, 600, 573, 597, 1, 597, 29, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 574, 1, 1, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 1, 564, 564, 564, 564, 564, 564, 564, 564, 564, 1, 564, 564, 601, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 1, 602, 603, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 1, 604, 1, 564, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 564, 1, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 1, 605, 1, 1, 1, 606, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 605, 607, 598, 607, 607, 607, 607, 607, 608, 1, 607, 607, 1, 607, 609, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 1, 572, 573, 607, 1, 607, 1, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 574, 1, 1, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 1, 605, 1, 1, 1, 606, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 605, 575, 576, 575, 575, 575, 575, 575, 608, 1, 575, 575, 1, 575, 610, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 572, 578, 575, 1, 575, 1, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 574, 1, 1, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 611, 1, 612, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 612, 1, 613, 1, 1, 1, 614, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 613, 583, 584, 583, 583, 583, 583, 583, 615, 1, 583, 583, 1, 583, 616, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 587, 588, 583, 1, 583, 1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 589, 1, 1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 617, 593, 617, 617, 617, 617, 617, 1, 1, 617, 617, 1, 617, 90, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 1, 1, 1, 617, 1, 617, 1, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 1, 1, 1, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 1, 618, 1, 1, 1, 619, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 618, 23, 24, 23, 23, 23, 23, 23, 620, 1, 23, 23, 1, 23, 26, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 27, 28, 23, 1, 23, 29, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 30, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 621, 1, 1, 1, 622, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 621, 33, 34, 33, 33, 33, 33, 33, 623, 1, 33, 33, 1, 33, 624, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 37, 38, 33, 1, 33, 39, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 40, 1, 1, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 625, 1, 626, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 626, 1, 627, 1, 1, 1, 628, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 627, 629, 630, 629, 629, 629, 629, 629, 631, 1, 629, 629, 1, 629, 632, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 633, 634, 629, 1, 629, 635, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 636, 1, 1, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 637, 1, 1, 1, 638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 637, 639, 640, 639, 639, 639, 639, 639, 641, 1, 639, 639, 1, 639, 642, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 1, 643, 644, 639, 1, 639, 29, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 645, 1, 1, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 1, 646, 1, 1, 1, 647, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 646, 648, 649, 648, 648, 648, 648, 648, 650, 1, 648, 648, 1, 648, 651, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 1, 652, 653, 648, 1, 648, 39, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 654, 1, 1, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 1, 655, 1, 656, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 656, 1, 657, 1, 1, 1, 658, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 657, 659, 660, 659, 659, 659, 659, 659, 661, 1, 659, 659, 1, 659, 662, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 1, 663, 664, 659, 1, 659, 635, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 665, 1, 1, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 1, 666, 666, 666, 666, 666, 666, 666, 666, 593, 1, 666, 666, 667, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 593, 666, 1, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 668, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 1, 666, 666, 666, 666, 666, 666, 666, 666, 666, 1, 666, 666, 669, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 617, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 668, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 1, 670, 1, 666, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 666, 1, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 1, 671, 1, 593, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 593, 1, 672, 1, 1, 1, 673, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 672, 674, 1, 674, 674, 674, 674, 674, 675, 1, 674, 674, 1, 674, 1, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 1, 1, 1, 674, 1, 674, 1, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 1, 1, 1, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 1, 566, 1, 1, 1, 567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 566, 568, 569, 568, 568, 568, 568, 568, 570, 1, 568, 568, 1, 568, 571, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1, 600, 573, 568, 1, 568, 29, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 574, 1, 1, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1, 676, 676, 676, 676, 676, 676, 676, 676, 677, 1, 676, 676, 678, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 677, 676, 46, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 679, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 1, 680, 680, 680, 680, 680, 680, 680, 680, 680, 1, 680, 680, 681, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 682, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 683, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 1, 684, 1, 680, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 680, 1, 605, 1, 1, 1, 606, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 605, 685, 569, 685, 685, 685, 685, 685, 608, 1, 685, 685, 1, 685, 686, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 687, 573, 685, 1, 685, 61, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 574, 1, 1, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 605, 1, 1, 1, 606, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 605, 685, 569, 685, 685, 685, 685, 685, 608, 1, 685, 685, 1, 685, 686, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 600, 573, 685, 1, 685, 29, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 574, 1, 1, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 688, 689, 688, 688, 688, 688, 688, 1, 1, 688, 688, 1, 688, 690, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 1, 1, 1, 688, 1, 688, 1, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 1, 1, 1, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 1, 691, 691, 691, 691, 691, 691, 691, 691, 689, 1, 691, 691, 692, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 689, 691, 1, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 693, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 1, 691, 691, 691, 691, 691, 691, 691, 691, 691, 1, 691, 691, 694, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 688, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 693, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 1, 695, 1, 691, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 691, 1, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 1, 696, 1, 689, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 689, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 680, 680, 680, 680, 680, 680, 680, 680, 680, 697, 1, 680, 680, 698, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 697, 680, 699, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 683, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 1, 700, 1, 697, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 697, 1, 701, 1, 1, 1, 702, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 701, 703, 704, 703, 703, 703, 703, 703, 705, 1, 703, 703, 1, 703, 706, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 1, 707, 708, 703, 1, 703, 709, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 710, 1, 1, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 1, 701, 1, 1, 1, 702, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 701, 711, 712, 711, 711, 711, 711, 711, 705, 1, 711, 711, 1, 711, 713, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 1, 707, 714, 711, 1, 711, 709, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 710, 1, 1, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 1, 715, 1, 716, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 716, 1, 717, 1, 1, 1, 718, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 717, 719, 720, 719, 719, 719, 719, 719, 721, 1, 719, 719, 1, 719, 722, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 1, 723, 724, 719, 1, 719, 725, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 726, 1, 1, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 1, 590, 1, 1, 1, 591, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 590, 727, 689, 727, 727, 727, 727, 727, 594, 1, 727, 727, 1, 727, 690, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 1, 1, 1, 727, 1, 727, 1, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 1, 1, 1, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 1, 728, 728, 728, 728, 728, 728, 728, 728, 561, 1, 728, 728, 729, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 561, 728, 1, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 730, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 1, 728, 728, 728, 728, 728, 728, 728, 728, 728, 1, 728, 728, 731, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 732, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 730, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 1, 733, 1, 728, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 728, 1, 605, 1, 1, 1, 606, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 605, 685, 569, 685, 685, 685, 685, 685, 608, 1, 685, 685, 1, 685, 686, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 572, 573, 685, 1, 685, 1, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 574, 1, 1, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 1, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 1, 734, 1, 561, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 561, 1, 735, 1, 1, 1, 736, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 735, 737, 738, 737, 737, 737, 737, 737, 739, 1, 737, 737, 1, 737, 740, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 1, 1, 1, 737, 1, 737, 1, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 741, 1, 1, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 1, 732, 561, 732, 732, 732, 732, 732, 1, 1, 732, 732, 1, 732, 563, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 1, 1, 1, 732, 1, 732, 1, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 1, 1, 1, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 1, 742, 742, 742, 742, 742, 742, 742, 742, 742, 1, 742, 742, 743, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 744, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 745, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 1, 746, 746, 746, 746, 746, 746, 746, 746, 746, 1, 746, 746, 747, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 748, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 749, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 1, 750, 1, 746, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 746, 1, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 1, 751, 1, 1, 1, 752, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 751, 753, 754, 753, 753, 753, 753, 753, 755, 1, 753, 753, 1, 753, 1, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 1, 1, 1, 753, 1, 753, 1, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 1, 1, 1, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 1, 756, 1, 1, 1, 757, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 756, 23, 24, 23, 23, 23, 23, 23, 758, 1, 23, 23, 1, 23, 26, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 27, 28, 23, 1, 23, 29, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 30, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 759, 1, 1, 1, 760, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 759, 33, 34, 33, 33, 33, 33, 33, 761, 1, 33, 33, 1, 33, 762, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 37, 38, 33, 1, 33, 39, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 40, 1, 1, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 1, 763, 1, 764, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 764, 1, 765, 1, 1, 1, 766, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 765, 629, 630, 629, 629, 629, 629, 629, 767, 1, 629, 629, 1, 629, 768, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 633, 634, 629, 1, 629, 635, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 636, 1, 1, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 769, 769, 769, 769, 769, 769, 769, 769, 770, 1, 769, 769, 771, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 770, 769, 744, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 772, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 1, 773, 773, 773, 773, 773, 773, 773, 773, 773, 1, 773, 773, 774, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 775, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 776, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 1, 777, 1, 773, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 773, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 773, 773, 773, 773, 773, 773, 773, 773, 773, 778, 1, 773, 773, 779, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 778, 773, 748, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 776, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 1, 780, 1, 778, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 778, 1, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1, 48, 48, 48, 48, 48, 48, 48, 48, 781, 1, 48, 48, 782, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 781, 48, 699, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1, 783, 1, 781, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 781, 1, 784, 1, 1, 1, 785, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 784, 629, 630, 629, 629, 629, 629, 629, 786, 1, 629, 629, 1, 629, 787, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 633, 634, 629, 1, 629, 635, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 636, 1, 1, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1, 788, 1, 1, 1, 789, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 788, 790, 88, 790, 790, 790, 790, 790, 791, 1, 790, 790, 1, 790, 90, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 1, 1, 1, 790, 1, 790, 1, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 1, 1, 1, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 1, 788, 1, 1, 1, 789, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 788, 792, 92, 792, 792, 792, 792, 792, 791, 1, 792, 792, 1, 792, 1, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 1, 1, 1, 792, 1, 792, 1, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 1, 1, 1, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 1, 793, 1, 788, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 788, 1, 794, 1, 1, 1, 795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 794, 607, 598, 607, 607, 607, 607, 607, 796, 1, 607, 607, 1, 607, 797, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 1, 572, 573, 607, 1, 607, 98, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 574, 1, 1, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 1, 794, 1, 1, 1, 795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 794, 575, 576, 575, 575, 575, 575, 575, 796, 1, 575, 575, 1, 575, 798, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 572, 578, 575, 1, 575, 98, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 574, 1, 1, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1, 799, 1, 800, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 800, 1, 801, 1, 1, 1, 802, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 801, 583, 584, 583, 583, 583, 583, 583, 803, 1, 583, 583, 1, 583, 804, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 587, 588, 583, 1, 583, 108, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 589, 1, 1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1, 805, 1, 1, 1, 806, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 805, 807, 754, 807, 807, 807, 807, 807, 808, 1, 807, 807, 1, 807, 1, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 1, 1, 1, 807, 1, 807, 1, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 1, 1, 1, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 1, 21, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 23, 24, 23, 23, 23, 23, 23, 809, 1, 23, 23, 1, 23, 26, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 27, 28, 23, 1, 23, 29, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 30, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 1, 810, 1, 1, 1, 811, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 810, 102, 103, 102, 102, 102, 102, 102, 812, 1, 102, 102, 1, 102, 813, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 1, 106, 107, 102, 1, 102, 1, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 109, 1, 1, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 1, 814, 814, 814, 814, 814, 814, 814, 814, 814, 1, 814, 814, 815, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 816, 817, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 818, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 1, 819, 819, 819, 819, 819, 819, 819, 819, 819, 1, 819, 819, 820, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 821, 822, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 823, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 1, 824, 1, 819, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 819, 1, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 1, 825, 1, 1, 1, 826, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 825, 1, 1, 1, 1, 1, 1, 1, 827, 1, 227, 1, 1, 1, 828, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 227, 1, 1, 1, 1, 1, 1, 1, 829, 1, 830, 1, 1, 1, 831, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 830, 1, 1, 1, 1, 1, 1, 1, 832, 1, 825, 1, 1, 1, 826, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 825, 1, 1, 1, 1, 1, 1, 1, 827, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 833, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 833, 1, 825, 1, 1, 1, 826, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 825, 1, 1, 1, 1, 1, 1, 1, 827, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 833, 1, 825, 1, 1, 1, 826, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 825, 1, 1, 1, 1, 1, 1, 1, 827, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 199, 1, 1, 0 ] class << self attr_accessor :_received_trans_targs private :_received_trans_targs, :_received_trans_targs= end self._received_trans_targs = [ 2, 0, 3, 5, 9, 376, 287, 26, 116, 278, 2, 3, 5, 9, 376, 287, 26, 116, 278, 4, 2, 6, 7, 5, 9, 364, 293, 26, 116, 263, 278, 6, 7, 5, 9, 364, 365, 26, 116, 263, 278, 8, 6, 10, 361, 362, 325, 360, 10, 11, 13, 360, 12, 14, 15, 5, 9, 17, 293, 26, 116, 263, 278, 14, 15, 5, 9, 17, 18, 26, 116, 263, 278, 16, 14, 14, 15, 5, 9, 17, 18, 26, 116, 263, 278, 19, 20, 347, 352, 346, 287, 22, 341, 21, 22, 23, 25, 18, 263, 24, 22, 23, 5, 9, 25, 18, 26, 116, 263, 278, 27, 28, 30, 31, 96, 107, 109, 111, 114, 27, 28, 30, 31, 29, 27, 28, 30, 31, 96, 107, 109, 111, 114, 32, 33, 35, 36, 81, 83, 85, 88, 90, 92, 94, 34, 32, 33, 35, 36, 81, 83, 85, 88, 90, 92, 94, 37, 80, 38, 39, 41, 42, 40, 38, 39, 41, 42, 43, 44, 45, 47, 48, 46, 44, 45, 47, 48, 49, 50, 52, 53, 51, 49, 50, 52, 53, 54, 56, 57, 55, 54, 56, 57, 58, 59, 60, 62, 63, 73, 382, 385, 386, 387, 61, 59, 60, 62, 63, 64, 66, 67, 65, 64, 66, 67, 68, 69, 70, 72, 71, 69, 70, 72, 74, 75, 76, 78, 383, 82, 84, 86, 87, 89, 91, 93, 95, 97, 98, 99, 101, 102, 100, 98, 99, 101, 102, 103, 104, 106, 103, 104, 106, 105, 103, 104, 106, 108, 110, 112, 113, 115, 117, 118, 120, 198, 215, 216, 238, 220, 117, 118, 215, 216, 220, 119, 121, 122, 120, 172, 124, 184, 2, 133, 121, 122, 124, 125, 133, 123, 121, 122, 124, 125, 2, 133, 126, 128, 166, 171, 127, 129, 130, 132, 133, 131, 129, 130, 132, 133, 134, 135, 137, 147, 161, 156, 162, 134, 135, 137, 147, 161, 156, 162, 136, 138, 139, 141, 160, 2, 142, 140, 138, 139, 141, 142, 2, 143, 145, 146, 144, 143, 145, 146, 148, 158, 157, 149, 151, 150, 152, 153, 155, 154, 152, 153, 155, 159, 134, 135, 137, 147, 161, 156, 162, 163, 165, 164, 167, 168, 129, 170, 167, 168, 129, 170, 169, 126, 128, 166, 171, 173, 182, 181, 174, 176, 175, 177, 178, 180, 177, 178, 180, 179, 177, 178, 180, 183, 185, 186, 189, 188, 185, 186, 188, 187, 185, 186, 188, 190, 195, 196, 194, 190, 191, 193, 194, 192, 195, 196, 197, 199, 208, 209, 211, 207, 199, 200, 202, 207, 201, 203, 204, 206, 133, 203, 204, 206, 133, 205, 203, 204, 206, 133, 208, 209, 211, 210, 211, 212, 214, 133, 213, 211, 212, 214, 133, 117, 118, 120, 198, 215, 216, 238, 220, 217, 219, 218, 217, 219, 221, 222, 224, 244, 258, 253, 259, 221, 222, 224, 244, 258, 253, 259, 223, 225, 226, 228, 229, 257, 233, 239, 227, 225, 226, 228, 229, 239, 233, 229, 230, 232, 233, 231, 229, 230, 232, 233, 234, 235, 120, 198, 237, 238, 234, 235, 237, 236, 234, 235, 237, 238, 240, 242, 243, 241, 240, 242, 243, 245, 255, 254, 246, 248, 247, 249, 250, 252, 251, 249, 250, 252, 256, 221, 222, 224, 244, 258, 253, 259, 260, 262, 261, 264, 265, 267, 331, 339, 340, 264, 265, 267, 331, 339, 340, 278, 266, 268, 269, 306, 307, 271, 330, 26, 116, 278, 5, 9, 272, 116, 270, 268, 268, 269, 5, 9, 271, 272, 26, 116, 278, 273, 274, 277, 298, 305, 276, 275, 277, 9, 272, 26, 279, 281, 282, 280, 283, 284, 5, 286, 287, 287, 285, 283, 283, 284, 286, 287, 288, 289, 290, 292, 289, 290, 292, 287, 291, 289, 289, 290, 5, 9, 292, 287, 26, 116, 263, 278, 294, 295, 5, 9, 297, 293, 26, 116, 278, 294, 295, 5, 9, 297, 287, 26, 116, 278, 296, 294, 294, 295, 5, 9, 297, 287, 26, 116, 278, 299, 303, 302, 300, 301, 304, 273, 274, 276, 305, 308, 322, 323, 321, 308, 309, 311, 321, 310, 312, 313, 26, 312, 314, 313, 315, 319, 318, 316, 317, 320, 322, 323, 325, 324, 326, 327, 5, 9, 329, 18, 26, 116, 263, 278, 5, 9, 18, 116, 328, 326, 326, 327, 5, 9, 329, 18, 26, 116, 263, 278, 306, 332, 337, 336, 333, 335, 334, 338, 264, 265, 267, 331, 339, 340, 278, 342, 343, 22, 345, 342, 343, 22, 345, 344, 19, 20, 22, 341, 346, 348, 349, 351, 348, 349, 351, 18, 350, 348, 348, 349, 351, 18, 353, 357, 358, 356, 353, 354, 347, 356, 355, 357, 358, 359, 361, 362, 363, 6, 7, 364, 365, 366, 367, 375, 374, 369, 368, 370, 371, 373, 365, 365, 372, 370, 370, 371, 373, 365, 366, 367, 369, 374, 364, 2, 3, 376, 287, 378, 379, 378, 388, 381, 378, 379, 378, 388, 381, 380, 383, 77, 384, 77, 384, 383, 77, 384, 79 ] class << self attr_accessor :_received_trans_actions private :_received_trans_actions, :_received_trans_actions= end self._received_trans_actions = [ 1, 0, 1, 1, 1, 2, 1, 3, 4, 5, 6, 6, 6, 6, 7, 6, 8, 9, 10, 0, 0, 11, 11, 11, 11, 12, 11, 13, 14, 15, 16, 17, 17, 18, 18, 19, 18, 20, 21, 22, 23, 0, 0, 24, 24, 24, 25, 24, 0, 0, 26, 0, 0, 27, 27, 27, 27, 28, 27, 29, 30, 31, 32, 33, 33, 34, 34, 35, 34, 36, 37, 38, 39, 0, 0, 40, 40, 41, 41, 42, 41, 43, 44, 45, 46, 0, 0, 0, 0, 47, 0, 0, 0, 0, 6, 6, 7, 6, 0, 0, 48, 48, 48, 48, 49, 48, 50, 51, 52, 53, 54, 54, 55, 54, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 52, 52, 56, 52, 52, 52, 52, 52, 52, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 56, 52, 52, 52, 52, 52, 52, 52, 52, 0, 0, 0, 0, 47, 0, 0, 52, 52, 56, 52, 0, 0, 0, 47, 57, 0, 52, 52, 56, 58, 0, 0, 47, 0, 0, 52, 52, 56, 52, 0, 47, 0, 0, 52, 56, 52, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 52, 52, 56, 52, 0, 47, 0, 0, 52, 56, 52, 0, 0, 0, 47, 0, 52, 52, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 52, 52, 56, 52, 54, 54, 59, 0, 0, 47, 0, 52, 52, 56, 0, 0, 0, 0, 0, 60, 60, 61, 61, 62, 63, 61, 63, 0, 0, 47, 0, 0, 0, 64, 64, 0, 0, 65, 0, 64, 15, 0, 0, 47, 0, 22, 0, 52, 52, 56, 52, 52, 66, 0, 0, 0, 47, 0, 0, 0, 47, 0, 0, 52, 52, 56, 52, 10, 10, 10, 10, 67, 10, 10, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 47, 0, 68, 0, 0, 52, 52, 56, 52, 69, 0, 0, 47, 0, 52, 52, 56, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 52, 52, 56, 0, 52, 52, 52, 52, 56, 52, 52, 0, 0, 0, 24, 24, 25, 24, 0, 0, 26, 0, 0, 52, 52, 52, 56, 0, 0, 0, 0, 0, 0, 64, 64, 65, 0, 0, 47, 0, 52, 52, 56, 0, 64, 64, 0, 65, 0, 0, 47, 0, 52, 52, 56, 24, 24, 24, 24, 0, 0, 26, 0, 0, 0, 0, 0, 24, 24, 24, 25, 24, 0, 0, 26, 0, 0, 64, 64, 65, 31, 0, 0, 47, 38, 0, 52, 52, 56, 45, 0, 0, 26, 0, 0, 0, 47, 70, 0, 52, 52, 56, 71, 52, 52, 72, 72, 56, 52, 72, 52, 0, 47, 0, 52, 56, 10, 10, 10, 10, 67, 10, 10, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 47, 68, 0, 68, 0, 0, 52, 52, 56, 69, 52, 69, 0, 0, 47, 0, 0, 52, 52, 56, 52, 73, 73, 73, 73, 74, 73, 0, 0, 47, 0, 52, 52, 56, 0, 0, 0, 47, 0, 52, 52, 56, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 52, 52, 56, 0, 52, 52, 52, 52, 56, 52, 52, 0, 0, 0, 10, 10, 10, 10, 67, 10, 0, 0, 0, 0, 47, 0, 0, 0, 75, 75, 75, 75, 76, 75, 77, 78, 79, 80, 80, 80, 81, 0, 0, 82, 82, 83, 83, 84, 83, 85, 86, 87, 0, 0, 0, 0, 47, 0, 0, 75, 75, 75, 88, 0, 0, 0, 0, 75, 75, 75, 76, 75, 80, 0, 0, 82, 82, 84, 83, 0, 11, 11, 89, 17, 17, 19, 18, 0, 0, 90, 90, 91, 91, 92, 91, 93, 94, 66, 95, 96, 96, 96, 96, 97, 96, 98, 99, 100, 101, 101, 102, 102, 103, 102, 104, 105, 106, 0, 0, 107, 107, 108, 108, 109, 108, 110, 111, 112, 0, 0, 0, 0, 0, 0, 52, 52, 52, 56, 24, 24, 24, 24, 0, 0, 26, 0, 0, 75, 75, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 114, 114, 114, 114, 115, 114, 116, 117, 70, 118, 119, 119, 119, 120, 0, 0, 121, 121, 122, 122, 123, 122, 124, 125, 71, 126, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 52, 56, 52, 52, 24, 24, 25, 24, 0, 0, 26, 0, 0, 52, 52, 52, 52, 56, 11, 11, 89, 17, 17, 19, 18, 0, 0, 90, 90, 92, 91, 24, 24, 24, 24, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 92, 91, 0, 0, 0, 47, 0, 0, 75, 75, 76, 75, 80, 0, 0, 82, 82, 84, 83, 52, 52, 52, 56, 89, 48, 48, 49, 48, 127, 127, 128, 129, 127, 0, 0, 47, 130, 0, 0, 131, 131, 132, 0, 47, 52, 52, 56, 0 ] class << self attr_accessor :_received_eof_actions private :_received_eof_actions, :_received_eof_actions= end self._received_eof_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 52, 131, 131, 131, 0 ] class << self attr_accessor :received_start end self.received_start = 1; class << self attr_accessor :received_first_final end self.received_first_final = 382; class << self attr_accessor :received_error end self.received_error = 0; class << self attr_accessor :received_en_comment_tail end self.received_en_comment_tail = 377; class << self attr_accessor :received_en_main end self.received_en_main = 1; # line 17 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a # line 3475 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" begin p ||= 0 pe ||= data.length cs = received_start top = 0 end # line 26 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" # line 3485 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _received_index_offsets[cs] _slen = _received_key_spans[cs] _trans = if ( _slen > 0 && _received_trans_keys[_keys] <= ( data_unpacked[p]) && ( data_unpacked[p]) <= _received_trans_keys[_keys + 1] ) then _received_indicies[ _inds + ( data_unpacked[p]) - _received_trans_keys[_keys] ] else _received_indicies[ _inds + _slen ] end cs = _received_trans_targs[_trans] if _received_trans_actions[_trans] != 0 case _received_trans_actions[_trans] when 9 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 52 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 127 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end when 54 then # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end when 68 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 10 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 22 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 64 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end when 61 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 70 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 63 then # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 26 then # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 24 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end when 8 then # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 131 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end when 47 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 130 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 81 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 105 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 120 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 51 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 69 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 53 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 66 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 72 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 71 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 50 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 56 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 128 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 129 then # line 8 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(5, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 57 then # line 11 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(8, p) end # line 48 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(45, p) end when 59 then # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 78 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 79 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 77 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 67 then # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 106 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 38 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 104 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 15 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 65 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 6 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 60 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 117 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 118 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 116 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 73 then # line 33 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(30, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end when 25 then # line 42 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(39, p) end # line 41 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(38, p) end when 4 then # line 44 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(41, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 5 then # line 44 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(41, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 3 then # line 44 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(41, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 132 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 55 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 12 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(9, p) end when 21 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 86 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 111 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end when 125 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 58 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 11 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(8, p) end # line 48 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(45, p) end when 87 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 85 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 112 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 45 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 110 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 48 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 126 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 124 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 75 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 23 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 20 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 101 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 99 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 100 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 31 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end when 98 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 80 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 102 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 119 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 62 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 34 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(31, p) end when 114 then # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 74 then # line 33 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(30, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end when 1 then # line 44 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(41, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 7 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 37 then # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 94 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 82 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 95 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 93 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 107 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 83 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 108 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 122 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 121 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 49 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 88 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 17 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 39 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 36 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 14 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 16 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 13 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 96 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 18 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 2 then # line 44 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(41, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 76 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 103 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 115 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 44 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end when 90 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 46 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 43 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 91 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 84 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 109 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 123 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 113 then # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 33 then # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 11 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 30 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 6 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(3, p) end when 32 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 29 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 43 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(40, p) end when 97 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 34 then # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 19 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 40 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 41 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 92 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 27 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 89 then # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 35 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 12 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 42 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end when 28 then # line 5 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/../../common.rl" begin begin stack[top] = cs top+= 1 cs = 377 _goto_level = _again next end end # line 22 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(19, p) end # line 21 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(18, p) end # line 24 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(21, p) end # line 15 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(12, p) end # line 23 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(20, p) end # line 16 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(13, p) end # line 5093 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _received_eof_actions[cs] when 52 then # line 7 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(4, p) end when 131 then # line 47 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl" begin actions.push(44, p) end # line 5119 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" end end end if _goto_level <= _out break end end end # line 27 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" if p == eof && cs >= # line 5133 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb" 382 # line 28 "/home/bpot/src/gh/bpot/mail/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl" return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl000066400000000000000000000012531267453234600257060ustar00rootroot00000000000000%%{ machine received; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := received; }%% module Mail module Parsers module Ragel module ReceivedMachine %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb000066400000000000000000000013051267453234600227060ustar00rootroot00000000000000%%{ machine <%= parser_name %>; include rb_actions "rb_actions.rl"; include common "../../common.rl"; getkey data_unpacked[p]; main := <%= parser_name %>; }%% module Mail module Parsers module Ragel module <%= parser_name_cc %> %%write data; def self.parse(data) p = 0 eof = data.length stack = [] actions = [] data_unpacked = data.bytes.to_a %%write init; %%write exec; if p == eof && cs >= %%{ write first_final; }%% return actions, nil else return [], "Only able to parse up to #{data[0..p]}" end end end end end end mail-2.6.4/lib/mail/parsers/received_parser.rb000066400000000000000000000027051267453234600213230ustar00rootroot00000000000000# frozen_string_literal: true module Mail::Parsers class ReceivedParser def parse(s) raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, 'nil is invalid') if s.nil? actions, error = Ragel.parse(:received, s) if error raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, error) end received = ReceivedStruct.new received_tokens_s = date_s = time_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Received Tokens: when :received_tokens_s then received_tokens_s = p when :received_tokens_e received.info = s[received_tokens_s..(p-1)] # Date when :date_s then date_s = p when :date_e received.date = s[date_s..(p-1)].strip # Time when :time_s then time_s = p when :time_e received.time = s[time_s..(p-1)] when :angle_addr_s, :comment_e, :comment_s, :domain_e, :domain_s, :local_dot_atom_e, :local_dot_atom_pre_comment_e, :local_dot_atom_pre_comment_s, :local_dot_atom_s, :qstr_e, :qstr_s, :local_quoted_string_s, :local_quoted_string_e # ignored actions else raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, "Failed to process unknown action: #{action}") end end received end end end mail-2.6.4/lib/mail/part.rb000066400000000000000000000061711267453234600154510ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class Part < Message # Creates a new empty Content-ID field and inserts it in the correct order # into the Header. The ContentIdField object will automatically generate # a unique content ID if you try and encode it or output it to_s without # specifying a content id. # # It will preserve the content ID you specify if you do. def add_content_id(content_id_val = '') header['content-id'] = content_id_val end # Returns true if the part has a content ID field, the field may or may # not have a value, but the field exists or not. def has_content_id? header.has_content_id? end def inline_content_id # TODO: Deprecated in 2.2.2 - Remove in 2.3 STDERR.puts("Part#inline_content_id is deprecated, please call Part#cid instead") cid end def cid add_content_id unless has_content_id? uri_escape(unbracket(content_id)) end def url "cid:#{cid}" end def inline? header[:content_disposition].disposition_type == 'inline' if header[:content_disposition].respond_to?(:disposition_type) end def add_required_fields super add_content_id if !has_content_id? && inline? end def add_required_message_fields # Override so we don't add Date, MIME-Version, or Message-ID. end def delivery_status_report_part? (main_type =~ /message/i && sub_type =~ /delivery-status/i) && body =~ /Status:/ end def delivery_status_data delivery_status_report_part? ? parse_delivery_status_report : {} end def bounced? if action.is_a?(Array) !!(action.first =~ /failed/i) else !!(action =~ /failed/i) end end # Either returns the action if the message has just a single report, or an # array of all the actions, one for each report def action get_return_values('action') end def final_recipient get_return_values('final-recipient') end def error_status get_return_values('status') end def diagnostic_code get_return_values('diagnostic-code') end def remote_mta get_return_values('remote-mta') end def retryable? !(error_status =~ /^5/) end private def get_return_values(key) if delivery_status_data[key].is_a?(Array) delivery_status_data[key].map { |a| a.value } elsif !delivery_status_data[key].nil? delivery_status_data[key].value else nil end end # A part may not have a header.... so, just init a body if no header def parse_message header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}/m, 2) if header_part =~ HEADER_LINE self.header = header_part self.body = body_part else self.header = "Content-Type: text/plain\r\n" self.body = raw_source end end def parse_delivery_status_report @delivery_status_data ||= Header.new(body.to_s.gsub("\r\n\r\n", "\r\n")) end end end mail-2.6.4/lib/mail/parts_list.rb000066400000000000000000000035501267453234600166650ustar00rootroot00000000000000# frozen_string_literal: true require 'delegate' module Mail class PartsList < DelegateClass(Array) attr_reader :parts def initialize(*args) @parts = Array.new(*args) super @parts end # The #encode_with and #to_yaml methods are just implemented # for the sake of backward compatibility ; the delegator does # not correctly delegate these calls to the delegated object def encode_with(coder) # :nodoc: coder.represent_object(nil, @parts) end def to_yaml(options = {}) # :nodoc: @parts.to_yaml(options) end def attachments Mail::AttachmentsList.new(@parts) end def collect if block_given? ary = PartsList.new each { |o| ary << yield(o) } ary else to_a end end alias_method :map, :collect def map! raise NoMethodError, "#map! is not defined, please call #collect and create a new PartsList" end def collect! raise NoMethodError, "#collect! is not defined, please call #collect and create a new PartsList" end def sort self.class.new(@parts.sort) end def sort!(order) # stable sort should be used to maintain the relative order as the parts are added i = 0; sorted = @parts.sort_by do |a| # OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a # single email message... please show me a use case and I'll put more work into this method, # in the meantime, it works :) [get_order_value(a, order), i += 1] end @parts.clear sorted.each { |p| @parts << p } end private def get_order_value(part, order) if part.respond_to?(:content_type) && !part[:content_type].nil? order.index(part[:content_type].string.downcase) || 10000 else 10000 end end end end mail-2.6.4/lib/mail/utilities.rb000066400000000000000000000166021267453234600165160ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail module Utilities LF = "\n" CRLF = "\r\n" include Constants # Returns true if the string supplied is free from characters not allowed as an ATOM def atom_safe?( str ) not ATOM_UNSAFE === str end # If the string supplied has ATOM unsafe characters in it, will return the string quoted # in double quotes, otherwise returns the string unmodified def quote_atom( str ) atom_safe?( str ) ? str : dquote(str) end # If the string supplied has PHRASE unsafe characters in it, will return the string quoted # in double quotes, otherwise returns the string unmodified def quote_phrase( str ) if RUBY_VERSION >= '1.9' original_encoding = str.encoding ascii_str = str.dup.force_encoding('ASCII-8BIT') if (PHRASE_UNSAFE === ascii_str) dquote(ascii_str).force_encoding(original_encoding) else str end else (PHRASE_UNSAFE === str) ? dquote(str) : str end end # Returns true if the string supplied is free from characters not allowed as a TOKEN def token_safe?( str ) not TOKEN_UNSAFE === str end # If the string supplied has TOKEN unsafe characters in it, will return the string quoted # in double quotes, otherwise returns the string unmodified def quote_token( str ) token_safe?( str ) ? str : dquote(str) end # Wraps supplied string in double quotes and applies \-escaping as necessary, # unless it is already wrapped. # # Example: # # string = 'This is a string' # dquote(string) #=> '"This is a string"' # # string = 'This is "a string"' # dquote(string #=> '"This is \"a string\"' def dquote( str ) '"' + unquote(str).gsub(/[\\"]/n) {|s| '\\' + s } + '"' end # Unwraps supplied string from inside double quotes and # removes any \-escaping. # # Example: # # string = '"This is a string"' # unquote(string) #=> 'This is a string' # # string = '"This is \"a string\""' # unqoute(string) #=> 'This is "a string"' def unquote( str ) if str =~ /^"(.*?)"$/ $1.gsub(/\\(.)/, '\1') else str end end # Wraps a string in parenthesis and escapes any that are in the string itself. # # Example: # # paren( 'This is a string' ) #=> '(This is a string)' def paren( str ) RubyVer.paren( str ) end # Unwraps a string from being wrapped in parenthesis # # Example: # # str = '(This is a string)' # unparen( str ) #=> 'This is a string' def unparen( str ) match = str.match(/^\((.*?)\)$/) match ? match[1] : str end # Wraps a string in angle brackets and escapes any that are in the string itself # # Example: # # bracket( 'This is a string' ) #=> '' def bracket( str ) RubyVer.bracket( str ) end # Unwraps a string from being wrapped in parenthesis # # Example: # # str = '' # unbracket( str ) #=> 'This is a string' def unbracket( str ) match = str.match(/^\<(.*?)\>$/) match ? match[1] : str end # Escape parenthesies in a string # # Example: # # str = 'This is (a) string' # escape_paren( str ) #=> 'This is \(a\) string' def escape_paren( str ) RubyVer.escape_paren( str ) end def uri_escape( str ) uri_parser.escape(str) end def uri_unescape( str ) uri_parser.unescape(str) end def uri_parser @uri_parser ||= URI.const_defined?(:Parser) ? URI::Parser.new : URI end # Matches two objects with their to_s values case insensitively # # Example: # # obj2 = "This_is_An_object" # obj1 = :this_IS_an_object # match_to_s( obj1, obj2 ) #=> true def match_to_s( obj1, obj2 ) obj1.to_s.casecmp(obj2.to_s) == 0 end # Capitalizes a string that is joined by hyphens correctly. # # Example: # # string = 'resent-from-field' # capitalize_field( string ) #=> 'Resent-From-Field' def capitalize_field( str ) str.to_s.split("-").map { |v| v.capitalize }.join("-") end # Takes an underscored word and turns it into a class name # # Example: # # constantize("hello") #=> "Hello" # constantize("hello-there") #=> "HelloThere" # constantize("hello-there-mate") #=> "HelloThereMate" def constantize( str ) str.to_s.split(/[-_]/).map { |v| v.capitalize }.to_s end # Swaps out all underscores (_) for hyphens (-) good for stringing from symbols # a field name. # # Example: # # string = :resent_from_field # dasherize ( string ) #=> 'resent_from_field' def dasherize( str ) str.to_s.tr(UNDERSCORE, HYPHEN) end # Swaps out all hyphens (-) for underscores (_) good for stringing to symbols # a field name. # # Example: # # string = :resent_from_field # underscoreize ( string ) #=> 'resent_from_field' def underscoreize( str ) str.to_s.downcase.tr(HYPHEN, UNDERSCORE) end if RUBY_VERSION <= '1.8.6' def map_lines( str, &block ) results = [] str.each_line do |line| results << yield(line) end results end def map_with_index( enum, &block ) results = [] enum.each_with_index do |token, i| results[i] = yield(token, i) end results end else def map_lines( str, &block ) str.each_line.map(&block) end def map_with_index( enum, &block ) enum.each_with_index.map(&block) end end # Test String#encode works correctly with line endings. # Some versions of Ruby (e.g. MRI <1.9, JRuby, Rubinius) line ending # normalization does not work correctly or did not have #encode. if ("\r".encode(:universal_newline => true) rescue nil) == LF && (LF.encode(:crlf_newline => true) rescue nil) == CRLF # Using String#encode is better performing than Regexp def self.to_lf(input) input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true) : '' end def self.to_crlf(input) input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true).encode!(input.encoding, :crlf_newline => true) : '' end else def self.to_lf(input) input.kind_of?(String) ? input.to_str.gsub(/\r\n|\r/, LF) : '' end if RUBY_VERSION >= '1.9' # This 1.9 only regex can save a reasonable amount of time (~20%) # by not matching "\r\n" so the string is returned unchanged in # the common case. CRLF_REGEX = Regexp.new("(?o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;if; iF; 0; 0iGo; ;i;i;ig; iG; 0; 0iHo; ;i;i;ih; iH; 0; 0iIo; ;i;i;ii; iI; 0; 0iJo; ;i;i;ij; iJ; 0; 0iKo; ;i;i;ik; iK; 0; 0iLo; ;i;i;il; iL; 0; 0iMo; ;i;i;im; iM; 0; 0iNo; ;i;i;in; iN; 0; 0iOo; ;i;i;io; iO; 0; 0iPo; ;i;i;ip; iP; 0; 0iQo; ;i;i;iq; iQ; 0; 0iRo; ;i;i;ir; iR; 0; 0iSo; ;i;i;is; iS; 0; 0iTo; ;i;i;it; iT; 0; 0iUo; ;i;i;iu; iU; 0; 0iVo; ;i;i;iv; iV; 0; 0iWo; ;i;i;iw; iW; 0; 0iXo; ;i;i;ix; iX; 0; 0iYo; ;i;i;iy; iY; 0; 0iZo; ;i;i;iz; iZ; 0; 0i[o; ;i;i;i{; i[; 0; 0i\o; ;i;i;i|; i\; 0; 0i]o; ;i;i;i}; i]; 0; 0i^o; ;i;i;i~; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;iF;i; if; 0; 0igo; ;i;iG;i; ig; 0; 0iho; ;i;iH;i; ih; 0; 0iio; ;i;iI;i; ii; 0; 0ijo; ;i;iJ;i; ij; 0; 0iko; ;i;iK;i; ik; 0; 0ilo; ;i;iL;i; il; 0; 0imo; ;i;iM;i; im; 0; 0ino; ;i;iN;i; in; 0; 0ioo; ;i;iO;i; io; 0; 0ipo; ;i;iP;i; ip; 0; 0iqo; ;i;iQ;i; iq; 0; 0iro; ;i;iR;i; ir; 0; 0iso; ;i;iS;i; is; 0; 0ito; ;i;iT;i; it; 0; 0iuo; ;i;iU;i; iu; 0; 0ivo; ;i;iV;i; iv; 0; 0iwo; ;i;iW;i; iw; 0; 0ixo; ;i;iX;i; ix; 0; 0iyo; ;i;iY;i; iy; 0; 0izo; ;i;iZ;i; iz; 0; 0i{o; ;i;i[;i; i{; 0; 0i|o; ;i;i\;i; i|; 0; 0i}o; ;i;i];i; i}; 0; 0i~o; ;i;i^;i; i~; 0; 0io; ;i;i_;i; i; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" noBreak:ET; [i%io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [ifio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [i7io; ;i;i;i; i; I" super; T; [i8io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%i'io; ;i;i;i; i; I" super; T; [i6io; ;i;i;i; i; I" super; T; [itio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" fraction; T; [i6iD i9io; ;i;i;i; i; I" fraction; T; [i6iD i7io; ;i;i;i; i; I" fraction; T; [i8iD i9io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iHi'io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; [iNiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iSiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ihi'io; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; [iniio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [isiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; 0io; ;i;ix;i; i; 0; [i~iio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFi(io; ;i;i;i; i; 0; [ifi(io; ;i;i;i; i; 0; [iHiio; ;i;i;i; i; 0; [ihiio; ;i;i;i ; i; 0; [iHii o; ;i;i;i; i ; 0; [ihii o; ;i;i;i ; i ; 0; [iHii o; ;i;i ;i; i ; 0; [ihii o; ;i;i;i ; i ; 0; [iHi i o; ;i;i ;i; i ; 0; [ihi io; ;i;i;i; i; 0; [iIi io; ;i;i;i; i; 0; [iii io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJi(io; ;i;i;i; i; 0; [iji(io; ;i;i;i; i; 0; [iJi io; ;i;i;i; i; 0; [iji io; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [iliio; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [ilii o; ;i;i;i!; i ; 0; [iLii!o; ;i;i ;i; i!; 0; [ilii"o; ;i;i;i#; i"; 0; [iLi'i#o; ;i;i";i; i#; 0; [ili'i$o; ;i;i;i%; i$; 0; [iMii%o; ;i;i$;i; i%; 0; [imii&o; ;i;i;i'; i&; 0; 0i'o; ;i;i&;i; i'; 0; 0i(o; ;i;i;i); i(; 0; [iNii)o; ;i;i(;i; i); 0; [inii*o; ;i;i;i+; i*; 0; [iNii+o; ;i;i*;i; i+; 0; [inii,o; ;i;i;i-; i,; 0; [iNii-o; ;i;i,;i; i-; 0; [inii.o; ;i;i;i/; i.; 0; [iNi(i/o; ;i;i.;i; i/; 0; [ini(i0o; ;i;i;in; i0; 0; [iNii1o; ;i;iN;i; i1; 0; 0i2o; ;i;i;i3; i2; I" compat; T; [iNiOi3o; ;i;i2;i; i3; I" compat; T; [inioi4o; ;i;i;i5; i4; 0; [iOii5o; ;i;i4;i; i5; 0; [ioii6o; ;i;i;i7; i6; 0; [iPi'i7o; ;i;i6;i; i7; 0; [ipi'i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i:; i9; 0; [iQii:o; ;i;i9;i; i:; 0; [iqii;o; ;i;i;i<; i;; 0; [iQi'i<o; ;i;i;;i; i<; 0; [iqi'i=o; ;i;i;i>; i=; 0; [iQi i>o; ;i;i=;i; i>; 0; [iqi i?o; ;i;i;i@; i?; I" compat; T; [iQii@o; ;i;i?;i; i@; I" compat; T; [iqiiAo; ;i;i;iB; iA; 0; 0iBo; ;i;iA;i; iB; 0; 0iCo; ;i;i;iD; iC; 0; [iSiiDo; ;i;iC;i; iD; 0; [isiiEo; ;i;i;iF; iE; 0; [iSi'iFo; ;i;iE;i; iF; 0; [isi'iGo; ;i;i;iH; iG; 0; [iSi iHo; ;i;iG;i; iH; 0; [isi iIo; ;i;i;i; iI; I" compat; T; [iisiJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; [iTiiMo; ;i;iL;i; iM; 0; [itiiNo; ;i;i;iO; iN; 0; [iTiiOo; ;i;iN;i; iO; 0; [itiiPo; ;i;i;iQ; iP; 0; [iTi iQo; ;i;iP;i; iQ; 0; [iti iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; [iWiiUo; ;i;iT;i; iU; 0; [iwiiVo; ;i;i;iW; iV; 0; [iWi'iWo; ;i;iV;i; iW; 0; [iwi'iXo; ;i;i;iY; iX; 0; [iWi iYo; ;i;iX;i; iY; 0; [iwi iZo; ;i;i;i[; iZ; 0; [iXii[o; ;i;iZ;i; i[; 0; [ixii\o; ;i;i;i]; i\; 0; [iXii]o; ;i;i\;i; i]; 0; [ixii^o; ;i;i;i_; i^; 0; [iXi'i_o; ;i;i^;i; i_; 0; [ixi'i`o; ;i;i;ia; i`; 0; [iXi iao; ;i;i`;i; ia; 0; [ixi ibo; ;i;i;ic; ib; 0; [iYi'ico; ;i;ib;i; ic; 0; [iyi'ido; ;i;i;ie; id; 0; [iYi ieo; ;i;id;i; ie; 0; [iyi ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; [iZiiio; ;i;ih;i; ii; 0; [iziijo; ;i;i;ik; ij; 0; [iZiiko; ;i;ij;i; ik; 0; [iziilo; ;i;i;im; il; 0; [iZiimo; ;i;il;i; im; 0; [iziino; ;i;i;io; in; 0; [iZi ioo; ;i;in;i; io; 0; [izi ipo; ;i;i;iq; ip; 0; [iZi iqo; ;i;ip;i; iq; 0; [izi iro; ;i;i;is; ir; 0; [iZi(iso; ;i;ir;i; is; 0; [izi(ito; ;i;i;iu; it; 0; [i\iiuo; ;i;it;i; iu; 0; [i|iivo; ;i;i;iw; iv; 0; [i^iiwo; ;i;iv;i; iw; 0; [i~iixo; ;i;i;i; ix; 0; [i^iiyo; ;i;i;iz; iy; 0; [i_iizo; ;i;iy;i; iz; 0; [iii{o; ;i;i;i|; i{; 0; [i_ii|o; ;i;i{;i; i|; 0; [iii}o; ;i;i;i~; i}; 0; [i_i i~o; ;i;i};i; i~; 0; [ii io; ;i;iX;i; i; I" compat; T; [ixio; ;i;iC;i; i; 0; 0io; ;i;i;iS; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iT; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iV; i; 0; 0io; ;i;i;iW; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;iY; i; 0; 0io; ;i;i;i[; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i`; i; 0; 0io; ;i;i;ic; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;ii; i; 0; 0io; ;i;i;ih; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i=;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;io; i; 0; 0io; ;i;i;ir; i; 0; 0io; ;i;i ;i; i; 0; 0io; ;i;i;iu; i; 0; 0io; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iIi}io; ;i;i;i; i; I" compat; T; [iIi~io; ;i;i;i; i; I" compat; T; [iii~io; ;i;i;i; i; I" compat; T; [iQiOio; ;i;i;i; i; I" compat; T; [iQioio; ;i;i;i; i; I" compat; T; [iqioio; ;i;i;i; i; I" compat; T; [iSiOio; ;i;i;i; i; I" compat; T; [iSioio; ;i;i;i; i; I" compat; T; [isioio; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; [iNi io; ;i;i;i; i; 0; [ini io; ;i;i;i; i; 0; [iTi io; ;i;i;i; i; 0; [iti io; ;i;i;i; i; 0; [iZi io; ;i;i;i; i; 0; [izi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i&iio; ;i;i;i; i; 0; [i'iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iLi io; ;i;i;i; i; 0; [ili io; ;i;i;i; i; 0; [iPi io; ;i;i;i; i; 0; [ipi io; ;i;i;i; i; 0; [iTi(io; ;i;i;i; i; 0; [iti(io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ioi io; ;i;i;i; i; I" compat; T; [iIi_io; ;i;i;i; i; I" compat; T; [iIiio; ;i;i;i; i; I" compat; T; [iiiio; ;i;i;i; i; 0; [iLiio; ;i;i;i; i; 0; [iliio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iSiio; ;i;i;i; i; 0; [isiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iFiio; ;i;i;i; i; 0; [ifiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i ; i; 0; [iNii o; ;i;i;i; i ; 0; [inii o; ;i;i;i ; i ; 0; [iNii o; ;i;i ;i; i ; 0; [inii o; ;i;i;i ; i ; 0; [iTii o; ;i;i ;i; i ; 0; [itiio; ;i;i;i; i; 0; [iTiio; ;i;i;i; i; 0; [itiio; ;i;i;i; i; 0; [iWiio; ;i;i;i; i; 0; [iwiio; ;i;i;i; i; 0; [iWiio; ;i;i;i; i; 0; [iwiio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iZiio; ;i;i;i; i; 0; [iziio; ;i;i;i; i; 0; [iXi&io; ;i;i;i; i; 0; [ixi&io; ;i;i;i; i; 0; [iYi&io; ;i;i;i; i; 0; [iyi&io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iMi io; ;i;i;i; i; 0; [imi i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i&o; ;i;i;i'; i&; 0; [iFii'o; ;i;i&;i; i'; 0; [ifii(o; ;i;i;i); i(; 0; [iJi'i)o; ;i;i(;i; i); 0; [iji'i*o; ;i;i;i+; i*; 0; [iii+o; ;i;i*;i; i+; 0; [iii,o; ;i;i;i-; i,; 0; [iii-o; ;i;i,;i; i-; 0; [iii.o; ;i;i;i/; i.; 0; [iTii/o; ;i;i.;i; i/; 0; [itii0o; ;i;i;i1; i0; 0; [i.ii1o; ;i;i0;i; i1; 0; [i/ii2o; ;i;i;i3; i2; 0; [i^ii3o; ;i;i2;i; i3; 0; [i~ii4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;ie,; i:; 0; 0i;o; ;i;i;i<; i;; 0; 0i<o; ;i;i;;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;if,; i>; 0; 0i?o; ;i;i~,;i; i?; 0; 0i@o; ;i;i,;i; i@; 0; 0iAo; ;i;i;iB; iA; 0; 0iBo; ;i;iA;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;io,;i; iP; 0; 0iQo; ;i;im,;i; iQ; 0; 0iRo; ;i;ip,;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;ib,;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;in,;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;id,;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;iD;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;iE;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [imio; ;i;i;i; i; I" super; T; [ifio; ;i;i;i; i; I" super; T; [ioio; ;i;i;i; i; I" super; T; [iwio; ;i;i;i; i; I" super; T; [iyio; ;i;i;i; i; I" super; T; [i{io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [i|io; ;i;i;i; i; I" super; T; [i~io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%i io; ;i;i;i; i; I" compat; T; [i%i(io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%i io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [icio; ;i;i;i; i; I" super; T; [iqio; ;i;i;i; i; I" super; T; [ixio; ;i;i;i; i; I" super; T; [i}io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; [iiAo; ;i;i;i; iA; 0; [iiBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iiDo; ;i;i;i; iD; 0; [iiiEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;iq; ip; 0; 0iqo; ;i;ip;i; iq; 0; 0iro; ;i;i;is; ir; 0; 0iso; ;i;ir;i; is; 0; 0ito; ;i;i;i; it; 0; [iiuo; ;i;i;i; iu; 0; 0ivo; ;i;i;iw; iv; 0; 0iwo; ;i;iv;i; iw; 0; 0izo; ;i;i;i; iz; I" compat; T; [i%iEi{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; [i@io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i{; i; 0; 0io; ;i;i;i|; i; 0; 0io; ;i;i;i}; i; 0; 0io; ;i;i;iP; i; 0; [iiio; ;i;i;iQ; i; 0; [iiio; ;i;i;iR; i; 0; 0io; ;i;i;iS; i; 0; [iiio; ;i;i;iT; i; 0; 0io; ;i;i;iU; i; 0; 0io; ;i;i;iV; i; 0; 0io; ;i;i;iW; i; 0; [iiio; ;i;i;iX; i; 0; 0i o; ;i;i;iY; i ; 0; 0i o; ;i;i;iZ; i ; 0; 0i o; ;i;i;i[; i ; 0; 0i o; ;i;i;i\; i ; 0; [iii o; ;i;i;i]; i ; 0; [iiio; ;i;i;i^; i; 0; [i#iio; ;i;i;i_; i; 0; 0io; ;i;i;i0; i; 0; 0io; ;i;i;i1; i; 0; 0io; ;i;i;i2; i; 0; 0io; ;i;i;i3; i; 0; 0io; ;i;i;i4; i; 0; 0io; ;i;i;i5; i; 0; 0io; ;i;i;i6; i; 0; 0io; ;i;i;i7; i; 0; 0io; ;i;i;i8; i; 0; 0io; ;i;i;i9; i; 0; [iiio; ;i;i;i:; i; 0; 0io; ;i;i;i;; i; 0; 0io; ;i;i;i<; i; 0; 0io; ;i;i;i=; i; 0; 0io; ;i;i;i>; i; 0; 0io; ;i;i;i?; i; 0; 0i o; ;i;i;i@; i ; 0; 0i!o; ;i;i;iA; i!; 0; 0i"o; ;i;i;iB; i"; 0; 0i#o; ;i;i;iC; i#; 0; 0i$o; ;i;i;iD; i$; 0; 0i%o; ;i;i;iE; i%; 0; 0i&o; ;i;i;iF; i&; 0; 0i'o; ;i;i;iG; i'; 0; 0i(o; ;i;i;iH; i(; 0; 0i)o; ;i;i;iI; i); 0; 0i*o; ;i;i;iJ; i*; 0; 0i+o; ;i;i;iK; i+; 0; 0i,o; ;i;i;iL; i,; 0; 0i-o; ;i;i;iM; i-; 0; 0i.o; ;i;i;iN; i.; 0; 0i/o; ;i;i;iO; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; [i8ii:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i ;i; i@; 0; 0iAo; ;i;i!;i; iA; 0; 0iBo; ;i;i";i; iB; 0; 0iCo; ;i;i#;i; iC; 0; 0iDo; ;i;i$;i; iD; 0; 0iEo; ;i;i%;i; iE; 0; 0iFo; ;i;i&;i; iF; 0; 0iGo; ;i;i';i; iG; 0; 0iHo; ;i;i(;i; iH; 0; 0iIo; ;i;i);i; iI; 0; 0iJo; ;i;i*;i; iJ; 0; 0iKo; ;i;i+;i; iK; 0; 0iLo; ;i;i,;i; iL; 0; 0iMo; ;i;i-;i; iM; 0; 0iNo; ;i;i.;i; iN; 0; 0iOo; ;i;i/;i; iO; 0; 0iPo; ;i;i;i; iP; 0; [i5iiQo; ;i;i;i; iQ; 0; [i5iiRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; [i3iiTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; [iViiXo; ;i;i;i; iX; 0; 0iYo; ;i;i ;i; iY; 0; 0iZo; ;i;i ;i; iZ; 0; 0i[o; ;i;i ;i; i[; 0; 0i\o; ;i;i ;i; i\; 0; [i:ii]o; ;i;i ;i; i]; 0; [i8ii^o; ;i;i;i; i^; 0; [iCii_o; ;i;i;i; i_; 0; 0i`o; ;i;i;ia; i`; 0; 0iao; ;i;i`;i; ia; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;io; in; 0; 0ioo; ;i;in;i; io; 0; 0ipo; ;i;i;iq; ip; 0; 0iqo; ;i;ip;i; iq; 0; 0iro; ;i;i;is; ir; 0; 0iso; ;i;ir;i; is; 0; 0ito; ;i;i;iu; it; 0; 0iuo; ;i;it;i; iu; 0; 0ivo; ;i;i;iw; iv; 0; [itiiwo; ;i;iv;i; iw; 0; [iuiixo; ;i;i;iy; ix; 0; 0iyo; ;i;ix;i; iy; 0; 0izo; ;i;i;i{; iz; 0; 0i{o; ;i;iz;i; i{; 0; 0i|o; ;i;i;i}; i|; 0; 0i}o; ;i;i|;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i~;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i6iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i0iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i0iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i5iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i6iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i7iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i8iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i8iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i>iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i-iio; ;i;i;i; i; 0; [iMiio; ;i;i;i; i; 0; [i#iio; ;i;i;i; i; 0; [iCiio; ;i;i;i; i; 0; [i#iio; ;i;i;i; i; 0; [iCiio; ;i;i;i; i; 0; [i#i io; ;i;i;i; i; 0; [iCi io; ;i;i;i; i; 0; [i'iio; ;i;i;i; i; 0; [iGiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [i+iio; ;i;i;i; i; 0; [iKiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i ; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i ; i ; 0; 0i o; ;i;i ;i; i ; 0; 0i o; ;i;i;i ; i ; 0; 0i o; ;i;i ;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i!; i ; 0; 0i!o; ;i;i ;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i&o; ;i;i;i'; i&; 0; 0i'o; ;i;i&;i; i'; 0; 0i(o; ;i;i;i); i(; 0; 0i)o; ;i;i(;i; i); 0; 0i*o; ;i;i;i+; i*; 0; 0i+o; ;i;i*;i; i+; 0; 0i,o; ;i;i;i-; i,; 0; 0i-o; ;i;i,;i; i-; 0; 0i.o; ;i;i;i/; i.; 0; 0i/o; ;i;i.;i; i/; 0; 0i1o; ;i;i;ia; i1; 0; 0i2o; ;i;i;ib; i2; 0; 0i3o; ;i;i;ic; i3; 0; 0i4o; ;i;i;id; i4; 0; 0i5o; ;i;i;ie; i5; 0; 0i6o; ;i;i;if; i6; 0; 0i7o; ;i;i;ig; i7; 0; 0i8o; ;i;i;ih; i8; 0; 0i9o; ;i;i;ii; i9; 0; 0i:o; ;i;i;ij; i:; 0; 0i;o; ;i;i;ik; i;; 0; 0i<o; ;i;i;il; i<; 0; 0i=o; ;i;i;im; i=; 0; 0i>o; ;i;i;in; i>; 0; 0i?o; ;i;i;io; i?; 0; 0i@o; ;i;i;ip; i@; 0; 0iAo; ;i;i;iq; iA; 0; 0iBo; ;i;i;ir; iB; 0; 0iCo; ;i;i;is; iC; 0; 0iDo; ;i;i;it; iD; 0; 0iEo; ;i;i;iu; iE; 0; 0iFo; ;i;i;iv; iF; 0; 0iGo; ;i;i;iw; iG; 0; 0iHo; ;i;i;ix; iH; 0; 0iIo; ;i;i;iy; iI; 0; 0iJo; ;i;i;iz; iJ; 0; 0iKo; ;i;i;i{; iK; 0; 0iLo; ;i;i;i|; iL; 0; 0iMo; ;i;i;i}; iM; 0; 0iNo; ;i;i;i~; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0iao; ;i;i1;i; ia; 0; 0ibo; ;i;i2;i; ib; 0; 0ico; ;i;i3;i; ic; 0; 0ido; ;i;i4;i; id; 0; 0ieo; ;i;i5;i; ie; 0; 0ifo; ;i;i6;i; if; 0; 0igo; ;i;i7;i; ig; 0; 0iho; ;i;i8;i; ih; 0; 0iio; ;i;i9;i; ii; 0; 0ijo; ;i;i:;i; ij; 0; 0iko; ;i;i;;i; ik; 0; 0ilo; ;i;i<;i; il; 0; 0imo; ;i;i=;i; im; 0; 0ino; ;i;i>;i; in; 0; 0ioo; ;i;i?;i; io; 0; 0ipo; ;i;i@;i; ip; 0; 0iqo; ;i;iA;i; iq; 0; 0iro; ;i;iB;i; ir; 0; 0iso; ;i;iC;i; is; 0; 0ito; ;i;iD;i; it; 0; 0iuo; ;i;iE;i; iu; 0; 0ivo; ;i;iF;i; iv; 0; 0iwo; ;i;iG;i; iw; 0; 0ixo; ;i;iH;i; ix; 0; 0iyo; ;i;iI;i; iy; 0; 0izo; ;i;iJ;i; iz; 0; 0i{o; ;i;iK;i; i{; 0; 0i|o; ;i;iL;i; i|; 0; 0i}o; ;i;iM;i; i}; 0; 0i~o; ;i;iN;i; i~; 0; 0io; ;i;iO;i; i; 0; 0io; ;i;iP;i; i; 0; 0io; ;i;iQ;i; i; 0; 0io; ;i;iR;i; i; 0; 0io; ;i;iS;i; i; 0; 0io; ;i;iT;i; i; 0; 0io; ;i;iU;i; i; 0; 0io; ;i;iV;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [ieiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i#;i;i; i; 0; 0io; ;i$;i;i; i; 0; 0io; ;i%;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; [i'iSi#o; ;i;i;i; i#; 0; [i'iTi$o; ;i;i;i; i$; 0; [iHiTi%o; ;i;i;i; i%; 0; [i'iUi&o; ;i;i;i; i&; 0; [iJiTi'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i ;i;i; iK; 0; 0iLo; ;i!;i;i; iL; 0; 0iMo; ;i";i;i; iM; 0; 0iNo; ;i#;i;i; iN; 0; 0iOo; ;i$;i;i; iO; 0; 0iPo; ;i%;i;i; iP; 0; 0iQo; ;i&;i;i; iQ; 0; 0iRo; ;i';i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i(;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; I" compat; T; [i'itivo; ;i;i;i; iv; I" compat; T; [iHitiwo; ;i;i;i; iw; I" compat; T; [iitixo; ;i;i;i; ix; I" compat; T; [iJitiyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiTio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i);i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i^o; ;i;i;i; i^; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i!;i;i; i; 0; 0io; ;i";i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; [i( i< i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; [i0 i< i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; [i3 i< i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0iX o; ;i;i;i; iX ; 0; [i i< iY o; ;i;i;i; iY ; 0; [i i< iZ o; ;i;i;i; iZ ; 0; [i i< i[ o; ;i;i;i; i[ ; 0; [i i< i\ o; ;i;i;i; i\ ; 0; [i! i< i] o; ;i;i;i; i] ; 0; [i" i< i^ o; ;i;i;i; i^ ; 0; [i+ i< i_ o; ;i;i;i; i_ ; 0; [i/ i< i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; [i2 i< i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; [i8 i< i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iY o; ;i;i;i; iY ; 0; [i i< iZ o; ;i;i;i; iZ ; 0; [i i< i[ o; ;i;i;i; i[ ; 0; [i i< i\ o; ;i;i;i; i\ ; 0; 0i^ o; ;i;i;i; i^ ; 0; [i+ i< if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i< o; ;i ;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; [iG iV iK o; ;i;i;i; iK ; 0; [iG i> iL o; ;i;i;i; iL ; 0; [iG iW iM o; ;i;i;i; iM ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0i\ o; ;i;i;i; i\ ; 0; [i! i< i] o; ;i;i;i; i] ; 0; [i" i< i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; [iF iV iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iU o; ;iY;i;i; iU ; 0; 0iV o; ;i`;i;i; iV ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i ;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iJ o; ;i;i;i; iJ ; 0; [iF i> iK o; ;i;i;i; iK ; 0; [iG i> iL o; ;i;i;i; iL ; 0; [iF iW iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iW o; ;i;i;i; iW ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; [i i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; I" compat; T; [iMi2i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;il;i;i; i8; 0; 0i9o; ;il;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;ip;i;i; iH; 0; 0iIo; ;ip;i;i; iI; 0; 0iJo; ;ip;i;i; iJ; 0; 0iKo; ;ip;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i{;i;i; i; 0; 0io; ;i{;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; I" compat; T; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" noBreak; T; [i i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iBiiDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; [iLiiNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; [iQiiSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; [iViiXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; [i[ii]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; [i@iijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; [iqirito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; [iqitivo; ;i;i;i; iv; 0; [iiiwo; ;i;i;i; iw; I" compat; T; [iiixo; ;i;i;i; ix; 0; [iiiyo; ;i;i;i; iy; I" compat; T; [iiizo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iqiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; [i%i.i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i ;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i -; i; 0; 0io; ;i;i;i!-; i; 0; 0io; ;i;i;i"-; i; 0; 0io; ;i;i;i#-; i; 0; 0io; ;i;i;i$-; i; 0; 0io; ;i;i;i%-; i; 0; 0io; ;i;i;i'-; i; 0; 0io; ;i;i;i--; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iXo; ;i;i;i; iX; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i@o; ;i;i;i; i@; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i5i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; [i i5i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; [i i5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [ii5io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i ;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; [i:i5i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; [i<i5i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; [i>i5iAo; ;i;i;i; iA; 0; [i?i5iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; [iBi5iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i ;i;i; i7; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; I" super; T; [iFi-o; ;i;i;i; i-; I" super; T; [ii.o; ;i;i;i; i.; I" super; T; [iGi/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; I" super; T; [iIi1o; ;i;i;i; i1; I" super; T; [iJi2o; ;i;i;i; i2; I" super; T; [ii3o; ;i;i;i; i3; I" super; T; [iLi4o; ;i;i;i; i4; I" super; T; [iMi5o; ;i;i;i; i5; I" super; T; [iNi6o; ;i;i;i; i6; I" super; T; [iOi7o; ;i;i;i; i7; I" super; T; [iPi8o; ;i;i;i; i8; I" super; T; [iQi9o; ;i;i;i; i9; I" super; T; [iRi:o; ;i;i;i; i:; I" super; T; [iSi;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; I" super; T; [iTi=o; ;i;i;i; i=; I" super; T; [i"i>o; ;i;i;i; i>; I" super; T; [iUi?o; ;i;i;i; i?; I" super; T; [iWi@o; ;i;i;i; i@; I" super; T; [iYiAo; ;i;i;i; iA; I" super; T; [iZiBo; ;i;i;i; iB; I" super; T; [i\iCo; ;i;i;i; iC; I" super; T; [ifiDo; ;i;i;i; iD; I" super; T; [iPiEo; ;i;i;i; iE; I" super; T; [iQiFo; ;i;i;i; iF; I" super; T; [iiGo; ;i;i;i; iG; I" super; T; [igiHo; ;i;i;i; iH; I" super; T; [iiiIo; ;i;i;i; iI; I" super; T; [ijiJo; ;i;i;i; iJ; I" super; T; [iYiKo; ;i;i;i; iK; I" super; T; [i[iLo; ;i;i;i; iL; I" super; T; [i\iMo; ;i;i;i; iM; I" super; T; [iliNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; I" super; T; [ipiPo; ;i;i;i; iP; I" super; T; [iriQo; ;i;i;i; iQ; I" super; T; [iKiRo; ;i;i;i; iR; I" super; T; [itiSo; ;i;i;i; iS; I" super; T; [iTiTo; ;i;i;i; iT; I" super; T; [iiUo; ;i;i;i; iU; I" super; T; [iiVo; ;i;i;i; iV; I" super; T; [iuiWo; ;i;i;i; iW; I" super; T; [iyiXo; ;i;i;i; iX; I" super; T; [iziYo; ;i;i;i; iY; I" super; T; [iiZo; ;i;i;i; iZ; I" super; T; [ioi[o; ;i;i;i; i[; I" super; T; [i{i\o; ;i;i;i; i\; I" super; T; [i%i]o; ;i;i;i; i]; I" super; T; [ii^o; ;i;i;i; i^; I" super; T; [ii_o; ;i;i;i; i_; I" super; T; [ii`o; ;i;i;i; i`; I" super; T; [iiao; ;i;i;i; ia; I" super; T; [iibo; ;i;i;i; ib; I"sub; T; [inico; ;i;i;i; ic; I"sub; T; [iwido; ;i;i;i; id; I"sub; T; [izieo; ;i;i;i; ie; I"sub; T; [i{ifo; ;i;i;i; if; I"sub; T; [iigo; ;i;i;i; ig; I"sub; T; [iiho; ;i;i;i; ih; I"sub; T; [iiio; ;i;i;i; ii; I"sub; T; [iijo; ;i;i;i; ij; I"sub; T; [iiko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; I" super; T; [i=iyo; ;i;i};i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;ic,;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [iRio; ;i;i;i; i; I" super; T; [ihio; ;i;i;i; i; I" super; T; [iUio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [i\io; ;i;i;i; i; I" super; T; [ikio; ;i;i;i; i; I" super; T; [i_io; ;i;i;i; i; I" super; T; [iaio; ;i;i;i; i; I" super; T; [ieio; ;i;i;i; i; I" super; T; [ihio; ;i;i;i; i; I" super; T; [iiio; ;i;i;i; i; I" super; T; [ijio; ;i;i;i; i; I" super; T; [i{io; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [imio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iqio; ;i;i;i; i; I" super; T; [ipio; ;i;i;i; i; I" super; T; [irio; ;i;i;i; i; I" super; T; [isio; ;i;i;i; i; I" super; T; [itio; ;i;i;i; i; I" super; T; [iuio; ;i;i;i; i; I" super; T; [ixio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; I" super; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFi%io; ;i;i;i; i; 0; [ifi%io; ;i;i;i; i; 0; [iGiio; ;i;i;i; i; 0; [igiio; ;i;i;i; i; 0; [iGi#io; ;i;i;i; i; 0; [igi#io; ;i;i;i; i; 0; [iGi1io; ;i;i;i; i; 0; [igi1io; ;i;i;i ; i; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i ; i ; 0; [iIii o; ;i;i ;i; i ; 0; [iiii o; ;i;i;i ; i ; 0; [iIi#i o; ;i;i ;i; i ; 0; [iii#io; ;i;i;i; i; 0; [iIi1io; ;i;i;i; i; 0; [iii1io; ;i;i;i; i; 0; [iIi'io; ;i;i;i; i; 0; [iii'io; ;i;i;i; i; 0; [iIi-io; ;i;i;i; i; 0; [iii-io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iJi-io; ;i;i;i; i; 0; [iji-io; ;i;i;i; i; 0; [iJi0io; ;i;i;i; i; 0; [iji0io; ;i;i;i; i; 0; [i(iio; ;i;i;i; i; 0; [i)iio; ;i;i;i; i; 0; [iKiio; ;i;i;i; i; 0; [ikii o; ;i;i;i!; i ; 0; [iLii!o; ;i;i ;i; i!; 0; [ilii"o; ;i;i;i#; i"; 0; [iMii#o; ;i;i";i; i#; 0; [imii$o; ;i;i;i%; i$; 0; [iMi#i%o; ;i;i$;i; i%; 0; [imi#i&o; ;i;i;i'; i&; 0; [iMii'o; ;i;i&;i; i'; 0; [imii(o; ;i;i;i); i(; 0; [iMi'i)o; ;i;i(;i; i); 0; [imi'i*o; ;i;i;i+; i*; 0; [iMi.i+o; ;i;i*;i; i+; 0; [imi.i,o; ;i;i;i-; i,; 0; [iNi0i-o; ;i;i,;i; i-; 0; [ini0i.o; ;i;i;i/; i.; 0; [iii/o; ;i;i.;i; i/; 0; [iii0o; ;i;i;i1; i0; 0; [iPii1o; ;i;i0;i; i1; 0; [ipii2o; ;i;i;i3; i2; 0; [iPi#i3o; ;i;i2;i; i3; 0; [ipi#i4o; ;i;i;i5; i4; 0; [iPi1i5o; ;i;i4;i; i5; 0; [ipi1i6o; ;i;i;i7; i6; 0; [iQi#i7o; ;i;i6;i; i7; 0; [iqi#i8o; ;i;i;i9; i8; 0; [i6ii9o; ;i;i8;i; i9; 0; [i7ii:o; ;i;i;i;; i:; 0; [iQi1i;o; ;i;i:;i; i;; 0; [iqi1i<o; ;i;i;i=; i<; 0; [iQi-i=o; ;i;i<;i; i=; 0; [iqi-i>o; ;i;i;i?; i>; 0; [iRii?o; ;i;i>;i; i?; 0; [irii@o; ;i;i;iA; i@; 0; [iRiiAo; ;i;i@;i; iA; 0; [iriiBo; ;i;i;iC; iB; 0; [iRi#iCo; ;i;iB;i; iC; 0; [iri#iDo; ;i;i;iE; iD; 0; [iSiiEo; ;i;iD;i; iE; 0; [isiiFo; ;i;i;iG; iF; 0; [iSi#iGo; ;i;iF;i; iG; 0; [isi#iHo; ;i;i;iI; iH; 0; [iSi1iIo; ;i;iH;i; iI; 0; [isi1iJo; ;i;i;iK; iJ; 0; [iSi-iKo; ;i;iJ;i; iK; 0; [isi-iLo; ;i;i;iM; iL; 0; [iiiMo; ;i;iL;i; iM; 0; [iiiNo; ;i;i;iO; iN; 0; [iiiOo; ;i;iN;i; iO; 0; [iiiPo; ;i;i;iQ; iP; 0; [iLiiQo; ;i;iP;i; iQ; 0; [iMiiRo; ;i;i;iS; iR; 0; [iLiiSo; ;i;iR;i; iS; 0; [iMiiTo; ;i;i;iU; iT; 0; [iUiiUo; ;i;iT;i; iU; 0; [iuiiVo; ;i;i;iW; iV; 0; [iUiiWo; ;i;iV;i; iW; 0; [iuiiXo; ;i;i;iY; iX; 0; [iWiiYo; ;i;iX;i; iY; 0; [iwiiZo; ;i;i;i[; iZ; 0; [iWi#i[o; ;i;iZ;i; i[; 0; [iwi#i\o; ;i;i;i]; i\; 0; [iZii]o; ;i;i\;i; i]; 0; [i[ii^o; ;i;i;i_; i^; 0; [iWi1i_o; ;i;i^;i; i_; 0; [iwi1i`o; ;i;i;ia; i`; 0; [iXiiao; ;i;i`;i; ia; 0; [ixiibo; ;i;i;ic; ib; 0; [iXi#ico; ;i;ib;i; ic; 0; [ixi#ido; ;i;i;ie; id; 0; [iZiieo; ;i;id;i; ie; 0; [i[iifo; ;i;i;ig; if; 0; [i`iigo; ;i;if;i; ig; 0; [iaiiho; ;i;i;ii; ih; 0; [ibiiio; ;i;ih;i; ii; 0; [iciijo; ;i;i;ik; ij; 0; [iYiiko; ;i;ij;i; ik; 0; [iyiilo; ;i;i;im; il; 0; [iYi#imo; ;i;il;i; im; 0; [iyi#ino; ;i;i;io; in; 0; [iYi1ioo; ;i;in;i; io; 0; [iyi1ipo; ;i;i;iq; ip; 0; [iYi-iqo; ;i;ip;i; iq; 0; [iyi-iro; ;i;i;is; ir; 0; [iZi$iso; ;i;ir;i; is; 0; [izi$ito; ;i;i;iu; it; 0; [iZi0iuo; ;i;it;i; iu; 0; [izi0ivo; ;i;i;iw; iv; 0; [iZi-iwo; ;i;iv;i; iw; 0; [izi-ixo; ;i;i;iy; ix; 0; [ihiiyo; ;i;ix;i; iy; 0; [iiiizo; ;i;i;i{; iz; 0; [ijii{o; ;i;iz;i; i{; 0; [ikii|o; ;i;i;i}; i|; 0; [i[ii}o; ;i;i|;i; i}; 0; [i{ii~o; ;i;i;i; i~; 0; [i[i#io; ;i;i~;i; i; 0; [i{i#io; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\iio; ;i;i;i; i; 0; [i|iio; ;i;i;i; i; 0; [i\i#io; ;i;i;i; i; 0; [i|i#io; ;i;i;i; i; 0; [i]iio; ;i;i;i; i; 0; [i}iio; ;i;i;i; i; 0; [i]iio; ;i;i;i; i; 0; [i}iio; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; [i_iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i_i#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [i_i1io; ;i;i;i; i; 0; [ii1io; ;i;i;i; i; 0; [imi1io; ;i;i;i; i; 0; [iyiio; ;i;i;i; i; 0; [i|i io; ;i;i;i; i; 0; [i~i io; ;i;i;i; i; I" compat; T; [ifiio; ;i;i`;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iFi#io; ;i;i;i; i; 0; [ifi#io; ;i;i;i; i; 0; [iFi io; ;i;i;i; i; 0; [ifi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iJi#io; ;i;i;i; i; 0; [iji#io; ;i;i;i; i; 0; [iJi io; ;i;i;i; i; 0; [iji io; ;i;i;i; i; 0; [iJiio; ;i;i;i; i; 0; [ijiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iNi io; ;i;i;i; i; 0; [ini io; ;i;i;i; i; 0; [iNi#io; ;i;i;i; i; 0; [ini#io; ;i;i;i; i; 0; [iTi#io; ;i;i;i; i; 0; [iti#io; ;i;i;i; i; 0; [iTi io; ;i;i;i; i; 0; [iti io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [iZi#io; ;i;i;i; i; 0; [izi#io; ;i;i;i; i; 0; [iZi io; ;i;i;i; i; 0; [izi io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [ii io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [ii#io; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; [i^i#io; ;i;i;i; i; 0; [i~i#io; ;i;i;i; i; 0; [i^i io; ;i;i;i; i; 0; [i~i io; ;i;i;i; i; 0; [i^iio; ;i;i;i; i; 0; [i~iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i ;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [i ii o; ;i;i;i; i ; 0; [iii o; ;i;i;i; i ; 0; [i iio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [i iBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iii o; ;i;i(;i; i ; 0; [iii!o; ;i;i);i; i!; 0; [iii"o; ;i;i*;i; i"; 0; [i ii#o; ;i;i+;i; i#; 0; [i!ii$o; ;i;i,;i; i$; 0; [i ii%o; ;i;i-;i; i%; 0; [i!ii&o; ;i;i.;i; i&; 0; [i iBi'o; ;i;i/;i; i'; 0; [i!iBi(o; ;i;i;i ; i(; 0; [iii)o; ;i;i;i!; i); 0; [iii*o; ;i;i;i"; i*; 0; [i(ii+o; ;i;i;i#; i+; 0; [i)ii,o; ;i;i;i$; i,; 0; [i(ii-o; ;i;i;i%; i-; 0; [i)ii.o; ;i;i;i&; i.; 0; [i(iBi/o; ;i;i;i'; i/; 0; [i)iBi0o; ;i;i8;i; i0; 0; [iii1o; ;i;i9;i; i1; 0; [iii2o; ;i;i:;i; i2; 0; [i0ii3o; ;i;i;;i; i3; 0; [i1ii4o; ;i;i<;i; i4; 0; [i0ii5o; ;i;i=;i; i5; 0; [i1ii6o; ;i;i>;i; i6; 0; [i0iBi7o; ;i;i?;i; i7; 0; [i1iBi8o; ;i;i;i0; i8; 0; [iii9o; ;i;i;i1; i9; 0; [iii:o; ;i;i;i2; i:; 0; [i8ii;o; ;i;i;i3; i;; 0; [i9ii<o; ;i;i;i4; i<; 0; [i8ii=o; ;i;i;i5; i=; 0; [i9ii>o; ;i;i;i6; i>; 0; [i8iBi?o; ;i;i;i7; i?; 0; [i9iBi@o; ;i;iH;i; i@; 0; [iiiAo; ;i;iI;i; iA; 0; [iiiBo; ;i;iJ;i; iB; 0; [i@iiCo; ;i;iK;i; iC; 0; [iAiiDo; ;i;iL;i; iD; 0; [i@iiEo; ;i;iM;i; iE; 0; [iAiiHo; ;i;i;i@; iH; 0; [iiiIo; ;i;i;iA; iI; 0; [iiiJo; ;i;i;iB; iJ; 0; [iHiiKo; ;i;i;iC; iK; 0; [iIiiLo; ;i;i;iD; iL; 0; [iHiiMo; ;i;i;iE; iM; 0; [iIiiPo; ;i;i;i; iP; 0; [iiiQo; ;i;iY;i; iQ; 0; [iiiRo; ;i;i;i; iR; 0; [iPiiSo; ;i;i[;i; iS; 0; [iQiiTo; ;i;i;i; iT; 0; [iPiiUo; ;i;i];i; iU; 0; [iQiiVo; ;i;i;i; iV; 0; [iPiBiWo; ;i;i_;i; iW; 0; [iQiBiYo; ;i;i;iQ; iY; 0; [iii[o; ;i;i;iS; i[; 0; [iYii]o; ;i;i;iU; i]; 0; [iYii_o; ;i;i;iW; i_; 0; [iYiBi`o; ;i;ih;i; i`; 0; [iiiao; ;i;ii;i; ia; 0; [iiibo; ;i;ij;i; ib; 0; [i`iico; ;i;ik;i; ic; 0; [iaiido; ;i;il;i; id; 0; [i`iieo; ;i;im;i; ie; 0; [iaiifo; ;i;in;i; if; 0; [i`iBigo; ;i;io;i; ig; 0; [iaiBiho; ;i;i;i`; ih; 0; [iiiio; ;i;i;ia; ii; 0; [iiijo; ;i;i;ib; ij; 0; [ihiiko; ;i;i;ic; ik; 0; [iiiilo; ;i;i;id; il; 0; [ihiimo; ;i;i;ie; im; 0; [iiiino; ;i;i;if; in; 0; [ihiBioo; ;i;i;ig; io; 0; [iiiBipo; ;i;i;i; ip; 0; [iiiqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [iiiso; ;i;i;i; is; 0; [iito; ;i;i;i; it; 0; [iiiuo; ;i;i;i; iu; 0; [iivo; ;i;i;i; iv; 0; [iiiwo; ;i;i;i; iw; 0; [iixo; ;i;i;i; ix; 0; [iiiyo; ;i;i;i; iy; 0; [iizo; ;i;i;i; iz; 0; [iii{o; ;i;i;i; i{; 0; [ii|o; ;i;i;i; i|; 0; [iii}o; ;i;i;i; i}; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [i iEio; ;i;i;i; i; 0; [i!iEio; ;i;i;i; i; 0; [i"iEio; ;i;i;i; i; 0; [i#iEio; ;i;i;i; i; 0; [i$iEio; ;i;i;i; i; 0; [i%iEio; ;i;i;i; i; 0; [i&iEio; ;i;i;i; i; 0; [i'iEio; ;i;i;i; i; 0; [i(iEio; ;i;i;i; i; 0; [i)iEio; ;i;i;i; i; 0; [i*iEio; ;i;i;i; i; 0; [i+iEio; ;i;i;i; i; 0; [i,iEio; ;i;i;i; i; 0; [i-iEio; ;i;i;i; i; 0; [i.iEio; ;i;i;i; i; 0; [i/iEio; ;i;i;i; i; 0; [i`iEio; ;i;i;i; i; 0; [iaiEio; ;i;i;i; i; 0; [ibiEio; ;i;i;i; i; 0; [iciEio; ;i;i;i; i; 0; [idiEio; ;i;i;i; i; 0; [ieiEio; ;i;i;i; i; 0; [ifiEio; ;i;i;i; i; 0; [igiEio; ;i;i;i; i; 0; [ihiEio; ;i;i;i; i; 0; [iiiEio; ;i;i;i; i; 0; [ijiEio; ;i;i;i; i; 0; [ikiEio; ;i;i;i; i; 0; [iliEio; ;i;i;i; i; 0; [imiEio; ;i;i;i; i; 0; [iniEio; ;i;i;i; i; 0; [ioiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ipiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;ip; i; 0; [iiio; ;i;i;iq; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [i%iio; ;i;i;i; i; I" compat; T; [i%iBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [itiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;ir; i; 0; [iiio; ;i;i;is; i; 0; [iio; ;i;i;it; i; 0; [iiio; ;i;i;iu; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;iv; i; 0; [iiio; ;i;i;iw; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;iz; i; 0; [iiio; ;i;i;i{; i; 0; [iio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [i|iEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iiBio; ;i;i;i; i; 0; [iiEio; ;i;i;ix; i; 0; [iiio; ;i;i;iy; i; 0; [iio; ;i;i;i|; i; 0; [iiio; ;i;i;i}; i; 0; [iio; ;i;i;i; i; 0; [iiEio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [i%ii o; ;i;i;i; i ; 0; [i i o; ;i;i;i; i ; 0; [i i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" noBreak; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; I" compat; T; [i%i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" noBreak; T; [i i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" compat; T; [i%i3i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; I" compat; T; [i3i% o; ;i;i;i; i% ; I" compat; T; [i3i3i& o; ;i;i;i; i& ; I" compat; T; [i3i3i3i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; I" noBreak; T; [i%i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; I" compat; T; [i2 i2 i4 o; ;i;i;i; i4 ; I" compat; T; [i2 i2 i2 i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; I" compat; T; [i5 i5 i7 o; ;i;i;i; i7 ; I" compat; T; [i5 i5 i5 i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; I" compat; T; [i&i&i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; I" compat; T; [i%ii? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; I" compat; T; [iDiDiH o; ;i;i;i; iH ; I" compat; T; [iDi&iI o; ;i;i;i; iI ; I" compat; T; [i&iDiJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; I" compat; T; [ i2 i2 i2 i2 iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; I" compat; T; [i%i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; I" super; T; [i5iq o; ;i;i;i; iq ; I" super; T; [init o; ;i;i;i; it ; I" super; T; [i9iu o; ;i;i;i; iu ; I" super; T; [i:iv o; ;i;i;i; iv ; I" super; T; [i;iw o; ;i;i;i; iw ; I" super; T; [iiz o; ;i;i;i; iz ; I" super; T; [i0i{ o; ;i;i;i; i{ ; I" super; T; [i"i| o; ;i;i;i; i| ; I" super; T; [iBi} o; ;i;i;i; i} ; I" super; T; [i-i~ o; ;i;i;i; i~ ; I" super; T; [i.i o; ;i;i;i; i ; I" super; T; [isi o; ;i;i;i; i ; I"sub; T; [i5i o; ;i;i;i; i ; I"sub; T; [i6i o; ;i;i;i; i ; I"sub; T; [i7i o; ;i;i;i; i ; I"sub; T; [i8i o; ;i;i;i; i ; I"sub; T; [i9i o; ;i;i;i; i ; I"sub; T; [i:i o; ;i;i;i; i ; I"sub; T; [i;i o; ;i;i;i; i ; I"sub; T; [ii o; ;i;i;i; i ; I"sub; T; [i0i o; ;i;i;i; i ; I"sub; T; [i"i o; ;i;i;i; i ; I"sub; T; [iBi o; ;i;i;i; i ; I"sub; T; [i-i o; ;i;i;i; i ; I"sub; T; [i.i o; ;i;i;i; i ; I"sub; T; [ifi o; ;i;i;i; i ; I"sub; T; [iji o; ;i;i;i; i ; I"sub; T; [iti o; ;i;i;i; i ; I"sub; T; [i}i o; ;i;i;i; i ; I"sub; T; [iYi o; ;i;i;i; i ; I"sub; T; [imi o; ;i;i;i; i ; I"sub; T; [ipi o; ;i;i;i; i ; I"sub; T; [iqi o; ;i;i;i; i ; I"sub; T; [iri o; ;i;i;i; i ; I"sub; T; [isi o; ;i;i;i; i ; I"sub; T; [iui o; ;i;i;i; i ; I"sub; T; [ixi o; ;i;i;i; i ; I"sub; T; [iyi o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; I" compat; T; [iWixi o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; I" compat; T; [ifi4ihi!o; ;i;i;i; i!; I" compat; T; [ifi4ixi!o; ;i;i;i; i!; I" font; T; [iHi!o; ;i;i;i; i!; I" compat; T; [iiHi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" compat; T; [ihi4iti!o; ;i;i;i; i!; I" compat; T; [ihi4izi!o; ;i;i;i; i!; I" compat; T; [ii!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; I" compat; T; [iiKi !o; ;i;i;i; i !; I" font; T; [ili !o; ;i;i;i; i !; I" font; T; [iMi !o; ;i;i;i; i !; I" font; T; [iMi !o; ;i;i;i; i !; I" font; T; [iMi!o; ;i;i;i; i!; I" font; T; [imi!o; ;i;i;i; i!; I" font; T; [i'i!o; ;i;i;i; i!; I" font; T; [iNi!o; ;i;i;i; i!; I" font; T; [iNi!o; ;i;i;i; i!; I" font; T; [iQi!o; ;i;i;i; i!; I" font; T; [iqi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" font; T; [iSi!o; ;i;i;i; i!; I" compat; T; [iSiti!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; I" font; T; [iUi!o; ;i;i;i; i!; I" font; T; [iVi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; I" font; T; [iWi!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; I" super; T; [iXiRi!!o; ;i;i;i; i!!; I" compat; T; [iYiJiQi"!o; ;i;i;i; i"!; I" super; T; [iYiRi#!o; ;i;i;i; i#!; 0; 0i$!o; ;i;i;i; i$!; I" font; T; [i_i%!o; ;i;i;i; i%!; 0; 0i&!o; ;i;i;i; i&!; 0; [ii'!o; ;i;i;i; i'!; 0; 0i(!o; ;i;i;i; i(!; I" font; T; [i_i)!o; ;i;i;i; i)!; 0; 0i*!o; ;i;i;ip; i*!; 0; [iPi+!o; ;i;i;i; i+!; 0; [ii,!o; ;i;i;i; i,!; I" font; T; [iGi-!o; ;i;i;i; i-!; I" font; T; [iHi.!o; ;i;i;i; i.!; 0; 0i/!o; ;i;i;i; i/!; I" font; T; [iji0!o; ;i;i;i; i0!; I" font; T; [iJi1!o; ;i;i;i; i1!; I" font; T; [iKi2!o; ;i;i;iN!; i2!; 0; 0i3!o; ;i;i;i; i3!; I" font; T; [iRi4!o; ;i;i;i; i4!; I" font; T; [iti5!o; ;i;i;i; i5!; I" compat; T; [ii6!o; ;i;i;i; i6!; I" compat; T; [ii7!o; ;i;i;i; i7!; I" compat; T; [ii8!o; ;i;i;i; i8!; I" compat; T; [ii9!o; ;i;i;i; i9!; I" font; T; [ini:!o; ;i;i;i; i:!; 0; 0i;!o; ;i;i;i; i;!; I" compat; T; [iKiFi]i!o; ;i;i;i; i>!; I" font; T; [ii?!o; ;i;i;i; i?!; I" font; T; [ii@!o; ;i;i;i; i@!; I" font; T; [i"iA!o; ;i;i;i; iA!; 0; 0iB!o; ;i;i;i; iB!; 0; 0iC!o; ;i;i;i; iC!; 0; 0iD!o; ;i;i;i; iD!; 0; 0iE!o; ;i;i;i; iE!; I" font; T; [iIiF!o; ;i;i;i; iF!; I" font; T; [iiiG!o; ;i;i;i; iG!; I" font; T; [ijiH!o; ;i;i;i; iH!; I" font; T; [iniI!o; ;i;i;i; iI!; I" font; T; [ioiJ!o; ;i;i;i; iJ!; 0; 0iK!o; ;i;i;i; iK!; 0; 0iL!o; ;i;i;i; iL!; 0; 0iM!o; ;i;i;i; iM!; 0; 0iN!o; ;i;i2!;i; iN!; 0; 0iO!o; ;i;i;i; iO!; 0; 0iP!o; ;i;i;i; iP!; I" fraction; T; [i6iD iiR!o; ;i;i;i; iR!; I" fraction; T; [ i6iD i6i5iS!o; ;i;i;i; iS!; I" fraction; T; [i6iD i8iT!o; ;i;i;i; iT!; I" fraction; T; [i7iD i8iU!o; ;i;i;i; iU!; I" fraction; T; [i6iD i:iV!o; ;i;i;i; iV!; I" fraction; T; [i7iD i:iW!o; ;i;i;i; iW!; I" fraction; T; [i8iD i:iX!o; ;i;i;i; iX!; I" fraction; T; [i9iD i:iY!o; ;i;i;i; iY!; I" fraction; T; [i6iD i;iZ!o; ;i;i;i; iZ!; I" fraction; T; [i:iD i;i[!o; ;i;i;i; i[!; I" fraction; T; [i6iD i=i\!o; ;i;i;i; i\!; I" fraction; T; [i8iD i=i]!o; ;i;i;i; i]!; I" fraction; T; [i:iD i=i^!o; ;i;i;i; i^!; I" fraction; T; [i"o; ;i;i;i; i>"; 0; 0i?"o; ;i;i;i; i?"; 0; 0i@"o; ;i;i;i; i@"; 0; 0iA"o; ;i;i;i; iA"; 0; [i<"i8iB"o; ;i;i;i; iB"; 0; 0iC"o; ;i;i;i; iC"; 0; 0iD"o; ;i;i;i; iD"; 0; [iC"i8iE"o; ;i;i;i; iE"; 0; 0iF"o; ;i;i;i; iF"; 0; 0iG"o; ;i;i;i; iG"; 0; [iE"i8iH"o; ;i;i;i; iH"; 0; 0iI"o; ;i;i;i; iI"; 0; [iH"i8iJ"o; ;i;i;i; iJ"; 0; 0iK"o; ;i;i;i; iK"; 0; 0iL"o; ;i;i;i; iL"; 0; 0iM"o; ;i;i;i; iM"; 0; 0iN"o; ;i;i;i; iN"; 0; 0iO"o; ;i;i;i; iO"; 0; 0iP"o; ;i;i;i; iP"; 0; 0iQ"o; ;i;i;i; iQ"; 0; 0iR"o; ;i;i;i; iR"; 0; 0iS"o; ;i;i;i; iS"; 0; 0iT"o; ;i;i;i; iT"; 0; 0iU"o; ;i;i;i; iU"; 0; 0iV"o; ;i;i;i; iV"; 0; 0iW"o; ;i;i;i; iW"; 0; 0iX"o; ;i;i;i; iX"; 0; 0iY"o; ;i;i;i; iY"; 0; 0iZ"o; ;i;i;i; iZ"; 0; 0i["o; ;i;i;i; i["; 0; 0i\"o; ;i;i;i; i\"; 0; 0i]"o; ;i;i;i; i]"; 0; 0i^"o; ;i;i;i; i^"; 0; 0i_"o; ;i;i;i; i_"; 0; 0i`"o; ;i;i;i; i`"; 0; [iBi8ia"o; ;i;i;i; ia"; 0; 0ib"o; ;i;i;i; ib"; 0; [ia"i8ic"o; ;i;i;i; ic"; 0; 0id"o; ;i;i;i; id"; 0; 0ie"o; ;i;i;i; ie"; 0; 0if"o; ;i;i;i; if"; 0; 0ig"o; ;i;i;i; ig"; 0; 0ih"o; ;i;i;i; ih"; 0; 0ii"o; ;i;i;i; ii"; 0; 0ij"o; ;i;i;i; ij"; 0; 0ik"o; ;i;i;i; ik"; 0; 0il"o; ;i;i;i; il"; 0; 0im"o; ;i;i;i; im"; 0; [iM"i8in"o; ;i;i;i; in"; 0; [iAi8io"o; ;i;i;i; io"; 0; [iCi8ip"o; ;i;i;i; ip"; 0; [id"i8iq"o; ;i;i;i; iq"; 0; [ie"i8ir"o; ;i;i;i; ir"; 0; 0is"o; ;i;i;i; is"; 0; 0it"o; ;i;i;i; it"; 0; [ir"i8iu"o; ;i;i;i; iu"; 0; [is"i8iv"o; ;i;i;i; iv"; 0; 0iw"o; ;i;i;i; iw"; 0; 0ix"o; ;i;i;i; ix"; 0; [iv"i8iy"o; ;i;i;i; iy"; 0; [iw"i8iz"o; ;i;i;i; iz"; 0; 0i{"o; ;i;i;i; i{"; 0; 0i|"o; ;i;i;i; i|"; 0; 0i}"o; ;i;i;i; i}"; 0; 0i~"o; ;i;i;i; i~"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [iz"i8i"o; ;i;i;i; i"; 0; [i{"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i|"i8i"o; ;i;i;i; i"; 0; [i}"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; [i"i8i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i!#o; ;i;i;i; i!#; 0; 0i"#o; ;i;i;i; i"#; 0; 0i##o; ;i;i;i; i##; 0; 0i$#o; ;i;i;i; i$#; 0; 0i%#o; ;i;i;i; i%#; 0; 0i&#o; ;i;i;i; i&#; 0; 0i'#o; ;i;i;i; i'#; 0; 0i(#o; ;i;i;i; i(#; 0; 0i)#o; ;i;i;i; i)#; 0; [i0i*#o; ;i;i;i; i*#; 0; [i 0i+#o; ;i;i;i; i+#; 0; 0i,#o; ;i;i;i; i,#; 0; 0i-#o; ;i;i;i; i-#; 0; 0i.#o; ;i;i;i; i.#; 0; 0i/#o; ;i;i;i; i/#; 0; 0i0#o; ;i;i;i; i0#; 0; 0i1#o; ;i;i;i; i1#; 0; 0i2#o; ;i;i;i; i2#; 0; 0i3#o; ;i;i;i; i3#; 0; 0i4#o; ;i;i;i; i4#; 0; 0i5#o; ;i;i;i; i5#; 0; 0i6#o; ;i;i;i; i6#; 0; 0i7#o; ;i;i;i; i7#; 0; 0i8#o; ;i;i;i; i8#; 0; 0i9#o; ;i;i;i; i9#; 0; 0i:#o; ;i;i;i; i:#; 0; 0i;#o; ;i;i;i; i;#; 0; 0i<#o; ;i;i;i; i<#; 0; 0i=#o; ;i;i;i; i=#; 0; 0i>#o; ;i;i;i; i>#; 0; 0i?#o; ;i;i;i; i?#; 0; 0i@#o; ;i;i;i; i@#; 0; 0iA#o; ;i;i;i; iA#; 0; 0iB#o; ;i;i;i; iB#; 0; 0iC#o; ;i;i;i; iC#; 0; 0iD#o; ;i;i;i; iD#; 0; 0iE#o; ;i;i;i; iE#; 0; 0iF#o; ;i;i;i; iF#; 0; 0iG#o; ;i;i;i; iG#; 0; 0iH#o; ;i;i;i; iH#; 0; 0iI#o; ;i;i;i; iI#; 0; 0iJ#o; ;i;i;i; iJ#; 0; 0iK#o; ;i;i;i; iK#; 0; 0iL#o; ;i;i;i; iL#; 0; 0iM#o; ;i;i;i; iM#; 0; 0iN#o; ;i;i;i; iN#; 0; 0iO#o; ;i;i;i; iO#; 0; 0iP#o; ;i;i;i; iP#; 0; 0iQ#o; ;i;i;i; iQ#; 0; 0iR#o; ;i;i;i; iR#; 0; 0iS#o; ;i;i;i; iS#; 0; 0iT#o; ;i;i;i; iT#; 0; 0iU#o; ;i;i;i; iU#; 0; 0iV#o; ;i;i;i; iV#; 0; 0iW#o; ;i;i;i; iW#; 0; 0iX#o; ;i;i;i; iX#; 0; 0iY#o; ;i;i;i; iY#; 0; 0iZ#o; ;i;i;i; iZ#; 0; 0i[#o; ;i;i;i; i[#; 0; 0i\#o; ;i;i;i; i\#; 0; 0i]#o; ;i;i;i; i]#; 0; 0i^#o; ;i;i;i; i^#; 0; 0i_#o; ;i;i;i; i_#; 0; 0i`#o; ;i;i;i; i`#; 0; 0ia#o; ;i;i;i; ia#; 0; 0ib#o; ;i;i;i; ib#; 0; 0ic#o; ;i;i;i; ic#; 0; 0id#o; ;i;i;i; id#; 0; 0ie#o; ;i;i;i; ie#; 0; 0if#o; ;i;i;i; if#; 0; 0ig#o; ;i;i;i; ig#; 0; 0ih#o; ;i;i;i; ih#; 0; 0ii#o; ;i;i;i; ii#; 0; 0ij#o; ;i;i;i; ij#; 0; 0ik#o; ;i;i;i; ik#; 0; 0il#o; ;i;i;i; il#; 0; 0im#o; ;i;i;i; im#; 0; 0in#o; ;i;i;i; in#; 0; 0io#o; ;i;i;i; io#; 0; 0ip#o; ;i;i;i; ip#; 0; 0iq#o; ;i;i;i; iq#; 0; 0ir#o; ;i;i;i; ir#; 0; 0is#o; ;i;i;i; is#; 0; 0it#o; ;i;i;i; it#; 0; 0iu#o; ;i;i;i; iu#; 0; 0iv#o; ;i;i;i; iv#; 0; 0iw#o; ;i;i;i; iw#; 0; 0ix#o; ;i;i;i; ix#; 0; 0iy#o; ;i;i;i; iy#; 0; 0iz#o; ;i;i;i; iz#; 0; 0i{#o; ;i;i;i; i{#; 0; 0i|#o; ;i;i;i; i|#; 0; 0i}#o; ;i;i;i; i}#; 0; 0i~#o; ;i;i;i; i~#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i!$o; ;i;i;i; i!$; 0; 0i"$o; ;i;i;i; i"$; 0; 0i#$o; ;i;i;i; i#$; 0; 0i$$o; ;i;i;i; i$$; 0; 0i%$o; ;i;i;i; i%$; 0; 0i&$o; ;i;i;i; i&$; 0; 0i@$o; ;i;i;i; i@$; 0; 0iA$o; ;i;i;i; iA$; 0; 0iB$o; ;i;i;i; iB$; 0; 0iC$o; ;i;i;i; iC$; 0; 0iD$o; ;i;i;i; iD$; 0; 0iE$o; ;i;i;i; iE$; 0; 0iF$o; ;i;i;i; iF$; 0; 0iG$o; ;i;i;i; iG$; 0; 0iH$o; ;i;i;i; iH$; 0; 0iI$o; ;i;i;i; iI$; 0; 0iJ$o; ;i;i;i; iJ$; 0; 0i`$o; ;i;i;i; i`$; I" circle; T; [i6ia$o; ;i;i;i; ia$; I" circle; T; [i7ib$o; ;i;i;i; ib$; I" circle; T; [i8ic$o; ;i;i;i; ic$; I" circle; T; [i9id$o; ;i;i;i; id$; I" circle; T; [i:ie$o; ;i;i;i; ie$; I" circle; T; [i;if$o; ;i;i;i; if$; I" circle; T; [iii$o; ;i;i;i; ii$; I" circle; T; [i6i5ij$o; ;i;i;i; ij$; I" circle; T; [i6i6ik$o; ;i;i;i; ik$; I" circle; T; [i6i7il$o; ;i;i;i; il$; I" circle; T; [i6i8im$o; ;i;i;i; im$; I" circle; T; [i6i9in$o; ;i;i;i; in$; I" circle; T; [i6i:io$o; ;i;i;i; io$; I" circle; T; [i6i;ip$o; ;i;i;i; ip$; I" circle; T; [i6iis$o; ;i;i;i; is$; I" circle; T; [i7i5it$o; ;i;i;i; it$; I" compat; T; [i-i6i.iu$o; ;i;i;i; iu$; I" compat; T; [i-i7i.iv$o; ;i;i;i; iv$; I" compat; T; [i-i8i.iw$o; ;i;i;i; iw$; I" compat; T; [i-i9i.ix$o; ;i;i;i; ix$; I" compat; T; [i-i:i.iy$o; ;i;i;i; iy$; I" compat; T; [i-i;i.iz$o; ;i;i;i; iz$; I" compat; T; [i-ii.i}$o; ;i;i;i; i}$; I" compat; T; [ i-i6i5i.i~$o; ;i;i;i; i~$; I" compat; T; [ i-i6i6i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i7i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i8i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i9i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i:i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6i;i.i$o; ;i;i;i; i$; I" compat; T; [ i-i6ii.i$o; ;i;i;i; i$; I" compat; T; [ i-i7i5i.i$o; ;i;i;i; i$; I" compat; T; [i6i3i$o; ;i;i;i; i$; I" compat; T; [i7i3i$o; ;i;i;i; i$; I" compat; T; [i8i3i$o; ;i;i;i; i$; I" compat; T; [i9i3i$o; ;i;i;i; i$; I" compat; T; [i:i3i$o; ;i;i;i; i$; I" compat; T; [i;i3i$o; ;i;i;i; i$; I" compat; T; [ii3i$o; ;i;i;i; i$; I" compat; T; [i6i5i3i$o; ;i;i;i; i$; I" compat; T; [i6i6i3i$o; ;i;i;i; i$; I" compat; T; [i6i7i3i$o; ;i;i;i; i$; I" compat; T; [i6i8i3i$o; ;i;i;i; i$; I" compat; T; [i6i9i3i$o; ;i;i;i; i$; I" compat; T; [i6i:i3i$o; ;i;i;i; i$; I" compat; T; [i6i;i3i$o; ;i;i;i; i$; I" compat; T; [i6ii3i$o; ;i;i;i; i$; I" compat; T; [i7i5i3i$o; ;i;i;i; i$; I" compat; T; [i-ifi.i$o; ;i;i;i; i$; I" compat; T; [i-igi.i$o; ;i;i;i; i$; I" compat; T; [i-ihi.i$o; ;i;i;i; i$; I" compat; T; [i-iii.i$o; ;i;i;i; i$; I" compat; T; [i-iji.i$o; ;i;i;i; i$; I" compat; T; [i-iki.i$o; ;i;i;i; i$; I" compat; T; [i-ili.i$o; ;i;i;i; i$; I" compat; T; [i-imi.i$o; ;i;i;i; i$; I" compat; T; [i-ini.i$o; ;i;i;i; i$; I" compat; T; [i-ioi.i$o; ;i;i;i; i$; I" compat; T; [i-ipi.i$o; ;i;i;i; i$; I" compat; T; [i-iqi.i$o; ;i;i;i; i$; I" compat; T; [i-iri.i$o; ;i;i;i; i$; I" compat; T; [i-isi.i$o; ;i;i;i; i$; I" compat; T; [i-iti.i$o; ;i;i;i; i$; I" compat; T; [i-iui.i$o; ;i;i;i; i$; I" compat; T; [i-ivi.i$o; ;i;i;i; i$; I" compat; T; [i-iwi.i$o; ;i;i;i; i$; I" compat; T; [i-ixi.i$o; ;i;i;i; i$; I" compat; T; [i-iyi.i$o; ;i;i;i; i$; I" compat; T; [i-izi.i$o; ;i;i;i; i$; I" compat; T; [i-i{i.i$o; ;i;i;i; i$; I" compat; T; [i-i|i.i$o; ;i;i;i; i$; I" compat; T; [i-i}i.i$o; ;i;i;i; i$; I" compat; T; [i-i~i.i$o; ;i;i;i; i$; I" compat; T; [i-ii.i$o; ;i;i;i$; i$; I" circle; T; [iFi$o; ;i;i;i$; i$; I" circle; T; [iGi$o; ;i;i;i$; i$; I" circle; T; [iHi$o; ;i;i;i$; i$; I" circle; T; [iIi$o; ;i;i;i$; i$; I" circle; T; [iJi$o; ;i;i;i$; i$; I" circle; T; [iKi$o; ;i;i;i$; i$; I" circle; T; [iLi$o; ;i;i;i$; i$; I" circle; T; [iMi$o; ;i;i;i$; i$; I" circle; T; [iNi$o; ;i;i;i$; i$; I" circle; T; [iOi$o; ;i;i;i$; i$; I" circle; T; [iPi$o; ;i;i;i$; i$; I" circle; T; [iQi$o; ;i;i;i$; i$; I" circle; T; [iRi$o; ;i;i;i$; i$; I" circle; T; [iSi$o; ;i;i;i$; i$; I" circle; T; [iTi$o; ;i;i;i$; i$; I" circle; T; [iUi$o; ;i;i;i$; i$; I" circle; T; [iVi$o; ;i;i;i$; i$; I" circle; T; [iWi$o; ;i;i;i$; i$; I" circle; T; [iXi$o; ;i;i;i$; i$; I" circle; T; [iYi$o; ;i;i;i$; i$; I" circle; T; [iZi$o; ;i;i;i$; i$; I" circle; T; [i[i$o; ;i;i;i$; i$; I" circle; T; [i\i$o; ;i;i;i$; i$; I" circle; T; [i]i$o; ;i;i;i$; i$; I" circle; T; [i^i$o; ;i;i;i$; i$; I" circle; T; [i_i$o; ;i;i$;i; i$; I" circle; T; [ifi$o; ;i;i$;i; i$; I" circle; T; [igi$o; ;i;i$;i; i$; I" circle; T; [ihi$o; ;i;i$;i; i$; I" circle; T; [iii$o; ;i;i$;i; i$; I" circle; T; [iji$o; ;i;i$;i; i$; I" circle; T; [iki$o; ;i;i$;i; i$; I" circle; T; [ili$o; ;i;i$;i; i$; I" circle; T; [imi$o; ;i;i$;i; i$; I" circle; T; [ini$o; ;i;i$;i; i$; I" circle; T; [ioi$o; ;i;i$;i; i$; I" circle; T; [ipi$o; ;i;i$;i; i$; I" circle; T; [iqi$o; ;i;i$;i; i$; I" circle; T; [iri$o; ;i;i$;i; i$; I" circle; T; [isi$o; ;i;i$;i; i$; I" circle; T; [iti$o; ;i;i$;i; i$; I" circle; T; [iui$o; ;i;i$;i; i$; I" circle; T; [ivi$o; ;i;i$;i; i$; I" circle; T; [iwi$o; ;i;i$;i; i$; I" circle; T; [ixi$o; ;i;i$;i; i$; I" circle; T; [iyi$o; ;i;i$;i; i$; I" circle; T; [izi$o; ;i;i$;i; i$; I" circle; T; [i{i$o; ;i;i$;i; i$; I" circle; T; [i|i$o; ;i;i$;i; i$; I" circle; T; [i}i$o; ;i;i$;i; i$; I" circle; T; [i~i$o; ;i;i$;i; i$; I" circle; T; [ii$o; ;i;i;i; i$; I" circle; T; [i5i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i %o; ;i;i;i; i %; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i %o; ;i;i;i; i %; 0; 0i!%o; ;i;i;i; i!%; 0; 0i"%o; ;i;i;i; i"%; 0; 0i#%o; ;i;i;i; i#%; 0; 0i$%o; ;i;i;i; i$%; 0; 0i%%o; ;i;i;i; i%%; 0; 0i&%o; ;i;i;i; i&%; 0; 0i'%o; ;i;i;i; i'%; 0; 0i(%o; ;i;i;i; i(%; 0; 0i)%o; ;i;i;i; i)%; 0; 0i*%o; ;i;i;i; i*%; 0; 0i+%o; ;i;i;i; i+%; 0; 0i,%o; ;i;i;i; i,%; 0; 0i-%o; ;i;i;i; i-%; 0; 0i.%o; ;i;i;i; i.%; 0; 0i/%o; ;i;i;i; i/%; 0; 0i0%o; ;i;i;i; i0%; 0; 0i1%o; ;i;i;i; i1%; 0; 0i2%o; ;i;i;i; i2%; 0; 0i3%o; ;i;i;i; i3%; 0; 0i4%o; ;i;i;i; i4%; 0; 0i5%o; ;i;i;i; i5%; 0; 0i6%o; ;i;i;i; i6%; 0; 0i7%o; ;i;i;i; i7%; 0; 0i8%o; ;i;i;i; i8%; 0; 0i9%o; ;i;i;i; i9%; 0; 0i:%o; ;i;i;i; i:%; 0; 0i;%o; ;i;i;i; i;%; 0; 0i<%o; ;i;i;i; i<%; 0; 0i=%o; ;i;i;i; i=%; 0; 0i>%o; ;i;i;i; i>%; 0; 0i?%o; ;i;i;i; i?%; 0; 0i@%o; ;i;i;i; i@%; 0; 0iA%o; ;i;i;i; iA%; 0; 0iB%o; ;i;i;i; iB%; 0; 0iC%o; ;i;i;i; iC%; 0; 0iD%o; ;i;i;i; iD%; 0; 0iE%o; ;i;i;i; iE%; 0; 0iF%o; ;i;i;i; iF%; 0; 0iG%o; ;i;i;i; iG%; 0; 0iH%o; ;i;i;i; iH%; 0; 0iI%o; ;i;i;i; iI%; 0; 0iJ%o; ;i;i;i; iJ%; 0; 0iK%o; ;i;i;i; iK%; 0; 0iL%o; ;i;i;i; iL%; 0; 0iM%o; ;i;i;i; iM%; 0; 0iN%o; ;i;i;i; iN%; 0; 0iO%o; ;i;i;i; iO%; 0; 0iP%o; ;i;i;i; iP%; 0; 0iQ%o; ;i;i;i; iQ%; 0; 0iR%o; ;i;i;i; iR%; 0; 0iS%o; ;i;i;i; iS%; 0; 0iT%o; ;i;i;i; iT%; 0; 0iU%o; ;i;i;i; iU%; 0; 0iV%o; ;i;i;i; iV%; 0; 0iW%o; ;i;i;i; iW%; 0; 0iX%o; ;i;i;i; iX%; 0; 0iY%o; ;i;i;i; iY%; 0; 0iZ%o; ;i;i;i; iZ%; 0; 0i[%o; ;i;i;i; i[%; 0; 0i\%o; ;i;i;i; i\%; 0; 0i]%o; ;i;i;i; i]%; 0; 0i^%o; ;i;i;i; i^%; 0; 0i_%o; ;i;i;i; i_%; 0; 0i`%o; ;i;i;i; i`%; 0; 0ia%o; ;i;i;i; ia%; 0; 0ib%o; ;i;i;i; ib%; 0; 0ic%o; ;i;i;i; ic%; 0; 0id%o; ;i;i;i; id%; 0; 0ie%o; ;i;i;i; ie%; 0; 0if%o; ;i;i;i; if%; 0; 0ig%o; ;i;i;i; ig%; 0; 0ih%o; ;i;i;i; ih%; 0; 0ii%o; ;i;i;i; ii%; 0; 0ij%o; ;i;i;i; ij%; 0; 0ik%o; ;i;i;i; ik%; 0; 0il%o; ;i;i;i; il%; 0; 0im%o; ;i;i;i; im%; 0; 0in%o; ;i;i;i; in%; 0; 0io%o; ;i;i;i; io%; 0; 0ip%o; ;i;i;i; ip%; 0; 0iq%o; ;i;i;i; iq%; 0; 0ir%o; ;i;i;i; ir%; 0; 0is%o; ;i;i;i; is%; 0; 0it%o; ;i;i;i; it%; 0; 0iu%o; ;i;i;i; iu%; 0; 0iv%o; ;i;i;i; iv%; 0; 0iw%o; ;i;i;i; iw%; 0; 0ix%o; ;i;i;i; ix%; 0; 0iy%o; ;i;i;i; iy%; 0; 0iz%o; ;i;i;i; iz%; 0; 0i{%o; ;i;i;i; i{%; 0; 0i|%o; ;i;i;i; i|%; 0; 0i}%o; ;i;i;i; i}%; 0; 0i~%o; ;i;i;i; i~%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i &o; ;i;i;i; i &; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i &o; ;i;i;i; i &; 0; 0i!&o; ;i;i;i; i!&; 0; 0i"&o; ;i;i;i; i"&; 0; 0i#&o; ;i;i;i; i#&; 0; 0i$&o; ;i;i;i; i$&; 0; 0i%&o; ;i;i;i; i%&; 0; 0i&&o; ;i;i;i; i&&; 0; 0i'&o; ;i;i;i; i'&; 0; 0i(&o; ;i;i;i; i(&; 0; 0i)&o; ;i;i;i; i)&; 0; 0i*&o; ;i;i;i; i*&; 0; 0i+&o; ;i;i;i; i+&; 0; 0i,&o; ;i;i;i; i,&; 0; 0i-&o; ;i;i;i; i-&; 0; 0i.&o; ;i;i;i; i.&; 0; 0i/&o; ;i;i;i; i/&; 0; 0i0&o; ;i;i;i; i0&; 0; 0i1&o; ;i;i;i; i1&; 0; 0i2&o; ;i;i;i; i2&; 0; 0i3&o; ;i;i;i; i3&; 0; 0i4&o; ;i;i;i; i4&; 0; 0i5&o; ;i;i;i; i5&; 0; 0i6&o; ;i;i;i; i6&; 0; 0i7&o; ;i;i;i; i7&; 0; 0i8&o; ;i;i;i; i8&; 0; 0i9&o; ;i;i;i; i9&; 0; 0i:&o; ;i;i;i; i:&; 0; 0i;&o; ;i;i;i; i;&; 0; 0i<&o; ;i;i;i; i<&; 0; 0i=&o; ;i;i;i; i=&; 0; 0i>&o; ;i;i;i; i>&; 0; 0i?&o; ;i;i;i; i?&; 0; 0i@&o; ;i;i;i; i@&; 0; 0iA&o; ;i;i;i; iA&; 0; 0iB&o; ;i;i;i; iB&; 0; 0iC&o; ;i;i;i; iC&; 0; 0iD&o; ;i;i;i; iD&; 0; 0iE&o; ;i;i;i; iE&; 0; 0iF&o; ;i;i;i; iF&; 0; 0iG&o; ;i;i;i; iG&; 0; 0iH&o; ;i;i;i; iH&; 0; 0iI&o; ;i;i;i; iI&; 0; 0iJ&o; ;i;i;i; iJ&; 0; 0iK&o; ;i;i;i; iK&; 0; 0iL&o; ;i;i;i; iL&; 0; 0iM&o; ;i;i;i; iM&; 0; 0iN&o; ;i;i;i; iN&; 0; 0iO&o; ;i;i;i; iO&; 0; 0iP&o; ;i;i;i; iP&; 0; 0iQ&o; ;i;i;i; iQ&; 0; 0iR&o; ;i;i;i; iR&; 0; 0iS&o; ;i;i;i; iS&; 0; 0iT&o; ;i;i;i; iT&; 0; 0iU&o; ;i;i;i; iU&; 0; 0iV&o; ;i;i;i; iV&; 0; 0iW&o; ;i;i;i; iW&; 0; 0iX&o; ;i;i;i; iX&; 0; 0iY&o; ;i;i;i; iY&; 0; 0iZ&o; ;i;i;i; iZ&; 0; 0i[&o; ;i;i;i; i[&; 0; 0i\&o; ;i;i;i; i\&; 0; 0i]&o; ;i;i;i; i]&; 0; 0i^&o; ;i;i;i; i^&; 0; 0i_&o; ;i;i;i; i_&; 0; 0i`&o; ;i;i;i; i`&; 0; 0ia&o; ;i;i;i; ia&; 0; 0ib&o; ;i;i;i; ib&; 0; 0ic&o; ;i;i;i; ic&; 0; 0id&o; ;i;i;i; id&; 0; 0ie&o; ;i;i;i; ie&; 0; 0if&o; ;i;i;i; if&; 0; 0ig&o; ;i;i;i; ig&; 0; 0ih&o; ;i;i;i; ih&; 0; 0ii&o; ;i;i;i; ii&; 0; 0ij&o; ;i;i;i; ij&; 0; 0ik&o; ;i;i;i; ik&; 0; 0il&o; ;i;i;i; il&; 0; 0im&o; ;i;i;i; im&; 0; 0in&o; ;i;i;i; in&; 0; 0io&o; ;i;i;i; io&; 0; 0ip&o; ;i;i;i; ip&; 0; 0iq&o; ;i;i;i; iq&; 0; 0ir&o; ;i;i;i; ir&; 0; 0is&o; ;i;i;i; is&; 0; 0it&o; ;i;i;i; it&; 0; 0iu&o; ;i;i;i; iu&; 0; 0iv&o; ;i;i;i; iv&; 0; 0iw&o; ;i;i;i; iw&; 0; 0ix&o; ;i;i;i; ix&; 0; 0iy&o; ;i;i;i; iy&; 0; 0iz&o; ;i;i;i; iz&; 0; 0i{&o; ;i;i;i; i{&; 0; 0i|&o; ;i;i;i; i|&; 0; 0i}&o; ;i;i;i; i}&; 0; 0i~&o; ;i;i;i; i~&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i 'o; ;i;i;i; i '; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i 'o; ;i;i;i; i '; 0; 0i!'o; ;i;i;i; i!'; 0; 0i"'o; ;i;i;i; i"'; 0; 0i#'o; ;i;i;i; i#'; 0; 0i$'o; ;i;i;i; i$'; 0; 0i%'o; ;i;i;i; i%'; 0; 0i&'o; ;i;i;i; i&'; 0; 0i''o; ;i;i;i; i''; 0; 0i('o; ;i;i;i; i('; 0; 0i)'o; ;i;i;i; i)'; 0; 0i*'o; ;i;i;i; i*'; 0; 0i+'o; ;i;i;i; i+'; 0; 0i,'o; ;i;i;i; i,'; 0; 0i-'o; ;i;i;i; i-'; 0; 0i.'o; ;i;i;i; i.'; 0; 0i/'o; ;i;i;i; i/'; 0; 0i0'o; ;i;i;i; i0'; 0; 0i1'o; ;i;i;i; i1'; 0; 0i2'o; ;i;i;i; i2'; 0; 0i3'o; ;i;i;i; i3'; 0; 0i4'o; ;i;i;i; i4'; 0; 0i5'o; ;i;i;i; i5'; 0; 0i6'o; ;i;i;i; i6'; 0; 0i7'o; ;i;i;i; i7'; 0; 0i8'o; ;i;i;i; i8'; 0; 0i9'o; ;i;i;i; i9'; 0; 0i:'o; ;i;i;i; i:'; 0; 0i;'o; ;i;i;i; i;'; 0; 0i<'o; ;i;i;i; i<'; 0; 0i='o; ;i;i;i; i='; 0; 0i>'o; ;i;i;i; i>'; 0; 0i?'o; ;i;i;i; i?'; 0; 0i@'o; ;i;i;i; i@'; 0; 0iA'o; ;i;i;i; iA'; 0; 0iB'o; ;i;i;i; iB'; 0; 0iC'o; ;i;i;i; iC'; 0; 0iD'o; ;i;i;i; iD'; 0; 0iE'o; ;i;i;i; iE'; 0; 0iF'o; ;i;i;i; iF'; 0; 0iG'o; ;i;i;i; iG'; 0; 0iH'o; ;i;i;i; iH'; 0; 0iI'o; ;i;i;i; iI'; 0; 0iJ'o; ;i;i;i; iJ'; 0; 0iK'o; ;i;i;i; iK'; 0; 0iL'o; ;i;i;i; iL'; 0; 0iM'o; ;i;i;i; iM'; 0; 0iN'o; ;i;i;i; iN'; 0; 0iO'o; ;i;i;i; iO'; 0; 0iP'o; ;i;i;i; iP'; 0; 0iQ'o; ;i;i;i; iQ'; 0; 0iR'o; ;i;i;i; iR'; 0; 0iS'o; ;i;i;i; iS'; 0; 0iT'o; ;i;i;i; iT'; 0; 0iU'o; ;i;i;i; iU'; 0; 0iV'o; ;i;i;i; iV'; 0; 0iW'o; ;i;i;i; iW'; 0; 0iX'o; ;i;i;i; iX'; 0; 0iY'o; ;i;i;i; iY'; 0; 0iZ'o; ;i;i;i; iZ'; 0; 0i['o; ;i;i;i; i['; 0; 0i\'o; ;i;i;i; i\'; 0; 0i]'o; ;i;i;i; i]'; 0; 0i^'o; ;i;i;i; i^'; 0; 0i_'o; ;i;i;i; i_'; 0; 0i`'o; ;i;i;i; i`'; 0; 0ia'o; ;i;i;i; ia'; 0; 0ib'o; ;i;i;i; ib'; 0; 0ic'o; ;i;i;i; ic'; 0; 0id'o; ;i;i;i; id'; 0; 0ie'o; ;i;i;i; ie'; 0; 0if'o; ;i;i;i; if'; 0; 0ig'o; ;i;i;i; ig'; 0; 0ih'o; ;i;i;i; ih'; 0; 0ii'o; ;i;i;i; ii'; 0; 0ij'o; ;i;i;i; ij'; 0; 0ik'o; ;i;i;i; ik'; 0; 0il'o; ;i;i;i; il'; 0; 0im'o; ;i;i;i; im'; 0; 0in'o; ;i;i;i; in'; 0; 0io'o; ;i;i;i; io'; 0; 0ip'o; ;i;i;i; ip'; 0; 0iq'o; ;i;i;i; iq'; 0; 0ir'o; ;i;i;i; ir'; 0; 0is'o; ;i;i;i; is'; 0; 0it'o; ;i;i;i; it'; 0; 0iu'o; ;i;i;i; iu'; 0; 0iv'o; ;i;i;i; iv'; 0; 0iw'o; ;i;i;i; iw'; 0; 0ix'o; ;i;i;i; ix'; 0; 0iy'o; ;i;i;i; iy'; 0; 0iz'o; ;i;i;i; iz'; 0; 0i{'o; ;i;i;i; i{'; 0; 0i|'o; ;i;i;i; i|'; 0; 0i}'o; ;i;i;i; i}'; 0; 0i~'o; ;i;i;i; i~'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i (o; ;i;i;i; i (; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i (o; ;i;i;i; i (; 0; 0i!(o; ;i;i;i; i!(; 0; 0i"(o; ;i;i;i; i"(; 0; 0i#(o; ;i;i;i; i#(; 0; 0i$(o; ;i;i;i; i$(; 0; 0i%(o; ;i;i;i; i%(; 0; 0i&(o; ;i;i;i; i&(; 0; 0i'(o; ;i;i;i; i'(; 0; 0i((o; ;i;i;i; i((; 0; 0i)(o; ;i;i;i; i)(; 0; 0i*(o; ;i;i;i; i*(; 0; 0i+(o; ;i;i;i; i+(; 0; 0i,(o; ;i;i;i; i,(; 0; 0i-(o; ;i;i;i; i-(; 0; 0i.(o; ;i;i;i; i.(; 0; 0i/(o; ;i;i;i; i/(; 0; 0i0(o; ;i;i;i; i0(; 0; 0i1(o; ;i;i;i; i1(; 0; 0i2(o; ;i;i;i; i2(; 0; 0i3(o; ;i;i;i; i3(; 0; 0i4(o; ;i;i;i; i4(; 0; 0i5(o; ;i;i;i; i5(; 0; 0i6(o; ;i;i;i; i6(; 0; 0i7(o; ;i;i;i; i7(; 0; 0i8(o; ;i;i;i; i8(; 0; 0i9(o; ;i;i;i; i9(; 0; 0i:(o; ;i;i;i; i:(; 0; 0i;(o; ;i;i;i; i;(; 0; 0i<(o; ;i;i;i; i<(; 0; 0i=(o; ;i;i;i; i=(; 0; 0i>(o; ;i;i;i; i>(; 0; 0i?(o; ;i;i;i; i?(; 0; 0i@(o; ;i;i;i; i@(; 0; 0iA(o; ;i;i;i; iA(; 0; 0iB(o; ;i;i;i; iB(; 0; 0iC(o; ;i;i;i; iC(; 0; 0iD(o; ;i;i;i; iD(; 0; 0iE(o; ;i;i;i; iE(; 0; 0iF(o; ;i;i;i; iF(; 0; 0iG(o; ;i;i;i; iG(; 0; 0iH(o; ;i;i;i; iH(; 0; 0iI(o; ;i;i;i; iI(; 0; 0iJ(o; ;i;i;i; iJ(; 0; 0iK(o; ;i;i;i; iK(; 0; 0iL(o; ;i;i;i; iL(; 0; 0iM(o; ;i;i;i; iM(; 0; 0iN(o; ;i;i;i; iN(; 0; 0iO(o; ;i;i;i; iO(; 0; 0iP(o; ;i;i;i; iP(; 0; 0iQ(o; ;i;i;i; iQ(; 0; 0iR(o; ;i;i;i; iR(; 0; 0iS(o; ;i;i;i; iS(; 0; 0iT(o; ;i;i;i; iT(; 0; 0iU(o; ;i;i;i; iU(; 0; 0iV(o; ;i;i;i; iV(; 0; 0iW(o; ;i;i;i; iW(; 0; 0iX(o; ;i;i;i; iX(; 0; 0iY(o; ;i;i;i; iY(; 0; 0iZ(o; ;i;i;i; iZ(; 0; 0i[(o; ;i;i;i; i[(; 0; 0i\(o; ;i;i;i; i\(; 0; 0i](o; ;i;i;i; i](; 0; 0i^(o; ;i;i;i; i^(; 0; 0i_(o; ;i;i;i; i_(; 0; 0i`(o; ;i;i;i; i`(; 0; 0ia(o; ;i;i;i; ia(; 0; 0ib(o; ;i;i;i; ib(; 0; 0ic(o; ;i;i;i; ic(; 0; 0id(o; ;i;i;i; id(; 0; 0ie(o; ;i;i;i; ie(; 0; 0if(o; ;i;i;i; if(; 0; 0ig(o; ;i;i;i; ig(; 0; 0ih(o; ;i;i;i; ih(; 0; 0ii(o; ;i;i;i; ii(; 0; 0ij(o; ;i;i;i; ij(; 0; 0ik(o; ;i;i;i; ik(; 0; 0il(o; ;i;i;i; il(; 0; 0im(o; ;i;i;i; im(; 0; 0in(o; ;i;i;i; in(; 0; 0io(o; ;i;i;i; io(; 0; 0ip(o; ;i;i;i; ip(; 0; 0iq(o; ;i;i;i; iq(; 0; 0ir(o; ;i;i;i; ir(; 0; 0is(o; ;i;i;i; is(; 0; 0it(o; ;i;i;i; it(; 0; 0iu(o; ;i;i;i; iu(; 0; 0iv(o; ;i;i;i; iv(; 0; 0iw(o; ;i;i;i; iw(; 0; 0ix(o; ;i;i;i; ix(; 0; 0iy(o; ;i;i;i; iy(; 0; 0iz(o; ;i;i;i; iz(; 0; 0i{(o; ;i;i;i; i{(; 0; 0i|(o; ;i;i;i; i|(; 0; 0i}(o; ;i;i;i; i}(; 0; 0i~(o; ;i;i;i; i~(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i )o; ;i;i;i; i ); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i )o; ;i;i;i; i ); 0; 0i!)o; ;i;i;i; i!); 0; 0i")o; ;i;i;i; i"); 0; 0i#)o; ;i;i;i; i#); 0; 0i$)o; ;i;i;i; i$); 0; 0i%)o; ;i;i;i; i%); 0; 0i&)o; ;i;i;i; i&); 0; 0i')o; ;i;i;i; i'); 0; 0i()o; ;i;i;i; i(); 0; 0i))o; ;i;i;i; i)); 0; 0i*)o; ;i;i;i; i*); 0; 0i+)o; ;i;i;i; i+); 0; 0i,)o; ;i;i;i; i,); 0; 0i-)o; ;i;i;i; i-); 0; 0i.)o; ;i;i;i; i.); 0; 0i/)o; ;i;i;i; i/); 0; 0i0)o; ;i;i;i; i0); 0; 0i1)o; ;i;i;i; i1); 0; 0i2)o; ;i;i;i; i2); 0; 0i3)o; ;i;i;i; i3); 0; 0i4)o; ;i;i;i; i4); 0; 0i5)o; ;i;i;i; i5); 0; 0i6)o; ;i;i;i; i6); 0; 0i7)o; ;i;i;i; i7); 0; 0i8)o; ;i;i;i; i8); 0; 0i9)o; ;i;i;i; i9); 0; 0i:)o; ;i;i;i; i:); 0; 0i;)o; ;i;i;i; i;); 0; 0i<)o; ;i;i;i; i<); 0; 0i=)o; ;i;i;i; i=); 0; 0i>)o; ;i;i;i; i>); 0; 0i?)o; ;i;i;i; i?); 0; 0i@)o; ;i;i;i; i@); 0; 0iA)o; ;i;i;i; iA); 0; 0iB)o; ;i;i;i; iB); 0; 0iC)o; ;i;i;i; iC); 0; 0iD)o; ;i;i;i; iD); 0; 0iE)o; ;i;i;i; iE); 0; 0iF)o; ;i;i;i; iF); 0; 0iG)o; ;i;i;i; iG); 0; 0iH)o; ;i;i;i; iH); 0; 0iI)o; ;i;i;i; iI); 0; 0iJ)o; ;i;i;i; iJ); 0; 0iK)o; ;i;i;i; iK); 0; 0iL)o; ;i;i;i; iL); 0; 0iM)o; ;i;i;i; iM); 0; 0iN)o; ;i;i;i; iN); 0; 0iO)o; ;i;i;i; iO); 0; 0iP)o; ;i;i;i; iP); 0; 0iQ)o; ;i;i;i; iQ); 0; 0iR)o; ;i;i;i; iR); 0; 0iS)o; ;i;i;i; iS); 0; 0iT)o; ;i;i;i; iT); 0; 0iU)o; ;i;i;i; iU); 0; 0iV)o; ;i;i;i; iV); 0; 0iW)o; ;i;i;i; iW); 0; 0iX)o; ;i;i;i; iX); 0; 0iY)o; ;i;i;i; iY); 0; 0iZ)o; ;i;i;i; iZ); 0; 0i[)o; ;i;i;i; i[); 0; 0i\)o; ;i;i;i; i\); 0; 0i])o; ;i;i;i; i]); 0; 0i^)o; ;i;i;i; i^); 0; 0i_)o; ;i;i;i; i_); 0; 0i`)o; ;i;i;i; i`); 0; 0ia)o; ;i;i;i; ia); 0; 0ib)o; ;i;i;i; ib); 0; 0ic)o; ;i;i;i; ic); 0; 0id)o; ;i;i;i; id); 0; 0ie)o; ;i;i;i; ie); 0; 0if)o; ;i;i;i; if); 0; 0ig)o; ;i;i;i; ig); 0; 0ih)o; ;i;i;i; ih); 0; 0ii)o; ;i;i;i; ii); 0; 0ij)o; ;i;i;i; ij); 0; 0ik)o; ;i;i;i; ik); 0; 0il)o; ;i;i;i; il); 0; 0im)o; ;i;i;i; im); 0; 0in)o; ;i;i;i; in); 0; 0io)o; ;i;i;i; io); 0; 0ip)o; ;i;i;i; ip); 0; 0iq)o; ;i;i;i; iq); 0; 0ir)o; ;i;i;i; ir); 0; 0is)o; ;i;i;i; is); 0; 0it)o; ;i;i;i; it); 0; 0iu)o; ;i;i;i; iu); 0; 0iv)o; ;i;i;i; iv); 0; 0iw)o; ;i;i;i; iw); 0; 0ix)o; ;i;i;i; ix); 0; 0iy)o; ;i;i;i; iy); 0; 0iz)o; ;i;i;i; iz); 0; 0i{)o; ;i;i;i; i{); 0; 0i|)o; ;i;i;i; i|); 0; 0i})o; ;i;i;i; i}); 0; 0i~)o; ;i;i;i; i~); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; 0; 0i *o; ;i;i;i; i *; I" compat; T; [ i+"i+"i+"i+"i *o; ;i;i;i; i *; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i *o; ;i;i;i; i *; 0; 0i!*o; ;i;i;i; i!*; 0; 0i"*o; ;i;i;i; i"*; 0; 0i#*o; ;i;i;i; i#*; 0; 0i$*o; ;i;i;i; i$*; 0; 0i%*o; ;i;i;i; i%*; 0; 0i&*o; ;i;i;i; i&*; 0; 0i'*o; ;i;i;i; i'*; 0; 0i(*o; ;i;i;i; i(*; 0; 0i)*o; ;i;i;i; i)*; 0; 0i**o; ;i;i;i; i**; 0; 0i+*o; ;i;i;i; i+*; 0; 0i,*o; ;i;i;i; i,*; 0; 0i-*o; ;i;i;i; i-*; 0; 0i.*o; ;i;i;i; i.*; 0; 0i/*o; ;i;i;i; i/*; 0; 0i0*o; ;i;i;i; i0*; 0; 0i1*o; ;i;i;i; i1*; 0; 0i2*o; ;i;i;i; i2*; 0; 0i3*o; ;i;i;i; i3*; 0; 0i4*o; ;i;i;i; i4*; 0; 0i5*o; ;i;i;i; i5*; 0; 0i6*o; ;i;i;i; i6*; 0; 0i7*o; ;i;i;i; i7*; 0; 0i8*o; ;i;i;i; i8*; 0; 0i9*o; ;i;i;i; i9*; 0; 0i:*o; ;i;i;i; i:*; 0; 0i;*o; ;i;i;i; i;*; 0; 0i<*o; ;i;i;i; i<*; 0; 0i=*o; ;i;i;i; i=*; 0; 0i>*o; ;i;i;i; i>*; 0; 0i?*o; ;i;i;i; i?*; 0; 0i@*o; ;i;i;i; i@*; 0; 0iA*o; ;i;i;i; iA*; 0; 0iB*o; ;i;i;i; iB*; 0; 0iC*o; ;i;i;i; iC*; 0; 0iD*o; ;i;i;i; iD*; 0; 0iE*o; ;i;i;i; iE*; 0; 0iF*o; ;i;i;i; iF*; 0; 0iG*o; ;i;i;i; iG*; 0; 0iH*o; ;i;i;i; iH*; 0; 0iI*o; ;i;i;i; iI*; 0; 0iJ*o; ;i;i;i; iJ*; 0; 0iK*o; ;i;i;i; iK*; 0; 0iL*o; ;i;i;i; iL*; 0; 0iM*o; ;i;i;i; iM*; 0; 0iN*o; ;i;i;i; iN*; 0; 0iO*o; ;i;i;i; iO*; 0; 0iP*o; ;i;i;i; iP*; 0; 0iQ*o; ;i;i;i; iQ*; 0; 0iR*o; ;i;i;i; iR*; 0; 0iS*o; ;i;i;i; iS*; 0; 0iT*o; ;i;i;i; iT*; 0; 0iU*o; ;i;i;i; iU*; 0; 0iV*o; ;i;i;i; iV*; 0; 0iW*o; ;i;i;i; iW*; 0; 0iX*o; ;i;i;i; iX*; 0; 0iY*o; ;i;i;i; iY*; 0; 0iZ*o; ;i;i;i; iZ*; 0; 0i[*o; ;i;i;i; i[*; 0; 0i\*o; ;i;i;i; i\*; 0; 0i]*o; ;i;i;i; i]*; 0; 0i^*o; ;i;i;i; i^*; 0; 0i_*o; ;i;i;i; i_*; 0; 0i`*o; ;i;i;i; i`*; 0; 0ia*o; ;i;i;i; ia*; 0; 0ib*o; ;i;i;i; ib*; 0; 0ic*o; ;i;i;i; ic*; 0; 0id*o; ;i;i;i; id*; 0; 0ie*o; ;i;i;i; ie*; 0; 0if*o; ;i;i;i; if*; 0; 0ig*o; ;i;i;i; ig*; 0; 0ih*o; ;i;i;i; ih*; 0; 0ii*o; ;i;i;i; ii*; 0; 0ij*o; ;i;i;i; ij*; 0; 0ik*o; ;i;i;i; ik*; 0; 0il*o; ;i;i;i; il*; 0; 0im*o; ;i;i;i; im*; 0; 0in*o; ;i;i;i; in*; 0; 0io*o; ;i;i;i; io*; 0; 0ip*o; ;i;i;i; ip*; 0; 0iq*o; ;i;i;i; iq*; 0; 0ir*o; ;i;i;i; ir*; 0; 0is*o; ;i;i;i; is*; 0; 0it*o; ;i;i;i; it*; I" compat; T; [i?i?iBiu*o; ;i;i;i; iu*; I" compat; T; [iBiBiv*o; ;i;i;i; iv*; I" compat; T; [iBiBiBiw*o; ;i;i;i; iw*; 0; 0ix*o; ;i;i;i; ix*; 0; 0iy*o; ;i;i;i; iy*; 0; 0iz*o; ;i;i;i; iz*; 0; 0i{*o; ;i;i;i; i{*; 0; 0i|*o; ;i;i;i; i|*; 0; 0i}*o; ;i;i;i; i}*; 0; 0i~*o; ;i;i;i; i~*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; [i*i8i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i +o; ;i;i;i; i +; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i +o; ;i;i;i; i +; 0; 0i!+o; ;i;i;i; i!+; 0; 0i"+o; ;i;i;i; i"+; 0; 0i#+o; ;i;i;i; i#+; 0; 0i$+o; ;i;i;i; i$+; 0; 0i%+o; ;i;i;i; i%+; 0; 0i&+o; ;i;i;i; i&+; 0; 0i'+o; ;i;i;i; i'+; 0; 0i(+o; ;i;i;i; i(+; 0; 0i)+o; ;i;i;i; i)+; 0; 0i*+o; ;i;i;i; i*+; 0; 0i++o; ;i;i;i; i++; 0; 0i,+o; ;i;i;i; i,+; 0; 0i-+o; ;i;i;i; i-+; 0; 0i.+o; ;i;i;i; i.+; 0; 0i/+o; ;i;i;i; i/+; 0; 0i0+o; ;i;i;i; i0+; 0; 0i1+o; ;i;i;i; i1+; 0; 0i2+o; ;i;i;i; i2+; 0; 0i3+o; ;i;i;i; i3+; 0; 0i4+o; ;i;i;i; i4+; 0; 0i5+o; ;i;i;i; i5+; 0; 0i6+o; ;i;i;i; i6+; 0; 0i7+o; ;i;i;i; i7+; 0; 0i8+o; ;i;i;i; i8+; 0; 0i9+o; ;i;i;i; i9+; 0; 0i:+o; ;i;i;i; i:+; 0; 0i;+o; ;i;i;i; i;+; 0; 0i<+o; ;i;i;i; i<+; 0; 0i=+o; ;i;i;i; i=+; 0; 0i>+o; ;i;i;i; i>+; 0; 0i?+o; ;i;i;i; i?+; 0; 0i@+o; ;i;i;i; i@+; 0; 0iA+o; ;i;i;i; iA+; 0; 0iB+o; ;i;i;i; iB+; 0; 0iC+o; ;i;i;i; iC+; 0; 0iD+o; ;i;i;i; iD+; 0; 0iE+o; ;i;i;i; iE+; 0; 0iF+o; ;i;i;i; iF+; 0; 0iG+o; ;i;i;i; iG+; 0; 0iH+o; ;i;i;i; iH+; 0; 0iI+o; ;i;i;i; iI+; 0; 0iJ+o; ;i;i;i; iJ+; 0; 0iK+o; ;i;i;i; iK+; 0; 0iL+o; ;i;i;i; iL+; 0; 0iM+o; ;i;i;i; iM+; 0; 0iN+o; ;i;i;i; iN+; 0; 0iO+o; ;i;i;i; iO+; 0; 0iP+o; ;i;i;i; iP+; 0; 0iQ+o; ;i;i;i; iQ+; 0; 0iR+o; ;i;i;i; iR+; 0; 0iS+o; ;i;i;i; iS+; 0; 0iT+o; ;i;i;i; iT+; 0; 0iU+o; ;i;i;i; iU+; 0; 0iV+o; ;i;i;i; iV+; 0; 0iW+o; ;i;i;i; iW+; 0; 0iX+o; ;i;i;i; iX+; 0; 0iY+o; ;i;i;i; iY+; 0; 0iZ+o; ;i;i;i; iZ+; 0; 0i[+o; ;i;i;i; i[+; 0; 0i\+o; ;i;i;i; i\+; 0; 0i]+o; ;i;i;i; i]+; 0; 0i^+o; ;i;i;i; i^+; 0; 0i_+o; ;i;i;i; i_+; 0; 0i`+o; ;i;i;i; i`+; 0; 0ia+o; ;i;i;i; ia+; 0; 0ib+o; ;i;i;i; ib+; 0; 0ic+o; ;i;i;i; ic+; 0; 0id+o; ;i;i;i; id+; 0; 0ie+o; ;i;i;i; ie+; 0; 0if+o; ;i;i;i; if+; 0; 0ig+o; ;i;i;i; ig+; 0; 0ih+o; ;i;i;i; ih+; 0; 0ii+o; ;i;i;i; ii+; 0; 0ij+o; ;i;i;i; ij+; 0; 0ik+o; ;i;i;i; ik+; 0; 0il+o; ;i;i;i; il+; 0; 0im+o; ;i;i;i; im+; 0; 0in+o; ;i;i;i; in+; 0; 0io+o; ;i;i;i; io+; 0; 0ip+o; ;i;i;i; ip+; 0; 0iq+o; ;i;i;i; iq+; 0; 0ir+o; ;i;i;i; ir+; 0; 0is+o; ;i;i;i; is+; 0; 0iv+o; ;i;i;i; iv+; 0; 0iw+o; ;i;i;i; iw+; 0; 0ix+o; ;i;i;i; ix+; 0; 0iy+o; ;i;i;i; iy+; 0; 0iz+o; ;i;i;i; iz+; 0; 0i{+o; ;i;i;i; i{+; 0; 0i|+o; ;i;i;i; i|+; 0; 0i}+o; ;i;i;i; i}+; 0; 0i~+o; ;i;i;i; i~+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i0,; i,; 0; 0i,o; ;i;i;i1,; i,; 0; 0i,o; ;i;i;i2,; i,; 0; 0i,o; ;i;i;i3,; i,; 0; 0i,o; ;i;i;i4,; i,; 0; 0i,o; ;i;i;i5,; i,; 0; 0i,o; ;i;i;i6,; i,; 0; 0i,o; ;i;i;i7,; i,; 0; 0i,o; ;i;i;i8,; i,; 0; 0i ,o; ;i;i;i9,; i ,; 0; 0i ,o; ;i;i;i:,; i ,; 0; 0i ,o; ;i;i;i;,; i ,; 0; 0i ,o; ;i;i;i<,; i ,; 0; 0i ,o; ;i;i;i=,; i ,; 0; 0i,o; ;i;i;i>,; i,; 0; 0i,o; ;i;i;i?,; i,; 0; 0i,o; ;i;i;i@,; i,; 0; 0i,o; ;i;i;iA,; i,; 0; 0i,o; ;i;i;iB,; i,; 0; 0i,o; ;i;i;iC,; i,; 0; 0i,o; ;i;i;iD,; i,; 0; 0i,o; ;i;i;iE,; i,; 0; 0i,o; ;i;i;iF,; i,; 0; 0i,o; ;i;i;iG,; i,; 0; 0i,o; ;i;i;iH,; i,; 0; 0i,o; ;i;i;iI,; i,; 0; 0i,o; ;i;i;iJ,; i,; 0; 0i,o; ;i;i;iK,; i,; 0; 0i,o; ;i;i;iL,; i,; 0; 0i,o; ;i;i;iM,; i,; 0; 0i,o; ;i;i;iN,; i,; 0; 0i,o; ;i;i;iO,; i,; 0; 0i ,o; ;i;i;iP,; i ,; 0; 0i!,o; ;i;i;iQ,; i!,; 0; 0i",o; ;i;i;iR,; i",; 0; 0i#,o; ;i;i;iS,; i#,; 0; 0i$,o; ;i;i;iT,; i$,; 0; 0i%,o; ;i;i;iU,; i%,; 0; 0i&,o; ;i;i;iV,; i&,; 0; 0i',o; ;i;i;iW,; i',; 0; 0i(,o; ;i;i;iX,; i(,; 0; 0i),o; ;i;i;iY,; i),; 0; 0i*,o; ;i;i;iZ,; i*,; 0; 0i+,o; ;i;i;i[,; i+,; 0; 0i,,o; ;i;i;i\,; i,,; 0; 0i-,o; ;i;i;i],; i-,; 0; 0i.,o; ;i;i;i^,; i.,; 0; 0i0,o; ;i;i,;i; i0,; 0; 0i1,o; ;i;i,;i; i1,; 0; 0i2,o; ;i;i,;i; i2,; 0; 0i3,o; ;i;i,;i; i3,; 0; 0i4,o; ;i;i,;i; i4,; 0; 0i5,o; ;i;i,;i; i5,; 0; 0i6,o; ;i;i,;i; i6,; 0; 0i7,o; ;i;i,;i; i7,; 0; 0i8,o; ;i;i,;i; i8,; 0; 0i9,o; ;i;i ,;i; i9,; 0; 0i:,o; ;i;i ,;i; i:,; 0; 0i;,o; ;i;i ,;i; i;,; 0; 0i<,o; ;i;i ,;i; i<,; 0; 0i=,o; ;i;i ,;i; i=,; 0; 0i>,o; ;i;i,;i; i>,; 0; 0i?,o; ;i;i,;i; i?,; 0; 0i@,o; ;i;i,;i; i@,; 0; 0iA,o; ;i;i,;i; iA,; 0; 0iB,o; ;i;i,;i; iB,; 0; 0iC,o; ;i;i,;i; iC,; 0; 0iD,o; ;i;i,;i; iD,; 0; 0iE,o; ;i;i,;i; iE,; 0; 0iF,o; ;i;i,;i; iF,; 0; 0iG,o; ;i;i,;i; iG,; 0; 0iH,o; ;i;i,;i; iH,; 0; 0iI,o; ;i;i,;i; iI,; 0; 0iJ,o; ;i;i,;i; iJ,; 0; 0iK,o; ;i;i,;i; iK,; 0; 0iL,o; ;i;i,;i; iL,; 0; 0iM,o; ;i;i,;i; iM,; 0; 0iN,o; ;i;i,;i; iN,; 0; 0iO,o; ;i;i,;i; iO,; 0; 0iP,o; ;i;i ,;i; iP,; 0; 0iQ,o; ;i;i!,;i; iQ,; 0; 0iR,o; ;i;i",;i; iR,; 0; 0iS,o; ;i;i#,;i; iS,; 0; 0iT,o; ;i;i$,;i; iT,; 0; 0iU,o; ;i;i%,;i; iU,; 0; 0iV,o; ;i;i&,;i; iV,; 0; 0iW,o; ;i;i',;i; iW,; 0; 0iX,o; ;i;i(,;i; iX,; 0; 0iY,o; ;i;i),;i; iY,; 0; 0iZ,o; ;i;i*,;i; iZ,; 0; 0i[,o; ;i;i+,;i; i[,; 0; 0i\,o; ;i;i,,;i; i\,; 0; 0i],o; ;i;i-,;i; i],; 0; 0i^,o; ;i;i.,;i; i^,; 0; 0i`,o; ;i;i;ia,; i`,; 0; 0ia,o; ;i;i`,;i; ia,; 0; 0ib,o; ;i;i;ik; ib,; 0; 0ic,o; ;i;i;i}; ic,; 0; 0id,o; ;i;i;i}; id,; 0; 0ie,o; ;i;i:;i; ie,; 0; 0if,o; ;i;i>;i; if,; 0; 0ig,o; ;i;i;ih,; ig,; 0; 0ih,o; ;i;ig,;i; ih,; 0; 0ii,o; ;i;i;ij,; ii,; 0; 0ij,o; ;i;ii,;i; ij,; 0; 0ik,o; ;i;i;il,; ik,; 0; 0il,o; ;i;ik,;i; il,; 0; 0im,o; ;i;i;iQ; im,; 0; 0in,o; ;i;i;iq; in,; 0; 0io,o; ;i;i;iP; io,; 0; 0ip,o; ;i;i;iR; ip,; 0; 0iq,o; ;i;i;i; iq,; 0; 0ir,o; ;i;i;is,; ir,; 0; 0is,o; ;i;ir,;i; is,; 0; 0it,o; ;i;i;i; it,; 0; 0iu,o; ;i;i;iv,; iu,; 0; 0iv,o; ;i;iu,;i; iv,; 0; 0iw,o; ;i;i;i; iw,; 0; 0ix,o; ;i;i;i; ix,; 0; 0iy,o; ;i;i;i; iy,; 0; 0iz,o; ;i;i;i; iz,; 0; 0i{,o; ;i;i;i; i{,; 0; 0i|,o; ;i;i;i; i|,; I"sub; T; [ioi},o; ;i;i;i; i},; I" super; T; [i[i~,o; ;i;i;i?; i~,; 0; 0i,o; ;i;i;i@; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i,; i,; 0; 0i,o; ;i;i,;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i -o; ;i;i;i; i -; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i -o; ;i;i;i; i -; 0; 0i!-o; ;i;i;i; i!-; 0; 0i"-o; ;i;i;i; i"-; 0; 0i#-o; ;i;i;i; i#-; 0; 0i$-o; ;i;i;i; i$-; 0; 0i%-o; ;i;i;i; i%-; 0; 0i'-o; ;i;i;i; i'-; 0; 0i--o; ;i;i;i; i--; 0; 0i0-o; ;i;i;i; i0-; 0; 0i1-o; ;i;i;i; i1-; 0; 0i2-o; ;i;i;i; i2-; 0; 0i3-o; ;i;i;i; i3-; 0; 0i4-o; ;i;i;i; i4-; 0; 0i5-o; ;i;i;i; i5-; 0; 0i6-o; ;i;i;i; i6-; 0; 0i7-o; ;i;i;i; i7-; 0; 0i8-o; ;i;i;i; i8-; 0; 0i9-o; ;i;i;i; i9-; 0; 0i:-o; ;i;i;i; i:-; 0; 0i;-o; ;i;i;i; i;-; 0; 0i<-o; ;i;i;i; i<-; 0; 0i=-o; ;i;i;i; i=-; 0; 0i>-o; ;i;i;i; i>-; 0; 0i?-o; ;i;i;i; i?-; 0; 0i@-o; ;i;i;i; i@-; 0; 0iA-o; ;i;i;i; iA-; 0; 0iB-o; ;i;i;i; iB-; 0; 0iC-o; ;i;i;i; iC-; 0; 0iD-o; ;i;i;i; iD-; 0; 0iE-o; ;i;i;i; iE-; 0; 0iF-o; ;i;i;i; iF-; 0; 0iG-o; ;i;i;i; iG-; 0; 0iH-o; ;i;i;i; iH-; 0; 0iI-o; ;i;i;i; iI-; 0; 0iJ-o; ;i;i;i; iJ-; 0; 0iK-o; ;i;i;i; iK-; 0; 0iL-o; ;i;i;i; iL-; 0; 0iM-o; ;i;i;i; iM-; 0; 0iN-o; ;i;i;i; iN-; 0; 0iO-o; ;i;i;i; iO-; 0; 0iP-o; ;i;i;i; iP-; 0; 0iQ-o; ;i;i;i; iQ-; 0; 0iR-o; ;i;i;i; iR-; 0; 0iS-o; ;i;i;i; iS-; 0; 0iT-o; ;i;i;i; iT-; 0; 0iU-o; ;i;i;i; iU-; 0; 0iV-o; ;i;i;i; iV-; 0; 0iW-o; ;i;i;i; iW-; 0; 0iX-o; ;i;i;i; iX-; 0; 0iY-o; ;i;i;i; iY-; 0; 0iZ-o; ;i;i;i; iZ-; 0; 0i[-o; ;i;i;i; i[-; 0; 0i\-o; ;i;i;i; i\-; 0; 0i]-o; ;i;i;i; i]-; 0; 0i^-o; ;i;i;i; i^-; 0; 0i_-o; ;i;i;i; i_-; 0; 0i`-o; ;i;i;i; i`-; 0; 0ia-o; ;i;i;i; ia-; 0; 0ib-o; ;i;i;i; ib-; 0; 0ic-o; ;i;i;i; ic-; 0; 0id-o; ;i;i;i; id-; 0; 0ie-o; ;i;i;i; ie-; 0; 0if-o; ;i;i;i; if-; 0; 0ig-o; ;i;i;i; ig-; 0; 0io-o; ;i;i;i; io-; I" super; T; [ia-ip-o; ;i;i;i; ip-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i .o; ;i;i;i; i .; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i .o; ;i;i;i; i .; 0; 0i!.o; ;i;i;i; i!.; 0; 0i".o; ;i;i;i; i".; 0; 0i#.o; ;i;i;i; i#.; 0; 0i$.o; ;i;i;i; i$.; 0; 0i%.o; ;i;i;i; i%.; 0; 0i&.o; ;i;i;i; i&.; 0; 0i'.o; ;i;i;i; i'.; 0; 0i(.o; ;i;i;i; i(.; 0; 0i).o; ;i;i;i; i).; 0; 0i*.o; ;i;i;i; i*.; 0; 0i+.o; ;i;i;i; i+.; 0; 0i,.o; ;i;i;i; i,.; 0; 0i-.o; ;i;i;i; i-.; 0; 0i..o; ;i;i;i; i..; 0; 0i/.o; ;i;i;i; i/.; 0; 0i0.o; ;i;i;i; i0.; 0; 0i1.o; ;i;i;i; i1.; 0; 0i2.o; ;i;i;i; i2.; 0; 0i3.o; ;i;i;i; i3.; 0; 0i4.o; ;i;i;i; i4.; 0; 0i5.o; ;i;i;i; i5.; 0; 0i6.o; ;i;i;i; i6.; 0; 0i7.o; ;i;i;i; i7.; 0; 0i8.o; ;i;i;i; i8.; 0; 0i9.o; ;i;i;i; i9.; 0; 0i:.o; ;i;i;i; i:.; 0; 0i;.o; ;i;i;i; i;.; 0; 0i<.o; ;i;i;i; i<.; 0; 0i=.o; ;i;i;i; i=.; 0; 0i>.o; ;i;i;i; i>.; 0; 0i?.o; ;i;i;i; i?.; 0; 0i@.o; ;i;i;i; i@.; 0; 0iA.o; ;i;i;i; iA.; 0; 0iB.o; ;i;i;i; iB.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; I" compat; T; [iki.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; 0; 0i.o; ;i;i;i; i.; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [i(Ni/o; ;i;i;i; i/; I" compat; T; [i6Ni/o; ;i;i;i; i/; I" compat; T; [i?Ni/o; ;i;i;i; i/; I" compat; T; [iYNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi/o; ;i;i;i; i/; I" compat; T; [iNi /o; ;i;i;i; i /; I" compat; T; [i?Qi /o; ;i;i;i; i /; I" compat; T; [ieQi /o; ;i;i;i; i /; I" compat; T; [ikQi /o; ;i;i;i; i /; I" compat; T; [iQi /o; ;i;i;i; i /; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iRi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [i8Si/o; ;i;i;i; i/; I" compat; T; [iASi/o; ;i;i;i; i/; I" compat; T; [i\Si/o; ;i;i;i; i/; I" compat; T; [iiSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iSi/o; ;i;i;i; i/; I" compat; T; [iVi/o; ;i;i;i; i/; I" compat; T; [iWi /o; ;i;i;i; i /; I" compat; T; [iXi!/o; ;i;i;i; i!/; I" compat; T; [iYi"/o; ;i;i;i; i"/; I" compat; T; [i Yi#/o; ;i;i;i; i#/; I" compat; T; [iYi$/o; ;i;i;i; i$/; I" compat; T; [i'Yi%/o; ;i;i;i; i%/; I" compat; T; [isYi&/o; ;i;i;i; i&/; I" compat; T; [iP[i'/o; ;i;i;i; i'/; I" compat; T; [i[i(/o; ;i;i;i; i(/; I" compat; T; [i[i)/o; ;i;i;i; i)/; I" compat; T; [i\i*/o; ;i;i;i; i*/; I" compat; T; [i"\i+/o; ;i;i;i; i+/; I" compat; T; [i8\i,/o; ;i;i;i; i,/; I" compat; T; [in\i-/o; ;i;i;i; i-/; I" compat; T; [iq\i./o; ;i;i;i; i./; I" compat; T; [i]i//o; ;i;i;i; i//; I" compat; T; [i]i0/o; ;i;i;i; i0/; I" compat; T; [i]i1/o; ;i;i;i; i1/; I" compat; T; [i]i2/o; ;i;i;i; i2/; I" compat; T; [ir^i3/o; ;i;i;i; i3/; I" compat; T; [iz^i4/o; ;i;i;i; i4/; I" compat; T; [i^i5/o; ;i;i;i; i5/; I" compat; T; [i^i6/o; ;i;i;i; i6/; I" compat; T; [i^i7/o; ;i;i;i; i7/; I" compat; T; [i _i8/o; ;i;i;i; i8/; I" compat; T; [i_i9/o; ;i;i;i; i9/; I" compat; T; [iP_i:/o; ;i;i;i; i:/; I" compat; T; [ia_i;/o; ;i;i;i; i;/; I" compat; T; [is_i/o; ;i;i;i; i>/; I" compat; T; [i6bi?/o; ;i;i;i; i?/; I" compat; T; [iKbi@/o; ;i;i;i; i@/; I" compat; T; [i/eiA/o; ;i;i;i; iA/; I" compat; T; [i4eiB/o; ;i;i;i; iB/; I" compat; T; [ieiC/o; ;i;i;i; iC/; I" compat; T; [ieiD/o; ;i;i;i; iD/; I" compat; T; [ieiE/o; ;i;i;i; iE/; I" compat; T; [ieiF/o; ;i;i;i; iF/; I" compat; T; [ieiG/o; ;i;i;i; iG/; I" compat; T; [ieiH/o; ;i;i;i; iH/; I" compat; T; [ifiI/o; ;i;i;i; iI/; I" compat; T; [igiJ/o; ;i;i;i; iJ/; I" compat; T; [i(giK/o; ;i;i;i; iK/; I" compat; T; [i kiL/o; ;i;i;i; iL/; I" compat; T; [ibkiM/o; ;i;i;i; iM/; I" compat; T; [iykiN/o; ;i;i;i; iN/; I" compat; T; [ikiO/o; ;i;i;i; iO/; I" compat; T; [ikiP/o; ;i;i;i; iP/; I" compat; T; [ikiQ/o; ;i;i;i; iQ/; I" compat; T; [ikiR/o; ;i;i;i; iR/; I" compat; T; [iliS/o; ;i;i;i; iS/; I" compat; T; [iliT/o; ;i;i;i; iT/; I" compat; T; [i4liU/o; ;i;i;i; iU/; I" compat; T; [ikpiV/o; ;i;i;i; iV/; I" compat; T; [i*riW/o; ;i;i;i; iW/; I" compat; T; [i6riX/o; ;i;i;i; iX/; I" compat; T; [i;riY/o; ;i;i;i; iY/; I" compat; T; [i?riZ/o; ;i;i;i; iZ/; I" compat; T; [iGri[/o; ;i;i;i; i[/; I" compat; T; [iYri\/o; ;i;i;i; i\/; I" compat; T; [i[ri]/o; ;i;i;i; i]/; I" compat; T; [iri^/o; ;i;i;i; i^/; I" compat; T; [isi_/o; ;i;i;i; i_/; I" compat; T; [isi`/o; ;i;i;i; i`/; I" compat; T; [itia/o; ;i;i;i; ia/; I" compat; T; [itib/o; ;i;i;i; ib/; I" compat; T; [iuic/o; ;i;i;i; ic/; I" compat; T; [iuid/o; ;i;i;i; id/; I" compat; T; [i(uie/o; ;i;i;i; ie/; I" compat; T; [i0uif/o; ;i;i;i; if/; I" compat; T; [iuig/o; ;i;i;i; ig/; I" compat; T; [iuih/o; ;i;i;i; ih/; I" compat; T; [ivvii/o; ;i;i;i; ii/; I" compat; T; [i}vij/o; ;i;i;i; ij/; I" compat; T; [ivik/o; ;i;i;i; ik/; I" compat; T; [ivil/o; ;i;i;i; il/; I" compat; T; [ivim/o; ;i;i;i; im/; I" compat; T; [iwin/o; ;i;i;i; in/; I" compat; T; [iwio/o; ;i;i;i; io/; I" compat; T; [iwip/o; ;i;i;i; ip/; I" compat; T; [i:yiq/o; ;i;i;i; iq/; I" compat; T; [iyir/o; ;i;i;i; ir/; I" compat; T; [iyis/o; ;i;i;i; is/; I" compat; T; [itzit/o; ;i;i;i; it/; I" compat; T; [iziu/o; ;i;i;i; iu/; I" compat; T; [iziv/o; ;i;i;i; iv/; I" compat; T; [is|iw/o; ;i;i;i; iw/; I" compat; T; [i|ix/o; ;i;i;i; ix/; I" compat; T; [i6iy/o; ;i;i;i; iy/; I" compat; T; [iQiz/o; ;i;i;i; iz/; I" compat; T; [ii{/o; ;i;i;i; i{/; I" compat; T; [ii|/o; ;i;i;i; i|/; I" compat; T; [ii}/o; ;i;i;i; i}/; I" compat; T; [i i~/o; ;i;i;i; i~/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i3i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ini/o; ;i;i;i; i/; I" compat; T; [iri/o; ;i;i;i; i/; I" compat; T; [ixi/o; ;i;i;i; i/; I" compat; T; [iMi/o; ;i;i;i; i/; I" compat; T; [iki/o; ;i;i;i; i/; I" compat; T; [i@i/o; ;i;i;i; i/; I" compat; T; [iLi/o; ;i;i;i; i/; I" compat; T; [ici/o; ;i;i;i; i/; I" compat; T; [i~i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i҉i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [i7i/o; ;i;i;i; i/; I" compat; T; [iFi/o; ;i;i;i; i/; I" compat; T; [iUi/o; ;i;i;i; i/; I" compat; T; [ixi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [idi/o; ;i;i;i; i/; I" compat; T; [ipi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iʎi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iIi/o; ;i;i;i; i/; I" compat; T; [iƑi/o; ;i;i;i; i/; I" compat; T; [ȋi/o; ;i;i;i; i/; I" compat; T; [iёi/o; ;i;i;i; i/; I" compat; T; [iwi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iQi/o; ;i;i;i; i/; I" compat; T; [i^i/o; ;i;i;i; i/; I" compat; T; [ibi/o; ;i;i;i; i/; I" compat; T; [iii/o; ;i;i;i; i/; I" compat; T; [i˗i/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iۘi/o; ;i;i;i; i/; I" compat; T; [iߘi/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [ii/o; ;i;i;i; i/; I" compat; T; [iؚi/o; ;i;i;i; i/; I" compat; T; [iߚi/o; ;i;i;i; i/; I" compat; T; [i%i/o; ;i;i;i; i/; I" compat; T; [i/i/o; ;i;i;i; i/; I" compat; T; [i2i/o; ;i;i;i; i/; I" compat; T; [i0o; ;i;i;i; i>0; 0; 0i?0o; ;i;i;i; i?0; 0; 0iA0o; ;i;i;i; iA0; 0; 0iB0o; ;i;i;i; iB0; 0; 0iC0o; ;i;i;i; iC0; 0; 0iD0o; ;i;i;i; iD0; 0; 0iE0o; ;i;i;i; iE0; 0; 0iF0o; ;i;i;i; iF0; 0; 0iG0o; ;i;i;i; iG0; 0; 0iH0o; ;i;i;i; iH0; 0; 0iI0o; ;i;i;i; iI0; 0; 0iJ0o; ;i;i;i; iJ0; 0; 0iK0o; ;i;i;i; iK0; 0; 0iL0o; ;i;i;i; iL0; 0; [iK0i0iM0o; ;i;i;i; iM0; 0; 0iN0o; ;i;i;i; iN0; 0; [iM0i0iO0o; ;i;i;i; iO0; 0; 0iP0o; ;i;i;i; iP0; 0; [iO0i0iQ0o; ;i;i;i; iQ0; 0; 0iR0o; ;i;i;i; iR0; 0; [iQ0i0iS0o; ;i;i;i; iS0; 0; 0iT0o; ;i;i;i; iT0; 0; [iS0i0iU0o; ;i;i;i; iU0; 0; 0iV0o; ;i;i;i; iV0; 0; [iU0i0iW0o; ;i;i;i; iW0; 0; 0iX0o; ;i;i;i; iX0; 0; [iW0i0iY0o; ;i;i;i; iY0; 0; 0iZ0o; ;i;i;i; iZ0; 0; [iY0i0i[0o; ;i;i;i; i[0; 0; 0i\0o; ;i;i;i; i\0; 0; [i[0i0i]0o; ;i;i;i; i]0; 0; 0i^0o; ;i;i;i; i^0; 0; [i]0i0i_0o; ;i;i;i; i_0; 0; 0i`0o; ;i;i;i; i`0; 0; [i_0i0ia0o; ;i;i;i; ia0; 0; 0ib0o; ;i;i;i; ib0; 0; [ia0i0ic0o; ;i;i;i; ic0; 0; 0id0o; ;i;i;i; id0; 0; 0ie0o; ;i;i;i; ie0; 0; [id0i0if0o; ;i;i;i; if0; 0; 0ig0o; ;i;i;i; ig0; 0; [if0i0ih0o; ;i;i;i; ih0; 0; 0ii0o; ;i;i;i; ii0; 0; [ih0i0ij0o; ;i;i;i; ij0; 0; 0ik0o; ;i;i;i; ik0; 0; 0il0o; ;i;i;i; il0; 0; 0im0o; ;i;i;i; im0; 0; 0in0o; ;i;i;i; in0; 0; 0io0o; ;i;i;i; io0; 0; 0ip0o; ;i;i;i; ip0; 0; [io0i0iq0o; ;i;i;i; iq0; 0; [io0i0ir0o; ;i;i;i; ir0; 0; 0is0o; ;i;i;i; is0; 0; [ir0i0it0o; ;i;i;i; it0; 0; [ir0i0iu0o; ;i;i;i; iu0; 0; 0iv0o; ;i;i;i; iv0; 0; [iu0i0iw0o; ;i;i;i; iw0; 0; [iu0i0ix0o; ;i;i;i; ix0; 0; 0iy0o; ;i;i;i; iy0; 0; [ix0i0iz0o; ;i;i;i; iz0; 0; [ix0i0i{0o; ;i;i;i; i{0; 0; 0i|0o; ;i;i;i; i|0; 0; [i{0i0i}0o; ;i;i;i; i}0; 0; [i{0i0i~0o; ;i;i;i; i~0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [iF0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i ;i;i; i0; 0; 0i0o; ;i ;i;i; i0; 0; 0i0o; ;i;i;i; i0; I" compat; T; [i%i0i0o; ;i;i;i; i0; I" compat; T; [i%i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; I" vertical; T; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; [i0i0i0o; ;i;i;i; i0; I" vertical; T; [i0i0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i!1o; ;i;i;i; i!1; 0; 0i"1o; ;i;i;i; i"1; 0; 0i#1o; ;i;i;i; i#1; 0; 0i$1o; ;i;i;i; i$1; 0; 0i%1o; ;i;i;i; i%1; 0; 0i&1o; ;i;i;i; i&1; 0; 0i'1o; ;i;i;i; i'1; 0; 0i(1o; ;i;i;i; i(1; 0; 0i)1o; ;i;i;i; i)1; 0; 0i*1o; ;i;i;i; i*1; 0; 0i+1o; ;i;i;i; i+1; 0; 0i,1o; ;i;i;i; i,1; 0; 0i-1o; ;i;i;i; i-1; 0; 0i11o; ;i;i;i; i11; I" compat; T; [ii21o; ;i;i;i; i21; I" compat; T; [ii31o; ;i;i;i; i31; I" compat; T; [ii41o; ;i;i;i; i41; I" compat; T; [ii51o; ;i;i;i; i51; I" compat; T; [ii61o; ;i;i;i; i61; I" compat; T; [ii71o; ;i;i;i; i71; I" compat; T; [ii81o; ;i;i;i; i81; I" compat; T; [ii91o; ;i;i;i; i91; I" compat; T; [ii:1o; ;i;i;i; i:1; I" compat; T; [ii;1o; ;i;i;i; i;1; I" compat; T; [ii<1o; ;i;i;i; i<1; I" compat; T; [ii=1o; ;i;i;i; i=1; I" compat; T; [ii>1o; ;i;i;i; i>1; I" compat; T; [ii?1o; ;i;i;i; i?1; I" compat; T; [ii@1o; ;i;i;i; i@1; I" compat; T; [iiA1o; ;i;i;i; iA1; I" compat; T; [iiB1o; ;i;i;i; iB1; I" compat; T; [iiC1o; ;i;i;i; iC1; I" compat; T; [iiD1o; ;i;i;i; iD1; I" compat; T; [i!iE1o; ;i;i;i; iE1; I" compat; T; [i iF1o; ;i;i;i; iF1; I" compat; T; [i iG1o; ;i;i;i; iG1; I" compat; T; [i iH1o; ;i;i;i; iH1; I" compat; T; [i iI1o; ;i;i;i; iI1; I" compat; T; [i iJ1o; ;i;i;i; iJ1; I" compat; T; [iiK1o; ;i;i;i; iK1; I" compat; T; [iiL1o; ;i;i;i; iL1; I" compat; T; [iiM1o; ;i;i;i; iM1; I" compat; T; [iiN1o; ;i;i;i; iN1; I" compat; T; [iiO1o; ;i;i;i; iO1; I" compat; T; [iaiP1o; ;i;i;i; iP1; I" compat; T; [ibiQ1o; ;i;i;i; iQ1; I" compat; T; [iciR1o; ;i;i;i; iR1; I" compat; T; [idiS1o; ;i;i;i; iS1; I" compat; T; [ieiT1o; ;i;i;i; iT1; I" compat; T; [ifiU1o; ;i;i;i; iU1; I" compat; T; [igiV1o; ;i;i;i; iV1; I" compat; T; [ihiW1o; ;i;i;i; iW1; I" compat; T; [iiiX1o; ;i;i;i; iX1; I" compat; T; [ijiY1o; ;i;i;i; iY1; I" compat; T; [ikiZ1o; ;i;i;i; iZ1; I" compat; T; [ili[1o; ;i;i;i; i[1; I" compat; T; [imi\1o; ;i;i;i; i\1; I" compat; T; [ini]1o; ;i;i;i; i]1; I" compat; T; [ioi^1o; ;i;i;i; i^1; I" compat; T; [ipi_1o; ;i;i;i; i_1; I" compat; T; [iqi`1o; ;i;i;i; i`1; I" compat; T; [iria1o; ;i;i;i; ia1; I" compat; T; [isib1o; ;i;i;i; ib1; I" compat; T; [itic1o; ;i;i;i; ic1; I" compat; T; [iuid1o; ;i;i;i; id1; I" compat; T; [i`ie1o; ;i;i;i; ie1; I" compat; T; [iif1o; ;i;i;i; if1; I" compat; T; [iig1o; ;i;i;i; ig1; I" compat; T; [iih1o; ;i;i;i; ih1; I" compat; T; [iii1o; ;i;i;i; ii1; I" compat; T; [iij1o; ;i;i;i; ij1; I" compat; T; [iik1o; ;i;i;i; ik1; I" compat; T; [iil1o; ;i;i;i; il1; I" compat; T; [iim1o; ;i;i;i; im1; I" compat; T; [iin1o; ;i;i;i; in1; I" compat; T; [iio1o; ;i;i;i; io1; I" compat; T; [iip1o; ;i;i;i; ip1; I" compat; T; [iiq1o; ;i;i;i; iq1; I" compat; T; [iir1o; ;i;i;i; ir1; I" compat; T; [iis1o; ;i;i;i; is1; I" compat; T; [i it1o; ;i;i;i; it1; I" compat; T; [i"iu1o; ;i;i;i; iu1; I" compat; T; [i#iv1o; ;i;i;i; iv1; I" compat; T; [i'iw1o; ;i;i;i; iw1; I" compat; T; [i)ix1o; ;i;i;i; ix1; I" compat; T; [i+iy1o; ;i;i;i; iy1; I" compat; T; [i,iz1o; ;i;i;i; iz1; I" compat; T; [i-i{1o; ;i;i;i; i{1; I" compat; T; [i.i|1o; ;i;i;i; i|1; I" compat; T; [i/i}1o; ;i;i;i; i}1; I" compat; T; [i2i~1o; ;i;i;i; i~1; I" compat; T; [i6i1o; ;i;i;i; i1; I" compat; T; [i@i1o; ;i;i;i; i1; I" compat; T; [iGi1o; ;i;i;i; i1; I" compat; T; [iLi1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [iWi1o; ;i;i;i; i1; I" compat; T; [iXi1o; ;i;i;i; i1; I" compat; T; [iYi1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; I" compat; T; [ii1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [iVi1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [i-Ni1o; ;i;i;i; i1; I" super; T; [i Ni1o; ;i;i;i; i1; I" super; T; [i2ui1o; ;i;i;i; i1; I" super; T; [iYNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; I" super; T; [i)Yi1o; ;i;i;i; i1; I" super; T; [i0Wi1o; ;i;i;i; i1; I" super; T; [iNi1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i2o; ;i;i;i; i2; I" compat; T; [i-i i.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i 2o; ;i;i;i; i 2; I" compat; T; [i-ii.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-i iai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-iiai.i2o; ;i;i;i; i2; I" compat; T; [ i-i ini.i2o; ;i;i;i; i2; I" compat; T; [ i-i iii ieii.i2o; ;i;i;i; i2; I" compat; T; [ i-i iiiini.i 2o; ;i;i;i; i 2; I" compat; T; [i-iNi.i!2o; ;i;i;i; i!2; I" compat; T; [i-iNi.i"2o; ;i;i;i; i"2; I" compat; T; [i-i Ni.i#2o; ;i;i;i; i#2; I" compat; T; [i-iVi.i$2o; ;i;i;i; i$2; I" compat; T; [i-iNi.i%2o; ;i;i;i; i%2; I" compat; T; [i-imQi.i&2o; ;i;i;i; i&2; I" compat; T; [i-iNi.i'2o; ;i;i;i; i'2; I" compat; T; [i-ikQi.i(2o; ;i;i;i; i(2; I" compat; T; [i-i]Ni.i)2o; ;i;i;i; i)2; I" compat; T; [i-iASi.i*2o; ;i;i;i; i*2; I" compat; T; [i-igi.i+2o; ;i;i;i; i+2; I" compat; T; [i-ikpi.i,2o; ;i;i;i; i,2; I" compat; T; [i-i4li.i-2o; ;i;i;i; i-2; I" compat; T; [i-i(gi.i.2o; ;i;i;i; i.2; I" compat; T; [i-iёi.i/2o; ;i;i;i; i/2; I" compat; T; [i-iWi.i02o; ;i;i;i; i02; I" compat; T; [i-iei.i12o; ;i;i;i; i12; I" compat; T; [i-i*hi.i22o; ;i;i;i; i22; I" compat; T; [i-i gi.i32o; ;i;i;i; i32; I" compat; T; [i-i>yi.i42o; ;i;i;i; i42; I" compat; T; [i-i Ti.i52o; ;i;i;i; i52; I" compat; T; [i-iyri.i62o; ;i;i;i; i62; I" compat; T; [i-ii.i72o; ;i;i;i; i72; I" compat; T; [i-i]yi.i82o; ;i;i;i; i82; I" compat; T; [i-iRi.i92o; ;i;i;i; i92; I" compat; T; [i-iNi.i:2o; ;i;i;i; i:2; I" compat; T; [i-i|Ti.i;2o; ;i;i;i; i;2; I" compat; T; [i-if[i.i<2o; ;i;i;i; i<2; I" compat; T; [i-ivi.i=2o; ;i;i;i; i=2; I" compat; T; [i-iOi.i>2o; ;i;i;i; i>2; I" compat; T; [i-inji.i?2o; ;i;i;i; i?2; I" compat; T; [i-iTSi.i@2o; ;i;i;i; i@2; I" compat; T; [i-imyi.iA2o; ;i;i;i; iA2; I" compat; T; [i-iOi.iB2o; ;i;i;i; iB2; I" compat; T; [i-ii.iC2o; ;i;i;i; iC2; I" compat; T; [i-ii.iD2o; ;i;i;i; iD2; I" circle; T; [iOUiE2o; ;i;i;i; iE2; I" circle; T; [i|^iF2o; ;i;i;i; iF2; I" circle; T; [ieiG2o; ;i;i;i; iG2; I" circle; T; [i{iH2o; ;i;i;i; iH2; 0; 0iI2o; ;i;i;i; iI2; 0; 0iJ2o; ;i;i;i; iJ2; 0; 0iK2o; ;i;i;i; iK2; 0; 0iL2o; ;i;i;i; iL2; 0; 0iM2o; ;i;i;i; iM2; 0; 0iN2o; ;i;i;i; iN2; 0; 0iO2o; ;i;i;i; iO2; 0; 0iP2o; ;i;i;i; iP2; I" square; T; [iUiYiJiQ2o; ;i;i;i; iQ2; I" circle; T; [i7i6iR2o; ;i;i;i; iR2; I" circle; T; [i7i7iS2o; ;i;i;i; iS2; I" circle; T; [i7i8iT2o; ;i;i;i; iT2; I" circle; T; [i7i9iU2o; ;i;i;i; iU2; I" circle; T; [i7i:iV2o; ;i;i;i; iV2; I" circle; T; [i7i;iW2o; ;i;i;i; iW2; I" circle; T; [i7iiZ2o; ;i;i;i; iZ2; I" circle; T; [i8i5i[2o; ;i;i;i; i[2; I" circle; T; [i8i6i\2o; ;i;i;i; i\2; I" circle; T; [i8i7i]2o; ;i;i;i; i]2; I" circle; T; [i8i8i^2o; ;i;i;i; i^2; I" circle; T; [i8i9i_2o; ;i;i;i; i_2; I" circle; T; [i8i:i`2o; ;i;i;i; i`2; I" circle; T; [iia2o; ;i;i;i; ia2; I" circle; T; [iib2o; ;i;i;i; ib2; I" circle; T; [iic2o; ;i;i;i; ic2; I" circle; T; [iid2o; ;i;i;i; id2; I" circle; T; [iie2o; ;i;i;i; ie2; I" circle; T; [iif2o; ;i;i;i; if2; I" circle; T; [i ig2o; ;i;i;i; ig2; I" circle; T; [i ih2o; ;i;i;i; ih2; I" circle; T; [i ii2o; ;i;i;i; ii2; I" circle; T; [iij2o; ;i;i;i; ij2; I" circle; T; [iik2o; ;i;i;i; ik2; I" circle; T; [iil2o; ;i;i;i; il2; I" circle; T; [iim2o; ;i;i;i; im2; I" circle; T; [iin2o; ;i;i;i; in2; I" circle; T; [iiaio2o; ;i;i;i; io2; I" circle; T; [iiaip2o; ;i;i;i; ip2; I" circle; T; [iiaiq2o; ;i;i;i; iq2; I" circle; T; [iiair2o; ;i;i;i; ir2; I" circle; T; [iiais2o; ;i;i;i; is2; I" circle; T; [iiait2o; ;i;i;i; it2; I" circle; T; [i iaiu2o; ;i;i;i; iu2; I" circle; T; [i iaiv2o; ;i;i;i; iv2; I" circle; T; [i iaiw2o; ;i;i;i; iw2; I" circle; T; [iiaix2o; ;i;i;i; ix2; I" circle; T; [iiaiy2o; ;i;i;i; iy2; I" circle; T; [iiaiz2o; ;i;i;i; iz2; I" circle; T; [iiai{2o; ;i;i;i; i{2; I" circle; T; [iiai|2o; ;i;i;i; i|2; I" circle; T; [ iiaiiiii}2o; ;i;i;i; i}2; I" circle; T; [ i ini iti~2o; ;i;i;i; i~2; I" circle; T; [i ini2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [iVi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [imQi2o; ;i;i;i; i2; I" circle; T; [iNi2o; ;i;i;i; i2; I" circle; T; [ikQi2o; ;i;i;i; i2; I" circle; T; [i]Ni2o; ;i;i;i; i2; I" circle; T; [iASi2o; ;i;i;i; i2; I" circle; T; [igi2o; ;i;i;i; i2; I" circle; T; [ikpi2o; ;i;i;i; i2; I" circle; T; [i4li2o; ;i;i;i; i2; I" circle; T; [i(gi2o; ;i;i;i; i2; I" circle; T; [iёi2o; ;i;i;i; i2; I" circle; T; [iWi2o; ;i;i;i; i2; I" circle; T; [iei2o; ;i;i;i; i2; I" circle; T; [i*hi2o; ;i;i;i; i2; I" circle; T; [i gi2o; ;i;i;i; i2; I" circle; T; [i>yi2o; ;i;i;i; i2; I" circle; T; [i Ti2o; ;i;i;i; i2; I" circle; T; [iyri2o; ;i;i;i; i2; I" circle; T; [ii2o; ;i;i;i; i2; I" circle; T; [i]yi2o; ;i;i;i; i2; I" circle; T; [iRi2o; ;i;i;i; i2; I" circle; T; [iyi2o; ;i;i;i; i2; I" circle; T; [i7ui2o; ;i;i;i; i2; I" circle; T; [isYi2o; ;i;i;i; i2; I" circle; T; [iii2o; ;i;i;i; i2; I" circle; T; [i*Qi2o; ;i;i;i; i2; I" circle; T; [ipSi2o; ;i;i;i; i2; I" circle; T; [ili2o; ;i;i;i; i2; I" circle; T; [ii2o; ;i;i;i; i2; I" circle; T; [iOi2o; ;i;i;i; i2; I" circle; T; [iQi2o; ;i;i;i; i2; I" circle; T; [icki2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [i-Ni2o; ;i;i;i; i2; I" circle; T; [i Ni2o; ;i;i;i; i2; I" circle; T; [i]i2o; ;i;i;i; i2; I" circle; T; [iSi2o; ;i;i;i; i2; I" circle; T; [i;Si2o; ;i;i;i; i2; I" circle; T; [i[i2o; ;i;i;i; i2; I" circle; T; [if[i2o; ;i;i;i; i2; I" circle; T; [ivi2o; ;i;i;i; i2; I" circle; T; [iOi2o; ;i;i;i; i2; I" circle; T; [inji2o; ;i;i;i; i2; I" circle; T; [iTSi2o; ;i;i;i; i2; I" circle; T; [iYi2o; ;i;i;i; i2; I" circle; T; [i8i;i2o; ;i;i;i; i2; I" circle; T; [i8ii2o; ;i;i;i; i2; I" circle; T; [i9i5i2o; ;i;i;i; i2; I" circle; T; [i9i6i2o; ;i;i;i; i2; I" circle; T; [i9i7i2o; ;i;i;i; i2; I" circle; T; [i9i8i2o; ;i;i;i; i2; I" circle; T; [i9i9i2o; ;i;i;i; i2; I" circle; T; [i9i:i2o; ;i;i;i; i2; I" circle; T; [i9i;i2o; ;i;i;i; i2; I" circle; T; [i9ii2o; ;i;i;i; i2; I" circle; T; [i:i5i2o; ;i;i;i; i2; I" compat; T; [i6igi2o; ;i;i;i; i2; I" compat; T; [i7igi2o; ;i;i;i; i2; I" compat; T; [i8igi2o; ;i;i;i; i2; I" compat; T; [i9igi2o; ;i;i;i; i2; I" compat; T; [i:igi2o; ;i;i;i; i2; I" compat; T; [i;igi2o; ;i;i;i; i2; I" compat; T; [iigi2o; ;i;i;i; i2; I" compat; T; [i6i5igi2o; ;i;i;i; i2; I" compat; T; [i6i6igi2o; ;i;i;i; i2; I" compat; T; [i6i7igi2o; ;i;i;i; i2; I" square; T; [iMili2o; ;i;i;i; i2; I" square; T; [ijiwili2o; ;i;i;i; i2; I" square; T; [iji[i2o; ;i;i;i; i2; I" square; T; [iQiYiIi2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i2o; ;i;i;i; i2; I" circle; T; [i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [i0i0i0i3o; ;i;i;i; i3; I" square; T; [ i0i0i0i0i 3o; ;i;i;i; i 3; I" square; T; [ i0i0i0i0i0i!3o; ;i;i;i; i!3; I" square; T; [ i0i0i0i0i"3o; ;i;i;i; i"3; I" square; T; [i0i0i0i#3o; ;i;i;i; i#3; I" square; T; [i0i0i0i$3o; ;i;i;i; i$3; I" square; T; [i0i0i0i%3o; ;i;i;i; i%3; I" square; T; [i0i0i&3o; ;i;i;i; i&3; I" square; T; [i0i0i'3o; ;i;i;i; i'3; I" square; T; [i0i0i(3o; ;i;i;i; i(3; I" square; T; [i0i0i)3o; ;i;i;i; i)3; I" square; T; [i0i0i0i*3o; ;i;i;i; i*3; I" square; T; [i0i0i0i+3o; ;i;i;i; i+3; I" square; T; [ i0i0i0i0i0i,3o; ;i;i;i; i,3; I" square; T; [i0i0i0i-3o; ;i;i;i; i-3; I" square; T; [ i0i0i0i0i.3o; ;i;i;i; i.3; I" square; T; [ i0i0i0i0i0i/3o; ;i;i;i; i/3; I" square; T; [i0i0i0i03o; ;i;i;i; i03; I" square; T; [i0i0i13o; ;i;i;i; i13; I" square; T; [i0i0i23o; ;i;i;i; i23; I" square; T; [ i0i0i0i0i0i33o; ;i;i;i; i33; I" square; T; [ i0i0i0i0i43o; ;i;i;i; i43; I" square; T; [ i0i0i0i0i0i53o; ;i;i;i; i53; I" square; T; [i0i0i0i63o; ;i;i;i; i63; I" square; T; [ i0i0i0i0i0i73o; ;i;i;i; i73; I" square; T; [i0i0i83o; ;i;i;i; i83; I" square; T; [i0i0i0i93o; ;i;i;i; i93; I" square; T; [i0i0i0i:3o; ;i;i;i; i:3; I" square; T; [i0i0i0i;3o; ;i;i;i; i;3; I" square; T; [i0i0i0i<3o; ;i;i;i; i<3; I" square; T; [i0i0i0i=3o; ;i;i;i; i=3; I" square; T; [ i0i0i0i0i>3o; ;i;i;i; i>3; I" square; T; [i0i0i0i?3o; ;i;i;i; i?3; I" square; T; [i0i0i@3o; ;i;i;i; i@3; I" square; T; [i0i0i0iA3o; ;i;i;i; iA3; I" square; T; [i0i0i0iB3o; ;i;i;i; iB3; I" square; T; [i0i0i0iC3o; ;i;i;i; iC3; I" square; T; [ i0i0i0i0iD3o; ;i;i;i; iD3; I" square; T; [i0i0i0iE3o; ;i;i;i; iE3; I" square; T; [i0i0i0iF3o; ;i;i;i; iF3; I" square; T; [i0i0i0iG3o; ;i;i;i; iG3; I" square; T; [ i0i0i0i0i0iH3o; ;i;i;i; iH3; I" square; T; [ i0i0i0i0iI3o; ;i;i;i; iI3; I" square; T; [i0i0iJ3o; ;i;i;i; iJ3; I" square; T; [ i0i0i0i0i0iK3o; ;i;i;i; iK3; I" square; T; [i0i0iL3o; ;i;i;i; iL3; I" square; T; [ i0i0i0i0iM3o; ;i;i;i; iM3; I" square; T; [ i0i0i0i0iN3o; ;i;i;i; iN3; I" square; T; [i0i0i0iO3o; ;i;i;i; iO3; I" square; T; [i0i0i0iP3o; ;i;i;i; iP3; I" square; T; [i0i0i0iQ3o; ;i;i;i; iQ3; I" square; T; [ i0i0i0i0iR3o; ;i;i;i; iR3; I" square; T; [i0i0iS3o; ;i;i;i; iS3; I" square; T; [i0i0i0iT3o; ;i;i;i; iT3; I" square; T; [ i0i0i0i0iU3o; ;i;i;i; iU3; I" square; T; [i0i0iV3o; ;i;i;i; iV3; I" square; T; [ i0i0i0i0i0iW3o; ;i;i;i; iW3; I" square; T; [i0i0i0iX3o; ;i;i;i; iX3; I" compat; T; [i5ipiY3o; ;i;i;i; iY3; I" compat; T; [i6ipiZ3o; ;i;i;i; iZ3; I" compat; T; [i7ipi[3o; ;i;i;i; i[3; I" compat; T; [i8ipi\3o; ;i;i;i; i\3; I" compat; T; [i9ipi]3o; ;i;i;i; i]3; I" compat; T; [i:ipi^3o; ;i;i;i; i^3; I" compat; T; [i;ipi_3o; ;i;i;i; i_3; I" compat; T; [iipib3o; ;i;i;i; ib3; I" compat; T; [i6i5ipic3o; ;i;i;i; ic3; I" compat; T; [i6i6ipid3o; ;i;i;i; id3; I" compat; T; [i6i7ipie3o; ;i;i;i; ie3; I" compat; T; [i6i8ipif3o; ;i;i;i; if3; I" compat; T; [i6i9ipig3o; ;i;i;i; ig3; I" compat; T; [i6i:ipih3o; ;i;i;i; ih3; I" compat; T; [i6i;ipii3o; ;i;i;i; ii3; I" compat; T; [i6iipil3o; ;i;i;i; il3; I" compat; T; [i7i5ipim3o; ;i;i;i; im3; I" compat; T; [i7i6ipin3o; ;i;i;i; in3; I" compat; T; [i7i7ipio3o; ;i;i;i; io3; I" compat; T; [i7i8ipip3o; ;i;i;i; ip3; I" compat; T; [i7i9ipiq3o; ;i;i;i; iq3; I" square; T; [imiUifir3o; ;i;i;i; ir3; I" square; T; [iiifis3o; ;i;i;i; is3; I" square; T; [iFiZit3o; ;i;i;i; it3; I" square; T; [igifiwiu3o; ;i;i;i; iu3; I" square; T; [iti[iv3o; ;i;i;i; iv3; I" square; T; [iuihiw3o; ;i;i;i; iw3; I" square; T; [iiirix3o; ;i;i;i; ix3; I" square; T; [iiiriiy3o; ;i;i;i; iy3; I" square; T; [iiiriiz3o; ;i;i;i; iz3; I" square; T; [iNiZi{3o; ;i;i;i; i{3; I" square; T; [is^ibi|3o; ;i;i;i; i|3; I" square; T; [i-fiTi}3o; ;i;i;i; i}3; I" square; T; [i'Yicki~3o; ;i;i;i; i~3; I" square; T; [ifili3o; ;i;i;i; i3; I" square; T; [ i*hi_iOi>yi3o; ;i;i;i; i3; I" square; T; [iuiFi3o; ;i;i;i; i3; I" square; T; [isiFi3o; ;i;i;i; i3; I" square; T; [iiFi3o; ;i;i;i; i3; I" square; T; [iriFi3o; ;i;i;i; i3; I" square; T; [ipiFi3o; ;i;i;i; i3; I" square; T; [iPiGi3o; ;i;i;i; i3; I" square; T; [iRiGi3o; ;i;i;i; i3; I" square; T; [iLiGi3o; ;i;i;i; i3; I" square; T; [ihifiqi3o; ;i;i;i; i3; I" square; T; [ ipihifiqi3o; ;i;i;i; i3; I" square; T; [iuiKi3o; ;i;i;i; i3; I" square; T; [isiKi3o; ;i;i;i; i3; I" square; T; [iiKi3o; ;i;i;i; i3; I" square; T; [iili3o; ;i;i;i; i3; I" square; T; [irili3o; ;i;i;i; i3; I" square; T; [ipili3o; ;i;i;i; i3; I" square; T; [iMii3o; ;i;i;i; i3; I" square; T; [ipiMii3o; ;i;i;i; i3; I" square; T; [iRiMii3o; ;i;i;i; i3; I" square; T; [iLiMii3o; ;i;i;i; i3; I" square; T; [iYiMii3o; ;i;i;i; i3; I" square; T; [ii!i3o; ;i;i;i; i3; I" square; T; [iri!i3o; ;i;i;i; i3; I" square; T; [iii!i3o; ;i;i;i; i3; I" square; T; [ipi!i3o; ;i;i;i; i3; I" square; T; [ikiri3o; ;i;i;i; i3; I" square; T; [isiri3o; ;i;i;i; i3; I" square; T; [iiri3o; ;i;i;i; i3; I" square; T; [iriri3o; ;i;i;i; i3; I" square; T; [ihiri3o; ;i;i;i; i3; I" square; T; [ipiri3o; ;i;i;i; i3; I" square; T; [iririi3o; ;i;i;i; i3; I" square; T; [ihirii3o; ;i;i;i; i3; I" square; T; [irii3o; ;i;i;i; i3; I" square; T; [ipirii3o; ;i;i;i; i3; I" square; T; [iririi3o; ;i;i;i; i3; I" square; T; [ihirii3o; ;i;i;i; i3; I" square; T; [irii3o; ;i;i;i; i3; I" square; T; [ipirii3o; ;i;i;i; i3; I" square; T; [iri"ixi3o; ;i;i;i; i3; I" square; T; [ iri"ixii3o; ;i;i;i; i3; I" square; T; [iUifi3o; ;i;i;i; i3; I" square; T; [ipiUifi3o; ;i;i;i; i3; I" square; T; [iRiUifi3o; ;i;i;i; i3; I" square; T; [iLiUifi3o; ;i;i;i; i3; I" square; T; [iwifiii3o; ;i;i;i; i3; I" square; T; [ iwifiii"ixi3o; ;i;i;i; i3; I" square; T; [ iwifiii"ixii3o; ;i;i;i; i3; I" square; T; [iuixi3o; ;i;i;i; i3; I" square; T; [isixi3o; ;i;i;i; i3; I" square; T; [iixi3o; ;i;i;i; i3; I" square; T; [irixi3o; ;i;i;i; i3; I" square; T; [iui[i3o; ;i;i;i; i3; I" square; T; [isi[i3o; ;i;i;i; i3; I" square; T; [ii[i3o; ;i;i;i; i3; I" square; T; [iri[i3o; ;i;i;i; i3; I" square; T; [ipi[i3o; ;i;i;i; i3; I" square; T; [iRi[i3o; ;i;i;i; i3; I" square; T; [iui\i3o; ;i;i;i; i3; I" square; T; [isi\i3o; ;i;i;i; i3; I" square; T; [ii\i3o; ;i;i;i; i3; I" square; T; [iri\i3o; ;i;i;i; i3; I" square; T; [ipi\i3o; ;i;i;i; i3; I" square; T; [iRi\i3o; ;i;i;i; i3; I" square; T; [ipii3o; ;i;i;i; i3; I" square; T; [iRii3o; ;i;i;i; i3; I" square; T; [ ifi3iri3i3o; ;i;i;i; i3; I" square; T; [iGivi3o; ;i;i;i; i3; I" square; T; [ihihi3o; ;i;i;i; i3; I" square; T; [ihiii3o; ;i;i;i; i3; I" square; T; [ iHi"ipili3o; ;i;i;i; i3; I" square; T; [iHiti3i3o; ;i;i;i; i3; I" square; T; [iiiGi3o; ;i;i;i; i3; I" square; T; [iLi~i3o; ;i;i;i; i3; I" square; T; [imifi3o; ;i;i;i; i3; I" square; T; [iMiUi3o; ;i;i;i; i3; I" square; T; [inisi3o; ;i;i;i; i3; I" square; T; [iPiPi3o; ;i;i;i; i3; I" square; T; [iPiRi3o; ;i;i;i; i3; I" square; T; [ipiyi3o; ;i;i;i; i3; I" square; T; [iqiri3o; ;i;i;i; i3; I" square; T; [iqisi3o; ;i;i;i; i3; I" square; T; [iqitili3o; ;i;i;i; i3; I" square; T; [iqi}i3o; ;i;i;i; i3; I" square; T; [irigi3o; ;i;i;i; i3; I" square; T; [iriniqi3o; ;i;i;i; i3; I" square; T; [iritiqi3o; ;i;i;i; i3; I" square; T; [iUiMi3o; ;i;i;i; i3; I" square; T; [ iui3iri3i3o; ;i;i;i; i3; I" square; T; [iUiUiRi3o; ;i;i;i; i3; I" square; T; [iUiWi3o; ;i;i;i; i3; I" square; T; [ixiwi3o; ;i;i;i; i3; I" square; T; [iXi{i3o; ;i;i;i; i3; I" square; T; [i\igi3o; ;i;i;i; i3; I" square; T; [i[i"iri3o; ;i;i;i; i3; I" square; T; [iFi"iri3o; ;i;i;i; i3; I" compat; T; [i6iei3o; ;i;i;i; i3; I" compat; T; [i7iei3o; ;i;i;i; i3; I" compat; T; [i8iei3o; ;i;i;i; i3; I" compat; T; [i9iei3o; ;i;i;i; i3; I" compat; T; [i:iei3o; ;i;i;i; i3; I" compat; T; [i;iei3o; ;i;i;i; i3; I" compat; T; [iiei3o; ;i;i;i; i3; I" compat; T; [i6i5iei3o; ;i;i;i; i3; I" compat; T; [i6i6iei3o; ;i;i;i; i3; I" compat; T; [i6i7iei3o; ;i;i;i; i3; I" compat; T; [i6i8iei3o; ;i;i;i; i3; I" compat; T; [i6i9iei3o; ;i;i;i; i3; I" compat; T; [i6i:iei3o; ;i;i;i; i3; I" compat; T; [i6i;iei3o; ;i;i;i; i3; I" compat; T; [i6iiei3o; ;i;i;i; i3; I" compat; T; [i7i5iei3o; ;i;i;i; i3; I" compat; T; [i7i6iei3o; ;i;i;i; i3; I" compat; T; [i7i7iei3o; ;i;i;i; i3; I" compat; T; [i7i8iei3o; ;i;i;i; i3; I" compat; T; [i7i9iei3o; ;i;i;i; i3; I" compat; T; [i7i:iei3o; ;i;i;i; i3; I" compat; T; [i7i;iei3o; ;i;i;i; i3; I" compat; T; [i7iiei3o; ;i;i;i; i3; I" compat; T; [i8i5iei3o; ;i;i;i; i3; I" compat; T; [i8i6iei3o; ;i;i;i; i3; I" square; T; [ilifiqi4o; ;i;i;i; i4; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0i̟o; ;i;i;i; i̟; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0iào; ;i;i;i; ià; 0; 0iĠo; ;i;i;i; iĠ; 0; 0iŠo; ;i;i;i; iŠ; 0; 0iƠo; ;i;i;i; iƠ; 0; 0iǠo; ;i;i;i; iǠ; 0; 0iȠo; ;i;i;i; iȠ; 0; 0iɠo; ;i;i;i; iɠ; 0; 0iʠo; ;i;i;i; iʠ; 0; 0iˠo; ;i;i;i; iˠ; 0; 0i̠o; ;i;i;i; i̠; 0; 0i͠o; ;i;i;i; i͠; 0; 0iΠo; ;i;i;i; iΠ; 0; 0iϠo; ;i;i;i; iϠ; 0; 0iРo; ;i;i;i; iР; 0; 0iѠo; ;i;i;i; iѠ; 0; 0iҠo; ;i;i;i; iҠ; 0; 0iӠo; ;i;i;i; iӠ; 0; 0iԠo; ;i;i;i; iԠ; 0; 0iՠo; ;i;i;i; iՠ; 0; 0i֠o; ;i;i;i; i֠; 0; 0iנo; ;i;i;i; iנ; 0; 0iؠo; ;i;i;i; iؠ; 0; 0i٠o; ;i;i;i; i٠; 0; 0iڠo; ;i;i;i; iڠ; 0; 0i۠o; ;i;i;i; i۠; 0; 0iܠo; ;i;i;i; iܠ; 0; 0iݠo; ;i;i;i; iݠ; 0; 0iޠo; ;i;i;i; iޠ; 0; 0iߠo; ;i;i;i; iߠ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¡o; ;i;i;i; i¡; 0; 0iáo; ;i;i;i; iá; 0; 0iġo; ;i;i;i; iġ; 0; 0išo; ;i;i;i; iš; 0; 0iơo; ;i;i;i; iơ; 0; 0iǡo; ;i;i;i; iǡ; 0; 0iȡo; ;i;i;i; iȡ; 0; 0iɡo; ;i;i;i; iɡ; 0; 0iʡo; ;i;i;i; iʡ; 0; 0iˡo; ;i;i;i; iˡ; 0; 0i̡o; ;i;i;i; i̡; 0; 0i͡o; ;i;i;i; i͡; 0; 0iΡo; ;i;i;i; iΡ; 0; 0iϡo; ;i;i;i; iϡ; 0; 0iСo; ;i;i;i; iС; 0; 0iѡo; ;i;i;i; iѡ; 0; 0iҡo; ;i;i;i; iҡ; 0; 0iӡo; ;i;i;i; iӡ; 0; 0iԡo; ;i;i;i; iԡ; 0; 0iաo; ;i;i;i; iա; 0; 0i֡o; ;i;i;i; i֡; 0; 0iסo; ;i;i;i; iס; 0; 0iءo; ;i;i;i; iء; 0; 0i١o; ;i;i;i; i١; 0; 0iڡo; ;i;i;i; iڡ; 0; 0iۡo; ;i;i;i; iۡ; 0; 0iܡo; ;i;i;i; iܡ; 0; 0iݡo; ;i;i;i; iݡ; 0; 0iޡo; ;i;i;i; iޡ; 0; 0iߡo; ;i;i;i; iߡ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¢o; ;i;i;i; i¢; 0; 0iâo; ;i;i;i; iâ; 0; 0iĢo; ;i;i;i; iĢ; 0; 0iŢo; ;i;i;i; iŢ; 0; 0iƢo; ;i;i;i; iƢ; 0; 0iǢo; ;i;i;i; iǢ; 0; 0iȢo; ;i;i;i; iȢ; 0; 0iɢo; ;i;i;i; iɢ; 0; 0iʢo; ;i;i;i; iʢ; 0; 0iˢo; ;i;i;i; iˢ; 0; 0i̢o; ;i;i;i; i̢; 0; 0i͢o; ;i;i;i; i͢; 0; 0i΢o; ;i;i;i; i΢; 0; 0iϢo; ;i;i;i; iϢ; 0; 0iТo; ;i;i;i; iТ; 0; 0iѢo; ;i;i;i; iѢ; 0; 0iҢo; ;i;i;i; iҢ; 0; 0iӢo; ;i;i;i; iӢ; 0; 0iԢo; ;i;i;i; iԢ; 0; 0iբo; ;i;i;i; iբ; 0; 0i֢o; ;i;i;i; i֢; 0; 0iעo; ;i;i;i; iע; 0; 0iآo; ;i;i;i; iآ; 0; 0i٢o; ;i;i;i; i٢; 0; 0iڢo; ;i;i;i; iڢ; 0; 0iۢo; ;i;i;i; iۢ; 0; 0iܢo; ;i;i;i; iܢ; 0; 0iݢo; ;i;i;i; iݢ; 0; 0iޢo; ;i;i;i; iޢ; 0; 0iߢo; ;i;i;i; iߢ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i£o; ;i;i;i; i£; 0; 0ião; ;i;i;i; iã; 0; 0iģo; ;i;i;i; iģ; 0; 0iţo; ;i;i;i; iţ; 0; 0iƣo; ;i;i;i; iƣ; 0; 0iǣo; ;i;i;i; iǣ; 0; 0iȣo; ;i;i;i; iȣ; 0; 0iɣo; ;i;i;i; iɣ; 0; 0iʣo; ;i;i;i; iʣ; 0; 0iˣo; ;i;i;i; iˣ; 0; 0ịo; ;i;i;i; ị; 0; 0iͣo; ;i;i;i; iͣ; 0; 0iΣo; ;i;i;i; iΣ; 0; 0iϣo; ;i;i;i; iϣ; 0; 0iУo; ;i;i;i; iУ; 0; 0iѣo; ;i;i;i; iѣ; 0; 0iңo; ;i;i;i; iң; 0; 0iӣo; ;i;i;i; iӣ; 0; 0iԣo; ;i;i;i; iԣ; 0; 0iգo; ;i;i;i; iգ; 0; 0i֣o; ;i;i;i; i֣; 0; 0iףo; ;i;i;i; iף; 0; 0iأo; ;i;i;i; iأ; 0; 0i٣o; ;i;i;i; i٣; 0; 0iڣo; ;i;i;i; iڣ; 0; 0iۣo; ;i;i;i; iۣ; 0; 0iܣo; ;i;i;i; iܣ; 0; 0iݣo; ;i;i;i; iݣ; 0; 0iޣo; ;i;i;i; iޣ; 0; 0iߣo; ;i;i;i; iߣ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¤o; ;i;i;i; i¤; 0; 0iäo; ;i;i;i; iä; 0; 0iĤo; ;i;i;i; iĤ; 0; 0iŤo; ;i;i;i; iŤ; 0; 0iƤo; ;i;i;i; iƤ; 0; 0iФo; ;i;i;i; iФ; 0; 0iѤo; ;i;i;i; iѤ; 0; 0iҤo; ;i;i;i; iҤ; 0; 0iӤo; ;i;i;i; iӤ; 0; 0iԤo; ;i;i;i; iԤ; 0; 0iդo; ;i;i;i; iդ; 0; 0i֤o; ;i;i;i; i֤; 0; 0iפo; ;i;i;i; iפ; 0; 0iؤo; ;i;i;i; iؤ; 0; 0i٤o; ;i;i;i; i٤; 0; 0iڤo; ;i;i;i; iڤ; 0; 0iۤo; ;i;i;i; iۤ; 0; 0iܤo; ;i;i;i; iܤ; 0; 0iݤo; ;i;i;i; iݤ; 0; 0iޤo; ;i;i;i; iޤ; 0; 0iߤo; ;i;i;i; iߤ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¥o; ;i;i;i; i¥; 0; 0iåo; ;i;i;i; iå; 0; 0iĥo; ;i;i;i; iĥ; 0; 0iťo; ;i;i;i; iť; 0; 0iƥo; ;i;i;i; iƥ; 0; 0iǥo; ;i;i;i; iǥ; 0; 0iȥo; ;i;i;i; iȥ; 0; 0iɥo; ;i;i;i; iɥ; 0; 0iʥo; ;i;i;i; iʥ; 0; 0i˥o; ;i;i;i; i˥; 0; 0i̥o; ;i;i;i; i̥; 0; 0iͥo; ;i;i;i; iͥ; 0; 0iΥo; ;i;i;i; iΥ; 0; 0iϥo; ;i;i;i; iϥ; 0; 0iХo; ;i;i;i; iХ; 0; 0iѥo; ;i;i;i; iѥ; 0; 0iҥo; ;i;i;i; iҥ; 0; 0iӥo; ;i;i;i; iӥ; 0; 0iԥo; ;i;i;i; iԥ; 0; 0iեo; ;i;i;i; iե; 0; 0i֥o; ;i;i;i; i֥; 0; 0iץo; ;i;i;i; iץ; 0; 0iإo; ;i;i;i; iإ; 0; 0i٥o; ;i;i;i; i٥; 0; 0iڥo; ;i;i;i; iڥ; 0; 0iۥo; ;i;i;i; iۥ; 0; 0iܥo; ;i;i;i; iܥ; 0; 0iݥo; ;i;i;i; iݥ; 0; 0iޥo; ;i;i;i; iޥ; 0; 0iߥo; ;i;i;i; iߥ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i@o; ;i;i;iA; i@; 0; 0iAo; ;i;i@;i; iA; 0; 0iBo; ;i;i;iC; iB; 0; 0iCo; ;i;iB;i; iC; 0; 0iDo; ;i;i;iE; iD; 0; 0iEo; ;i;iD;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;i;iQ; iP; 0; 0iQo; ;i;iP;i; iQ; 0; 0iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; 0iUo; ;i;iT;i; iU; 0; 0iVo; ;i;i;iW; iV; 0; 0iWo; ;i;iV;i; iW; 0; 0iXo; ;i;i;iY; iX; 0; 0iYo; ;i;iX;i; iY; 0; 0iZo; ;i;i;i[; iZ; 0; 0i[o; ;i;iZ;i; i[; 0; 0i\o; ;i;i;i]; i\; 0; 0i]o; ;i;i\;i; i]; 0; 0i^o; ;i;i;i_; i^; 0; 0i_o; ;i;i^;i; i_; 0; 0i`o; ;i;i;ia; i`; 0; 0iao; ;i;i`;i; ia; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [iJio; ;i;i;i; i; I" super; T; [iLio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¦o; ;i;i;i; i¦; 0; 0iæo; ;i;i;i; iæ; 0; 0iĦo; ;i;i;i; iĦ; 0; 0iŦo; ;i;i;i; iŦ; 0; 0iƦo; ;i;i;i; iƦ; 0; 0iǦo; ;i;i;i; iǦ; 0; 0iȦo; ;i;i;i; iȦ; 0; 0iɦo; ;i;i;i; iɦ; 0; 0iʦo; ;i;i;i; iʦ; 0; 0i˦o; ;i;i;i; i˦; 0; 0i̦o; ;i;i;i; i̦; 0; 0iͦo; ;i;i;i; iͦ; 0; 0iΦo; ;i;i;i; iΦ; 0; 0iϦo; ;i;i;i; iϦ; 0; 0iЦo; ;i;i;i; iЦ; 0; 0iѦo; ;i;i;i; iѦ; 0; 0iҦo; ;i;i;i; iҦ; 0; 0iӦo; ;i;i;i; iӦ; 0; 0iԦo; ;i;i;i; iԦ; 0; 0iզo; ;i;i;i; iզ; 0; 0i֦o; ;i;i;i; i֦; 0; 0iצo; ;i;i;i; iצ; 0; 0iئo; ;i;i;i; iئ; 0; 0i٦o; ;i;i;i; i٦; 0; 0iڦo; ;i;i;i; iڦ; 0; 0iۦo; ;i;i;i; iۦ; 0; 0iܦo; ;i;i;i; iܦ; 0; 0iݦo; ;i;i;i; iݦ; 0; 0iަo; ;i;i;i; iަ; 0; 0iߦo; ;i;i;i; iߦ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i#; i"; 0; 0i#o; ;i;i";i; i#; 0; 0i$o; ;i;i;i%; i$; 0; 0i%o; ;i;i$;i; i%; 0; 0i&o; ;i;i;i'; i&; 0; 0i'o; ;i;i&;i; i'; 0; 0i(o; ;i;i;i); i(; 0; 0i)o; ;i;i(;i; i); 0; 0i*o; ;i;i;i+; i*; 0; 0i+o; ;i;i*;i; i+; 0; 0i,o; ;i;i;i-; i,; 0; 0i-o; ;i;i,;i; i-; 0; 0i.o; ;i;i;i/; i.; 0; 0i/o; ;i;i.;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i3; i2; 0; 0i3o; ;i;i2;i; i3; 0; 0i4o; ;i;i;i5; i4; 0; 0i5o; ;i;i4;i; i5; 0; 0i6o; ;i;i;i7; i6; 0; 0i7o; ;i;i6;i; i7; 0; 0i8o; ;i;i;i9; i8; 0; 0i9o; ;i;i8;i; i9; 0; 0i:o; ;i;i;i;; i:; 0; 0i;o; ;i;i:;i; i;; 0; 0io; ;i;i;i?; i>; 0; 0i?o; ;i;i>;i; i?; 0; 0i@o; ;i;i;iA; i@; 0; 0iAo; ;i;i@;i; iA; 0; 0iBo; ;i;i;iC; iB; 0; 0iCo; ;i;iB;i; iC; 0; 0iDo; ;i;i;iE; iD; 0; 0iEo; ;i;iD;i; iE; 0; 0iFo; ;i;i;iG; iF; 0; 0iGo; ;i;iF;i; iG; 0; 0iHo; ;i;i;iI; iH; 0; 0iIo; ;i;iH;i; iI; 0; 0iJo; ;i;i;iK; iJ; 0; 0iKo; ;i;iJ;i; iK; 0; 0iLo; ;i;i;iM; iL; 0; 0iMo; ;i;iL;i; iM; 0; 0iNo; ;i;i;iO; iN; 0; 0iOo; ;i;iN;i; iO; 0; 0iPo; ;i;i;iQ; iP; 0; 0iQo; ;i;iP;i; iQ; 0; 0iRo; ;i;i;iS; iR; 0; 0iSo; ;i;iR;i; iS; 0; 0iTo; ;i;i;iU; iT; 0; 0iUo; ;i;iT;i; iU; 0; 0iVo; ;i;i;iW; iV; 0; 0iWo; ;i;iV;i; iW; 0; 0iXo; ;i;i;iY; iX; 0; 0iYo; ;i;iX;i; iY; 0; 0iZo; ;i;i;i[; iZ; 0; 0i[o; ;i;iZ;i; i[; 0; 0i\o; ;i;i;i]; i\; 0; 0i]o; ;i;i\;i; i]; 0; 0i^o; ;i;i;i_; i^; 0; 0i_o; ;i;i^;i; i_; 0; 0i`o; ;i;i;ia; i`; 0; 0iao; ;i;i`;i; ia; 0; 0ibo; ;i;i;ic; ib; 0; 0ico; ;i;ib;i; ic; 0; 0ido; ;i;i;ie; id; 0; 0ieo; ;i;id;i; ie; 0; 0ifo; ;i;i;ig; if; 0; 0igo; ;i;if;i; ig; 0; 0iho; ;i;i;ii; ih; 0; 0iio; ;i;ih;i; ii; 0; 0ijo; ;i;i;ik; ij; 0; 0iko; ;i;ij;i; ik; 0; 0ilo; ;i;i;im; il; 0; 0imo; ;i;il;i; im; 0; 0ino; ;i;i;io; in; 0; 0ioo; ;i;in;i; io; 0; 0ipo; ;i;i;i; ip; I" super; T; [ioiqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;iz; iy; 0; 0izo; ;i;iy;i; iz; 0; 0i{o; ;i;i;i|; i{; 0; 0i|o; ;i;i{;i; i|; 0; 0i}o; ;i;i;iy; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i~;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;ie; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;if; i; 0; 0io; ;i;i;i\; i; 0; 0io; ;i;i;ia; i; 0; 0io; ;i;i;il; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" super; T; [i&io; ;i;i;i; i; I" super; T; [iSio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i¨o; ;i;i;i; i¨; 0; 0ièo; ;i;i;i; iè; 0; 0iĨo; ;i;i;i; iĨ; 0; 0iΨo; ;i;i;i; iΨ; 0; 0iϨo; ;i;i;i; iϨ; 0; 0iШo; ;i;i;i; iШ; 0; 0iѨo; ;i;i;i; iѨ; 0; 0iҨo; ;i;i;i; iҨ; 0; 0iӨo; ;i;i;i; iӨ; 0; 0iԨo; ;i;i;i; iԨ; 0; 0iըo; ;i;i;i; iը; 0; 0i֨o; ;i;i;i; i֨; 0; 0iרo; ;i;i;i; iר; 0; 0iبo; ;i;i;i; iب; 0; 0i٨o; ;i;i;i; i٨; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i©o; ;i;i;i; i©; 0; 0iéo; ;i;i;i; ié; 0; 0iĩo; ;i;i;i; iĩ; 0; 0iũo; ;i;i;i; iũ; 0; 0iƩo; ;i;i;i; iƩ; 0; 0iǩo; ;i;i;i; iǩ; 0; 0iȩo; ;i;i;i; iȩ; 0; 0iɩo; ;i;i;i; iɩ; 0; 0iʩo; ;i;i;i; iʩ; 0; 0i˩o; ;i;i;i; i˩; 0; 0i̩o; ;i;i;i; i̩; 0; 0iͩo; ;i;i;i; iͩ; 0; 0iϩo; ;i;i;i; iϩ; 0; 0iЩo; ;i;i;i; iЩ; 0; 0iѩo; ;i;i;i; iѩ; 0; 0iҩo; ;i;i;i; iҩ; 0; 0iөo; ;i;i;i; iө; 0; 0iԩo; ;i;i;i; iԩ; 0; 0iթo; ;i;i;i; iթ; 0; 0i֩o; ;i;i;i; i֩; 0; 0iשo; ;i;i;i; iש; 0; 0iةo; ;i;i;i; iة; 0; 0i٩o; ;i;i;i; i٩; 0; 0iީo; ;i;i;i; iީ; 0; 0iߩo; ;i;i;i; iߩ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0iªo; ;i;i;i; iª; 0; 0i۪o; ;i;i;i; i۪; 0; 0iܪo; ;i;i;i; iܪ; 0; 0iݪo; ;i;i;i; iݪ; 0; 0iުo; ;i;i;i; iު; 0; 0iߪo; ;i;i;i; iߪ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; I" super; T; [i'i]o; ;i;i;i; i]; I" super; T; [i7i^o; ;i;i;i; i^; I" super; T; [iki_o; ;i;i;i; i_; I" super; T; [iRido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i«o; ;i;i;i; i«; 0; 0iëo; ;i;i;i; ië; 0; 0iīo; ;i;i;i; iī; 0; 0iūo; ;i;i;i; iū; 0; 0iƫo; ;i;i;i; iƫ; 0; 0iǫo; ;i;i;i; iǫ; 0; 0iȫo; ;i;i;i; iȫ; 0; 0iɫo; ;i;i;i; iɫ; 0; 0iʫo; ;i;i;i; iʫ; 0; 0i˫o; ;i;i;i; i˫; 0; 0i̫o; ;i;i;i; i̫; 0; 0iͫo; ;i;i;i; iͫ; 0; 0iΫo; ;i;i;i; iΫ; 0; 0iϫo; ;i;i;i; iϫ; 0; 0iЫo; ;i;i;i; iЫ; 0; 0iѫo; ;i;i;i; iѫ; 0; 0iҫo; ;i;i;i; iҫ; 0; 0iӫo; ;i;i;i; iӫ; 0; 0iԫo; ;i;i;i; iԫ; 0; 0iիo; ;i;i;i; iի; 0; 0i֫o; ;i;i;i; i֫; 0; 0i׫o; ;i;i;i; i׫; 0; 0iثo; ;i;i;i; iث; 0; 0i٫o; ;i;i;i; i٫; 0; 0iګo; ;i;i;i; iګ; 0; 0i۫o; ;i;i;i; i۫; 0; 0iܫo; ;i;i;i; iܫ; 0; 0iݫo; ;i;i;i; iݫ; 0; 0iޫo; ;i;i;i; iޫ; 0; 0i߫o; ;i;i;i; i߫; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iHio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iʎio; ;i;i;i; i; 0; [iȌio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i2Nio; ;i;i;i; i; 0; [iSio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ii o; ;i;i;i; i ; 0; [iQYi o; ;i;i;i; i ; 0; [iёi o; ;i;i;i; i ; 0; [iUi o; ;i;i;i; i ; 0; [iHYi o; ;i;i;i; i ; 0; [iaio; ;i;i;i; i; 0; [iivio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i?io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iuSio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [i-i o; ;i;i;i; i ; 0; [ii!o; ;i;i;i; i!; 0; [iP]i"o; ;i;i;i; i"; 0; [ioi#o; ;i;i;i; i#; 0; [iͅi$o; ;i;i;i; i$; 0; [idi%o; ;i;i;i; i%; 0; [ibi&o; ;i;i;i; i&; 0; [i؁i'o; ;i;i;i; i'; 0; [ii(o; ;i;i;i; i(; 0; [i^i)o; ;i;i;i; i); 0; [igi*o; ;i;i;i; i*; 0; [ijmi+o; ;i;i;i; i+; 0; [iri,o; ;i;i;i; i,; 0; [iΐi-o; ;i;i;i; i-; 0; [iOi.o; ;i;i;i; i.; 0; [iQi/o; ;i;i;i; i/; 0; [iRi0o; ;i;i;i; i0; 0; [idi1o; ;i;i;i; i1; 0; [iji2o; ;i;i;i; i2; 0; [iri3o; ;i;i;i; i3; 0; [ivi4o; ;i;i;i; i4; 0; [ii5o; ;i;i;i; i5; 0; [ii6o; ;i;i;i; i6; 0; [i\i7o; ;i;i;i; i7; 0; [ii8o; ;i;i;i; i8; 0; [i2i9o; ;i;i;i; i9; 0; [ioi:o; ;i;i;i; i:; 0; [ii;o; ;i;i;i; i;; 0; [ixio; ;i;i;i; i>; 0; [iɃi?o; ;i;i;i; i?; 0; [ii@o; ;i;i;i; i@; 0; [iiAo; ;i;i;i; iA; 0; [i֊iBo; ;i;i;i; iB; 0; [iXiCo; ;i;i;i; iC; 0; [i_iDo; ;i;i;i; iD; 0; [i`|iEo; ;i;i;i; iE; 0; [i~iFo; ;i;i;i; iF; 0; [ibriGo; ;i;i;i; iG; 0; [ixiHo; ;i;i;i; iH; 0; [iŒiIo; ;i;i;i; iI; 0; [iiJo; ;i;i;i; iJ; 0; [iXiKo; ;i;i;i; iK; 0; [ib\iLo; ;i;i;i; iL; 0; [ijiMo; ;i;i;i; iM; 0; [imiNo; ;i;i;i; iN; 0; [ioiOo; ;i;i;i; iO; 0; [i/}iPo; ;i;i;i; iP; 0; [i7~iQo; ;i;i;i; iQ; 0; [iKiRo; ;i;i;i; iR; 0; [iRiSo; ;i;i;i; iS; 0; [iiTo; ;i;i;i; iT; 0; [iQiUo; ;i;i;i; iU; 0; [iQiVo; ;i;i;i; iV; 0; [iziWo; ;i;i;i; iW; 0; [i}iXo; ;i;i;i; iX; 0; [iiYo; ;i;i;i; iY; 0; [iuiZo; ;i;i;i; iZ; 0; [ii[o; ;i;i;i; i[; 0; [ibi\o; ;i;i;i; i\; 0; [iji]o; ;i;i;i; i]; 0; [ii^o; ;i;i;i; i^; 0; [i9Ni_o; ;i;i;i; i_; 0; [i[i`o; ;i;i;i; i`; 0; [i`iao; ;i;i;i; ia; 0; [isibo; ;i;i;i; ib; 0; [ipuico; ;i;i;i; ic; 0; [iSido; ;i;i;i; id; 0; [ixieo; ;i;i;i; ie; 0; [iOifo; ;i;i;i; if; 0; [i_igo; ;i;i;i; ig; 0; [i Niho; ;i;i;i; ih; 0; [iliio; ;i;i;i; ii; 0; [ixeijo; ;i;i;i; ij; 0; [i"}iko; ;i;i;i; ik; 0; [iSilo; ;i;i;i; il; 0; [i^Ximo; ;i;i;i; im; 0; [iwino; ;i;i;i; in; 0; [iIioo; ;i;i;i; io; 0; [iipo; ;i;i;i; ip; 0; [ikiqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [iliso; ;i;i;i; is; 0; [ibito; ;i;i;i; it; 0; [iiuo; ;i;i;i; iu; 0; [icivo; ;i;i;i; iv; 0; [ieuiwo; ;i;i;i; iw; 0; [iNixo; ;i;i;i; ix; 0; [iiQiyo; ;i;i;i; iy; 0; [iQizo; ;i;i;i; iz; 0; [ihi{o; ;i;i;i; i{; 0; [i|i|o; ;i;i;i; i|; 0; [ioi}o; ;i;i;i; i}; 0; [iҊi~o; ;i;i;i; i~; 0; [iϑio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iBTio; ;i;i;i; i; 0; [isYio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i*yio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iΞio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iwkio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [it^io; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [i#oio; ;i;i;i; i; 0; [iIqio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i&io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i#io; ;i;i;i; i; 0; [iJio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [iˆio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i{cio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [i>|io; ;i;i;i; i; 0; [iusio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iVio; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [iitio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iFio; ;i;i;i; i; 0; [i4io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iHio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iPio; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [i?\io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [iBvio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i.io; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i{gio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i tio; ;i;i;i; i; 0; [iYuio; ;i;i;i; i; 0; [ikxio; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [imQio; ;i;i;i; i; 0; [i.bio; ;i;i;i; i; 0; [ixio; ;i;i;i; i; 0; [i+Pio; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [i*io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [iDaio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [isio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i)Rio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [ie\io; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iNgio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [ilio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iuio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iψio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ȋio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i?Sio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [iTio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [itio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iWio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [izio; ;i;i;i; i; 0; [i {io; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [iXio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [i6io; ;i;i;i; i; 0; [i:Rio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [i[io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iLi o; ;i;i;i; i ; 0; [iMi o; ;i;i;i; i ; 0; [ii o; ;i;i;i; i ; 0; [i^i o; ;i;i;i; i ; 0; [i@Qi o; ;i;i;i; i ; 0; [iUio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iZXio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [itfio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [i*sio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [io; ;i;i;i; i>; 0; [ihai?o; ;i;i;i; i?; 0; [iai@o; ;i;i;i; i@; 0; [iaiAo; ;i;i;i; iA; 0; [iOeiBo; ;i;i;i; iB; 0; [ieiCo; ;i;i;i; iC; 0; [ifiDo; ;i;i;i; iD; 0; [ihiEo; ;i;i;i; iE; 0; [iwmiFo; ;i;i;i; iF; 0; [iniGo; ;i;i;i; iG; 0; [i"oiHo; ;i;i;i; iH; 0; [inqiIo; ;i;i;i; iI; 0; [i+riJo; ;i;i;i; iJ; 0; [i"tiKo; ;i;i;i; iK; 0; [ixiLo; ;i;i;i; iL; 0; [i>yiMo; ;i;i;i; iM; 0; [iIyiNo; ;i;i;i; iN; 0; [iHyiOo; ;i;i;i; iO; 0; [iPyiPo; ;i;i;i; iP; 0; [iVyiQo; ;i;i;i; iQ; 0; [i]yiRo; ;i;i;i; iR; 0; [iyiSo; ;i;i;i; iS; 0; [iyiTo; ;i;i;i; iT; 0; [i@ziUo; ;i;i;i; iU; 0; [iziVo; ;i;i;i; iV; 0; [i{iWo; ;i;i;i; iW; 0; [i}iXo; ;i;i;i; iX; 0; [i ~iYo; ;i;i;i; iY; 0; [iA~iZo; ;i;i;i; iZ; 0; [iri[o; ;i;i;i; i[; 0; [ii\o; ;i;i;i; i\; 0; [ii]o; ;i;i;i; i]; 0; [iyi^o; ;i;i;i; i^; 0; [iyi_o; ;i;i;i; i_; 0; [iWi`o; ;i;i;i; i`; 0; [iiao; ;i;i;i; ia; 0; [iibo; ;i;i;i; ib; 0; [iico; ;i;i;i; ic; 0; [i9ido; ;i;i;i; id; 0; [iӌieo; ;i;i;i; ie; 0; [iifo; ;i;i;i; if; 0; [iigo; ;i;i;i; ig; 0; [i8iho; ;i;i;i; ih; 0; [iiio; ;i;i;i; ii; 0; [iijo; ;i;i;i; ij; 0; [i;iko; ;i;i;i; ik; 0; [iu`ilo; ;i;i;i; il; 0; [iBimo; ;i;i;i; im; 0; [iipo; ;i;i;i; ip; 0; [i&Niqo; ;i;i;i; iq; 0; [iQiro; ;i;i;i; ir; 0; [ihQiso; ;i;i;i; is; 0; [iOito; ;i;i;i; it; 0; [iEQiuo; ;i;i;i; iu; 0; [iQivo; ;i;i;i; iv; 0; [iRiwo; ;i;i;i; iw; 0; [iRixo; ;i;i;i; ix; 0; [iUiyo; ;i;i;i; iy; 0; [iUUizo; ;i;i;i; iz; 0; [iUi{o; ;i;i;i; i{; 0; [iUi|o; ;i;i;i; i|; 0; [iZXi}o; ;i;i;i; i}; 0; [iXi~o; ;i;i;i; i~; 0; [iDYio; ;i;i;i; i; 0; [iTYio; ;i;i;i; i; 0; [ibZio; ;i;i;i; i; 0; [i([io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [ii_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iNaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [i`aio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [i4bio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [iRdio; ;i;i;i; i; 0; [iVeio; ;i;i;i; i; 0; [itfio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iVgio; ;i;i;i; i; 0; [iykio; ;i;i;i; i; 0; [ikio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [inio; ;i;i;i; i; 0; [i"oio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [inqio; ;i;i;i; i; 0; [iwio; ;i;i;i; i; 0; [i5rio; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [i*sio; ;i;i;i; i; 0; [iqtio; ;i;i;i; i; 0; [iuio; ;i;i;i; i; 0; [i;uio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [iJwio; ;i;i;i; i; 0; [i@wio; ;i;i;i; i; 0; [ixio; ;i;i;i; i; 0; [izio; ;i;i;i; i; 0; [i{io; ;i;i;i; i; 0; [i{|io; ;i;i;i; i; 0; [i[}io; ;i;i;i; i; 0; [i}io; ;i;i;i; i; 0; [i>io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iyio; ;i;i;i; i; 0; [iAio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iˊio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i9io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [irio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ivio; ;i;i;i; i; 0; [i|io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iVio; ;i;i;i; i; 0; [iۗio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i io; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iJ(io; ;i;i;i; i; 0; [iD(io; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [i@io; ;i;i;i; i; 0; [i9@io; ;i;i;i; i; 0; [iIRio; ;i;i;i; i; 0; [i\io; ;i;i;i; i; 0; [i~io; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [iio; ;i;i;i; i; I" compat; T; [ikikio; ;i;i;i; i; I" compat; T; [ikinio; ;i;i;i; i; I" compat; T; [ikiqio; ;i;i;i; i; I" compat; T; [ikikinio; ;i;i;i; i; I" compat; T; [ikikiqio; ;i;i;i; i; I" compat; T; [iiyio; ;i;i;i; i; I" compat; T; [ixiyio; ;i;i;i; i; I" compat; T; [itivio; ;i;i;i; i; I" compat; T; [itieio; ;i;i;i; i; I" compat; T; [itikio; ;i;i;i; i; I" compat; T; [i~ivio; ;i;i;i; i; I" compat; T; [itimio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iii o; ;i;i;i; i ; I" font; T; [ii!o; ;i;i;i; i!; I" font; T; [ii"o; ;i;i;i; i"; I" font; T; [ii#o; ;i;i;i; i#; I" font; T; [ii$o; ;i;i;i; i$; I" font; T; [ii%o; ;i;i;i; i%; I" font; T; [ii&o; ;i;i;i; i&; I" font; T; [ii'o; ;i;i;i; i'; I" font; T; [ii(o; ;i;i;i; i(; I" font; T; [ii)o; ;i;i;i; i); I" font; T; [i0i*o; ;i;i;i; i*; 0; [iii+o; ;i;i;i; i+; 0; [iii,o; ;i;i;i; i,; 0; [iIii-o; ;i;i;i; i-; 0; [iIii.o; ;i;i;i; i.; 0; [iii/o; ;i;i;i; i/; 0; [iii0o; ;i;i;i; i0; 0; [iii1o; ;i;i;i; i1; 0; [iii2o; ;i;i;i; i2; 0; [iii3o; ;i;i;i; i3; 0; [iii4o; ;i;i;i; i4; 0; [iii5o; ;i;i;i; i5; 0; [iii6o; ;i;i;i; i6; 0; [iii8o; ;i;i;i; i8; 0; [iii9o; ;i;i;i; i9; 0; [iii:o; ;i;i;i; i:; 0; [iii;o; ;i;i;i; i;; 0; [iiio; ;i;i;i; i>; 0; [iii@o; ;i;i;i; i@; 0; [iiiAo; ;i;i;i; iA; 0; [iiiCo; ;i;i;i; iC; 0; [iiiDo; ;i;i;i; iD; 0; [iiiFo; ;i;i;i; iF; 0; [iiiGo; ;i;i;i; iG; 0; [iiiHo; ;i;i;i; iH; 0; [iiiIo; ;i;i;i; iI; 0; [iiiJo; ;i;i;i; iJ; 0; [iiiKo; ;i;i;i; iK; 0; [iiiLo; ;i;i;i; iL; 0; [iiiMo; ;i;i;i; iM; 0; [iiiNo; ;i;i;i; iN; 0; [iiiOo; ;i;i;i; iO; I" compat; T; [iiiPo; ;i;i;i; iP; I" isolated; T; [iqiQo; ;i;i;i; iQ; I" final; T; [iqiRo; ;i;i;i; iR; I" isolated; T; [i{iSo; ;i;i;i; iS; I" final; T; [i{iTo; ;i;i;i; iT; I" initial; T; [i{iUo; ;i;i;i; iU; I" medial; T; [i{iVo; ;i;i;i; iV; I" isolated; T; [i~iWo; ;i;i;i; iW; I" final; T; [i~iXo; ;i;i;i; iX; I" initial; T; [i~iYo; ;i;i;i; iY; I" medial; T; [i~iZo; ;i;i;i; iZ; I" isolated; T; [ii[o; ;i;i;i; i[; I" final; T; [ii\o; ;i;i;i; i\; I" initial; T; [ii]o; ;i;i;i; i]; I" medial; T; [ii^o; ;i;i;i; i^; I" isolated; T; [izi_o; ;i;i;i; i_; I" final; T; [izi`o; ;i;i;i; i`; I" initial; T; [iziao; ;i;i;i; ia; I" medial; T; [izibo; ;i;i;i; ib; I" isolated; T; [iico; ;i;i;i; ic; I" final; T; [iido; ;i;i;i; id; I" initial; T; [iieo; ;i;i;i; ie; I" medial; T; [iifo; ;i;i;i; if; I" isolated; T; [iyigo; ;i;i;i; ig; I" final; T; [iyiho; ;i;i;i; ih; I" initial; T; [iyiio; ;i;i;i; ii; I" medial; T; [iyijo; ;i;i;i; ij; I" isolated; T; [iiko; ;i;i;i; ik; I" final; T; [iilo; ;i;i;i; il; I" initial; T; [iimo; ;i;i;i; im; I" medial; T; [iino; ;i;i;i; in; I" isolated; T; [iioo; ;i;i;i; io; I" final; T; [iipo; ;i;i;i; ip; I" initial; T; [iiqo; ;i;i;i; iq; I" medial; T; [iiro; ;i;i;i; ir; I" isolated; T; [iiso; ;i;i;i; is; I" final; T; [iito; ;i;i;i; it; I" initial; T; [iiuo; ;i;i;i; iu; I" medial; T; [iivo; ;i;i;i; iv; I" isolated; T; [iiwo; ;i;i;i; iw; I" final; T; [iixo; ;i;i;i; ix; I" initial; T; [iiyo; ;i;i;i; iy; I" medial; T; [iizo; ;i;i;i; iz; I" isolated; T; [ii{o; ;i;i;i; i{; I" final; T; [ii|o; ;i;i;i; i|; I" initial; T; [ii}o; ;i;i;i; i}; I" medial; T; [ii~o; ;i;i;i; i~; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iwio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" initial; T; [iIio; ;i;i;i; i; I" medial; T; [iIio; ;i;i;i; i; I" isolated; T; [i&i'io; ;i;i;i; i; I" final; T; [i&i'io; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iHio; ;i;i;i; i; I" final; T; [i&iHio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iio; ;i;i;i; i; I" final; T; [i&iio; ;i;i;i; i; I" initial; T; [i&iio; ;i;i;i; i; I" isolated; T; [i&iIio; ;i;i;i; i; I" final; T; [i&iIio; ;i;i;i; i; I" initial; T; [i&iIio; ;i;i;i; i; I" isolated; T; [iio; ;i;i;i; i; I" final; T; [iio; ;i;i;i; i; I" initial; T; [iio; ;i;i;i; i; I" medial; T; [iio; ;i;i;i; i; I" isolated; T; [i&i,io; ;i;i;i; i; I" isolated; T; [i&i-io; ;i;i;i; i; I" isolated; T; [i&iEio; ;i;i;i; i; I" isolated; T; [i&iIio; ;i;i;i; i; I" isolated; T; [i&iJio; ;i;i;i; i; I" isolated; T; [i(i,io; ;i;i;i; i; I" isolated; T; [i(i-io; ;i;i;i; i; I" isolated; T; [i(i.io; ;i;i;i; i; I" isolated; T; [i(iEi o; ;i;i;i; i ; I" isolated; T; [i(iIi o; ;i;i;i; i ; I" isolated; T; [i(iJi o; ;i;i;i; i ; I" isolated; T; [i*i,i o; ;i;i;i; i ; I" isolated; T; [i*i-i o; ;i;i;i; i ; I" isolated; T; [i*i.io; ;i;i;i; i; I" isolated; T; [i*iEio; ;i;i;i; i; I" isolated; T; [i*iIio; ;i;i;i; i; I" isolated; T; [i*iJio; ;i;i;i; i; I" isolated; T; [i+i,io; ;i;i;i; i; I" isolated; T; [i+iEio; ;i;i;i; i; I" isolated; T; [i+iIio; ;i;i;i; i; I" isolated; T; [i+iJio; ;i;i;i; i; I" isolated; T; [i,i-io; ;i;i;i; i; I" isolated; T; [i,iEio; ;i;i;i; i; I" isolated; T; [i-i,io; ;i;i;i; i; I" isolated; T; [i-iEio; ;i;i;i; i; I" isolated; T; [i.i,io; ;i;i;i; i; I" isolated; T; [i.i-io; ;i;i;i; i; I" isolated; T; [i.iEio; ;i;i;i; i; I" isolated; T; [i3i,io; ;i;i;i; i; I" isolated; T; [i3i-io; ;i;i;i; i; I" isolated; T; [i3i.io; ;i;i;i; i; I" isolated; T; [i3iEi o; ;i;i;i; i ; I" isolated; T; [i5i-i!o; ;i;i;i; i!; I" isolated; T; [i5iEi"o; ;i;i;i; i"; I" isolated; T; [i6i,i#o; ;i;i;i; i#; I" isolated; T; [i6i-i$o; ;i;i;i; i$; I" isolated; T; [i6i.i%o; ;i;i;i; i%; I" isolated; T; [i6iEi&o; ;i;i;i; i&; I" isolated; T; [i7i-i'o; ;i;i;i; i'; I" isolated; T; [i7iEi(o; ;i;i;i; i(; I" isolated; T; [i8iEi)o; ;i;i;i; i); I" isolated; T; [i9i,i*o; ;i;i;i; i*; I" isolated; T; [i9iEi+o; ;i;i;i; i+; I" isolated; T; [i:i,i,o; ;i;i;i; i,; I" isolated; T; [i:iEi-o; ;i;i;i; i-; I" isolated; T; [iAi,i.o; ;i;i;i; i.; I" isolated; T; [iAi-i/o; ;i;i;i; i/; I" isolated; T; [iAi.i0o; ;i;i;i; i0; I" isolated; T; [iAiEi1o; ;i;i;i; i1; I" isolated; T; [iAiIi2o; ;i;i;i; i2; I" isolated; T; [iAiJi3o; ;i;i;i; i3; I" isolated; T; [iBi-i4o; ;i;i;i; i4; I" isolated; T; [iBiEi5o; ;i;i;i; i5; I" isolated; T; [iBiIi6o; ;i;i;i; i6; I" isolated; T; [iBiJi7o; ;i;i;i; i7; I" isolated; T; [iCi'i8o; ;i;i;i; i8; I" isolated; T; [iCi,i9o; ;i;i;i; i9; I" isolated; T; [iCi-i:o; ;i;i;i; i:; I" isolated; T; [iCi.i;o; ;i;i;i; i;; I" isolated; T; [iCiDio; ;i;i;i; i>; I" isolated; T; [iCiJi?o; ;i;i;i; i?; I" isolated; T; [iDi,i@o; ;i;i;i; i@; I" isolated; T; [iDi-iAo; ;i;i;i; iA; I" isolated; T; [iDi.iBo; ;i;i;i; iB; I" isolated; T; [iDiEiCo; ;i;i;i; iC; I" isolated; T; [iDiIiDo; ;i;i;i; iD; I" isolated; T; [iDiJiEo; ;i;i;i; iE; I" isolated; T; [iEi,iFo; ;i;i;i; iF; I" isolated; T; [iEi-iGo; ;i;i;i; iG; I" isolated; T; [iEi.iHo; ;i;i;i; iH; I" isolated; T; [iEiEiIo; ;i;i;i; iI; I" isolated; T; [iEiIiJo; ;i;i;i; iJ; I" isolated; T; [iEiJiKo; ;i;i;i; iK; I" isolated; T; [iFi,iLo; ;i;i;i; iL; I" isolated; T; [iFi-iMo; ;i;i;i; iM; I" isolated; T; [iFi.iNo; ;i;i;i; iN; I" isolated; T; [iFiEiOo; ;i;i;i; iO; I" isolated; T; [iFiIiPo; ;i;i;i; iP; I" isolated; T; [iFiJiQo; ;i;i;i; iQ; I" isolated; T; [iGi,iRo; ;i;i;i; iR; I" isolated; T; [iGiEiSo; ;i;i;i; iS; I" isolated; T; [iGiIiTo; ;i;i;i; iT; I" isolated; T; [iGiJiUo; ;i;i;i; iU; I" isolated; T; [iJi,iVo; ;i;i;i; iV; I" isolated; T; [iJi-iWo; ;i;i;i; iW; I" isolated; T; [iJi.iXo; ;i;i;i; iX; I" isolated; T; [iJiEiYo; ;i;i;i; iY; I" isolated; T; [iJiIiZo; ;i;i;i; iZ; I" isolated; T; [iJiJi[o; ;i;i;i; i[; I" isolated; T; [i0ipi\o; ;i;i;i; i\; I" isolated; T; [i1ipi]o; ;i;i;i; i]; I" isolated; T; [iIipi^o; ;i;i;i; i^; I" isolated; T; [i%iLiQi_o; ;i;i;i; i_; I" isolated; T; [i%iMiQi`o; ;i;i;i; i`; I" isolated; T; [i%iNiQiao; ;i;i;i; ia; I" isolated; T; [i%iOiQibo; ;i;i;i; ib; I" isolated; T; [i%iPiQico; ;i;i;i; ic; I" isolated; T; [i%iQipido; ;i;i;i; id; I" final; T; [i&i1ieo; ;i;i;i; ie; I" final; T; [i&i2ifo; ;i;i;i; if; I" final; T; [i&iEigo; ;i;i;i; ig; I" final; T; [i&iFiho; ;i;i;i; ih; I" final; T; [i&iIiio; ;i;i;i; ii; I" final; T; [i&iJijo; ;i;i;i; ij; I" final; T; [i(i1iko; ;i;i;i; ik; I" final; T; [i(i2ilo; ;i;i;i; il; I" final; T; [i(iEimo; ;i;i;i; im; I" final; T; [i(iFino; ;i;i;i; in; I" final; T; [i(iIioo; ;i;i;i; io; I" final; T; [i(iJipo; ;i;i;i; ip; I" final; T; [i*i1iqo; ;i;i;i; iq; I" final; T; [i*i2iro; ;i;i;i; ir; I" final; T; [i*iEiso; ;i;i;i; is; I" final; T; [i*iFito; ;i;i;i; it; I" final; T; [i*iIiuo; ;i;i;i; iu; I" final; T; [i*iJivo; ;i;i;i; iv; I" final; T; [i+i1iwo; ;i;i;i; iw; I" final; T; [i+i2ixo; ;i;i;i; ix; I" final; T; [i+iEiyo; ;i;i;i; iy; I" final; T; [i+iFizo; ;i;i;i; iz; I" final; T; [i+iIi{o; ;i;i;i; i{; I" final; T; [i+iJi|o; ;i;i;i; i|; I" final; T; [iAiIi}o; ;i;i;i; i}; I" final; T; [iAiJi~o; ;i;i;i; i~; I" final; T; [iBiIio; ;i;i;i; i; I" final; T; [iBiJio; ;i;i;i; i; I" final; T; [iCi'io; ;i;i;i; i; I" final; T; [iCiDio; ;i;i;i; i; I" final; T; [iCiEio; ;i;i;i; i; I" final; T; [iCiIio; ;i;i;i; i; I" final; T; [iCiJio; ;i;i;i; i; I" final; T; [iDiEio; ;i;i;i; i; I" final; T; [iDiIio; ;i;i;i; i; I" final; T; [iDiJio; ;i;i;i; i; I" final; T; [iEi'io; ;i;i;i; i; I" final; T; [iEiEio; ;i;i;i; i; I" final; T; [iFi1io; ;i;i;i; i; I" final; T; [iFi2io; ;i;i;i; i; I" final; T; [iFiEio; ;i;i;i; i; I" final; T; [iFiFio; ;i;i;i; i; I" final; T; [iFiIio; ;i;i;i; i; I" final; T; [iFiJio; ;i;i;i; i; I" final; T; [iIipio; ;i;i;i; i; I" final; T; [iJi1io; ;i;i;i; i; I" final; T; [iJi2io; ;i;i;i; i; I" final; T; [iJiEio; ;i;i;i; i; I" final; T; [iJiFio; ;i;i;i; i; I" final; T; [iJiIio; ;i;i;i; i; I" final; T; [iJiJio; ;i;i;i; i; I" initial; T; [i&i,io; ;i;i;i; i; I" initial; T; [i&i-io; ;i;i;i; i; I" initial; T; [i&i.io; ;i;i;i; i; I" initial; T; [i&iEio; ;i;i;i; i; I" initial; T; [i&iGio; ;i;i;i; i; I" initial; T; [i(i,io; ;i;i;i; i; I" initial; T; [i(i-io; ;i;i;i; i; I" initial; T; [i(i.io; ;i;i;i; i; I" initial; T; [i(iEio; ;i;i;i; i; I" initial; T; [i(iGio; ;i;i;i; i; I" initial; T; [i*i,io; ;i;i;i; i; I" initial; T; [i*i-io; ;i;i;i; i; I" initial; T; [i*i.io; ;i;i;i; i; I" initial; T; [i*iEio; ;i;i;i; i; I" initial; T; [i*iGio; ;i;i;i; i; I" initial; T; [i+iEio; ;i;i;i; i; I" initial; T; [i,i-io; ;i;i;i; i; I" initial; T; [i,iEio; ;i;i;i; i; I" initial; T; [i-i,io; ;i;i;i; i; I" initial; T; [i-iEio; ;i;i;i; i; I" initial; T; [i.i,io; ;i;i;i; i; I" initial; T; [i.iEio; ;i;i;i; i; I" initial; T; [i3i,io; ;i;i;i; i; I" initial; T; [i3i-io; ;i;i;i; i; I" initial; T; [i3i.io; ;i;i;i; i; I" initial; T; [i3iEio; ;i;i;i; i; I" initial; T; [i5i-io; ;i;i;i; i; I" initial; T; [i5i.io; ;i;i;i; i; I" initial; T; [i5iEio; ;i;i;i; i; I" initial; T; [i6i,io; ;i;i;i; i; I" initial; T; [i6i-io; ;i;i;i; i; I" initial; T; [i6i.io; ;i;i;i; i; I" initial; T; [i6iEio; ;i;i;i; i; I" initial; T; [i7i-io; ;i;i;i; i; I" initial; T; [i8iEio; ;i;i;i; i; I" initial; T; [i9i,io; ;i;i;i; i; I" initial; T; [i9iEio; ;i;i;i; i; I" initial; T; [i:i,io; ;i;i;i; i; I" initial; T; [i:iEio; ;i;i;i; i; I" initial; T; [iAi,io; ;i;i;i; i; I" initial; T; [iAi-io; ;i;i;i; i; I" initial; T; [iAi.io; ;i;i;i; i; I" initial; T; [iAiEio; ;i;i;i; i; I" initial; T; [iBi-io; ;i;i;i; i; I" initial; T; [iBiEio; ;i;i;i; i; I" initial; T; [iCi,io; ;i;i;i; i; I" initial; T; [iCi-io; ;i;i;i; i; I" initial; T; [iCi.io; ;i;i;i; i; I" initial; T; [iCiDio; ;i;i;i; i; I" initial; T; [iCiEio; ;i;i;i; i; I" initial; T; [iDi,io; ;i;i;i; i; I" initial; T; [iDi-io; ;i;i;i; i; I" initial; T; [iDi.io; ;i;i;i; i; I" initial; T; [iDiEio; ;i;i;i; i; I" initial; T; [iDiGio; ;i;i;i; i; I" initial; T; [iEi,io; ;i;i;i; i; I" initial; T; [iEi-io; ;i;i;i; i; I" initial; T; [iEi.io; ;i;i;i; i; I" initial; T; [iEiEio; ;i;i;i; i; I" initial; T; [iFi,io; ;i;i;i; i; I" initial; T; [iFi-io; ;i;i;i; i; I" initial; T; [iFi.io; ;i;i;i; i; I" initial; T; [iFiEio; ;i;i;i; i; I" initial; T; [iFiGio; ;i;i;i; i; I" initial; T; [iGi,io; ;i;i;i; i; I" initial; T; [iGiEio; ;i;i;i; i; I" initial; T; [iGipio; ;i;i;i; i; I" initial; T; [iJi,io; ;i;i;i; i; I" initial; T; [iJi-io; ;i;i;i; i; I" initial; T; [iJi.io; ;i;i;i; i; I" initial; T; [iJiEio; ;i;i;i; i; I" initial; T; [iJiGio; ;i;i;i; i; I" medial; T; [i&iEio; ;i;i;i; i; I" medial; T; [i&iGio; ;i;i;i; i; I" medial; T; [i(iEio; ;i;i;i; i; I" medial; T; [i(iGio; ;i;i;i; i; I" medial; T; [i*iEio; ;i;i;i; i; I" medial; T; [i*iGio; ;i;i;i; i; I" medial; T; [i+iEio; ;i;i;i; i; I" medial; T; [i+iGio; ;i;i;i; i; I" medial; T; [i3iEio; ;i;i;i; i; I" medial; T; [i3iGio; ;i;i;i; i; I" medial; T; [i4iEio; ;i;i;i; i; I" medial; T; [i4iGio; ;i;i;i; i; I" medial; T; [iCiDio; ;i;i;i; i; I" medial; T; [iCiEio; ;i;i;i; i; I" medial; T; [iDiEio; ;i;i;i; i; I" medial; T; [iFiEio; ;i;i;i; i; I" medial; T; [iFiGio; ;i;i;i; i; I" medial; T; [iJiEio; ;i;i;i; i; I" medial; T; [iJiGio; ;i;i;i; i; I" medial; T; [i@iNiQio; ;i;i;i; i; I" medial; T; [i@iOiQio; ;i;i;i; i; I" medial; T; [i@iPiQio; ;i;i;i; i; I" isolated; T; [i7iIio; ;i;i;i; i; I" isolated; T; [i7iJio; ;i;i;i; i; I" isolated; T; [i9iIio; ;i;i;i; i; I" isolated; T; [i9iJio; ;i;i;i; i; I" isolated; T; [i:iIio; ;i;i;i; i; I" isolated; T; [i:iJio; ;i;i;i; i; I" isolated; T; [i3iIio; ;i;i;i; i; I" isolated; T; [i3iJio; ;i;i;i; i; I" isolated; T; [i4iIio; ;i;i;i; i; I" isolated; T; [i4iJio; ;i;i;i; i; I" isolated; T; [i-iIio; ;i;i;i; i; I" isolated; T; [i-iJio; ;i;i;i; i; I" isolated; T; [i,iIio; ;i;i;i; i; I" isolated; T; [i,iJio; ;i;i;i; i; I" isolated; T; [i.iIio; ;i;i;i; i; I" isolated; T; [i.iJio; ;i;i;i; i; I" isolated; T; [i5iIio; ;i;i;i; i; I" isolated; T; [i5iJio; ;i;i;i; i; I" isolated; T; [i6iIio; ;i;i;i; i; I" isolated; T; [i6iJi o; ;i;i;i; i ; I" isolated; T; [i4i,i o; ;i;i;i; i ; I" isolated; T; [i4i-i o; ;i;i;i; i ; I" isolated; T; [i4i.i o; ;i;i;i; i ; I" isolated; T; [i4iEi o; ;i;i;i; i ; I" isolated; T; [i4i1io; ;i;i;i; i; I" isolated; T; [i3i1io; ;i;i;i; i; I" isolated; T; [i5i1io; ;i;i;i; i; I" isolated; T; [i6i1io; ;i;i;i; i; I" final; T; [i7iIio; ;i;i;i; i; I" final; T; [i7iJio; ;i;i;i; i; I" final; T; [i9iIio; ;i;i;i; i; I" final; T; [i9iJio; ;i;i;i; i; I" final; T; [i:iIio; ;i;i;i; i; I" final; T; [i:iJio; ;i;i;i; i; I" final; T; [i3iIio; ;i;i;i; i; I" final; T; [i3iJio; ;i;i;i; i; I" final; T; [i4iIio; ;i;i;i; i; I" final; T; [i4iJio; ;i;i;i; i; I" final; T; [i-iIio; ;i;i;i; i; I" final; T; [i-iJio; ;i;i;i; i; I" final; T; [i,iIio; ;i;i;i; i; I" final; T; [i,iJio; ;i;i;i; i; I" final; T; [i.iIi o; ;i;i;i; i ; I" final; T; [i.iJi!o; ;i;i;i; i!; I" final; T; [i5iIi"o; ;i;i;i; i"; I" final; T; [i5iJi#o; ;i;i;i; i#; I" final; T; [i6iIi$o; ;i;i;i; i$; I" final; T; [i6iJi%o; ;i;i;i; i%; I" final; T; [i4i,i&o; ;i;i;i; i&; I" final; T; [i4i-i'o; ;i;i;i; i'; I" final; T; [i4i.i(o; ;i;i;i; i(; I" final; T; [i4iEi)o; ;i;i;i; i); I" final; T; [i4i1i*o; ;i;i;i; i*; I" final; T; [i3i1i+o; ;i;i;i; i+; I" final; T; [i5i1i,o; ;i;i;i; i,; I" final; T; [i6i1i-o; ;i;i;i; i-; I" initial; T; [i4i,i.o; ;i;i;i; i.; I" initial; T; [i4i-i/o; ;i;i;i; i/; I" initial; T; [i4i.i0o; ;i;i;i; i0; I" initial; T; [i4iEi1o; ;i;i;i; i1; I" initial; T; [i3iGi2o; ;i;i;i; i2; I" initial; T; [i4iGi3o; ;i;i;i; i3; I" initial; T; [i7iEi4o; ;i;i;i; i4; I" medial; T; [i3i,i5o; ;i;i;i; i5; I" medial; T; [i3i-i6o; ;i;i;i; i6; I" medial; T; [i3i.i7o; ;i;i;i; i7; I" medial; T; [i4i,i8o; ;i;i;i; i8; I" medial; T; [i4i-i9o; ;i;i;i; i9; I" medial; T; [i4i.i:o; ;i;i;i; i:; I" medial; T; [i7iEi;o; ;i;i;i; i;; I" medial; T; [i8iEio; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0iPo; ;i;i;i; iP; I" initial; T; [i*i,iEiQo; ;i;i;i; iQ; I" final; T; [i*i-i,iRo; ;i;i;i; iR; I" initial; T; [i*i-i,iSo; ;i;i;i; iS; I" initial; T; [i*i-iEiTo; ;i;i;i; iT; I" initial; T; [i*i.iEiUo; ;i;i;i; iU; I" initial; T; [i*iEi,iVo; ;i;i;i; iV; I" initial; T; [i*iEi-iWo; ;i;i;i; iW; I" initial; T; [i*iEi.iXo; ;i;i;i; iX; I" final; T; [i,iEi-iYo; ;i;i;i; iY; I" initial; T; [i,iEi-iZo; ;i;i;i; iZ; I" final; T; [i-iEiJi[o; ;i;i;i; i[; I" final; T; [i-iEiIi\o; ;i;i;i; i\; I" initial; T; [i3i-i,i]o; ;i;i;i; i]; I" initial; T; [i3i,i-i^o; ;i;i;i; i^; I" final; T; [i3i,iIi_o; ;i;i;i; i_; I" final; T; [i3iEi-i`o; ;i;i;i; i`; I" initial; T; [i3iEi-iao; ;i;i;i; ia; I" initial; T; [i3iEi,ibo; ;i;i;i; ib; I" final; T; [i3iEiEico; ;i;i;i; ic; I" initial; T; [i3iEiEido; ;i;i;i; id; I" final; T; [i5i-i-ieo; ;i;i;i; ie; I" initial; T; [i5i-i-ifo; ;i;i;i; if; I" final; T; [i5iEiEigo; ;i;i;i; ig; I" final; T; [i4i-iEiho; ;i;i;i; ih; I" initial; T; [i4i-iEiio; ;i;i;i; ii; I" final; T; [i4i,iJijo; ;i;i;i; ij; I" final; T; [i4iEi.iko; ;i;i;i; ik; I" initial; T; [i4iEi.ilo; ;i;i;i; il; I" final; T; [i4iEiEimo; ;i;i;i; im; I" initial; T; [i4iEiEino; ;i;i;i; in; I" final; T; [i6i-iIioo; ;i;i;i; io; I" final; T; [i6i.iEipo; ;i;i;i; ip; I" initial; T; [i6i.iEiqo; ;i;i;i; iq; I" final; T; [i7iEi-iro; ;i;i;i; ir; I" initial; T; [i7iEi-iso; ;i;i;i; is; I" initial; T; [i7iEiEito; ;i;i;i; it; I" final; T; [i7iEiJiuo; ;i;i;i; iu; I" final; T; [i9i,iEivo; ;i;i;i; iv; I" final; T; [i9iEiEiwo; ;i;i;i; iw; I" initial; T; [i9iEiEixo; ;i;i;i; ix; I" final; T; [i9iEiIiyo; ;i;i;i; iy; I" final; T; [i:iEiEizo; ;i;i;i; iz; I" final; T; [i:iEiJi{o; ;i;i;i; i{; I" final; T; [i:iEiIi|o; ;i;i;i; i|; I" final; T; [iAi.iEi}o; ;i;i;i; i}; I" initial; T; [iAi.iEi~o; ;i;i;i; i~; I" final; T; [iBiEi-io; ;i;i;i; i; I" final; T; [iBiEiEio; ;i;i;i; i; I" final; T; [iDi-iEio; ;i;i;i; i; I" final; T; [iDi-iJio; ;i;i;i; i; I" final; T; [iDi-iIio; ;i;i;i; i; I" initial; T; [iDi,i,io; ;i;i;i; i; I" final; T; [iDi,i,io; ;i;i;i; i; I" final; T; [iDi.iEio; ;i;i;i; i; I" initial; T; [iDi.iEio; ;i;i;i; i; I" final; T; [iDiEi-io; ;i;i;i; i; I" initial; T; [iDiEi-io; ;i;i;i; i; I" initial; T; [iEi-i,io; ;i;i;i; i; I" initial; T; [iEi-iEio; ;i;i;i; i; I" final; T; [iEi-iJio; ;i;i;i; i; I" initial; T; [iEi,i-io; ;i;i;i; i; I" initial; T; [iEi,iEio; ;i;i;i; i; I" initial; T; [iEi.i,io; ;i;i;i; i; I" initial; T; [iEi.iEio; ;i;i;i; i; I" initial; T; [iEi,i.io; ;i;i;i; i; I" initial; T; [iGiEi,io; ;i;i;i; i; I" initial; T; [iGiEiEio; ;i;i;i; i; I" initial; T; [iFi-iEio; ;i;i;i; i; I" final; T; [iFi-iIio; ;i;i;i; i; I" final; T; [iFi,iEio; ;i;i;i; i; I" initial; T; [iFi,iEio; ;i;i;i; i; I" final; T; [iFi,iIio; ;i;i;i; i; I" final; T; [iFiEiJio; ;i;i;i; i; I" final; T; [iFiEiIio; ;i;i;i; i; I" final; T; [iJiEiEio; ;i;i;i; i; I" initial; T; [iJiEiEio; ;i;i;i; i; I" final; T; [i(i.iJio; ;i;i;i; i; I" final; T; [i*i,iJio; ;i;i;i; i; I" final; T; [i*i,iIio; ;i;i;i; i; I" final; T; [i*i.iJio; ;i;i;i; i; I" final; T; [i*i.iIio; ;i;i;i; i; I" final; T; [i*iEiJio; ;i;i;i; i; I" final; T; [i*iEiIio; ;i;i;i; i; I" final; T; [i,iEiJio; ;i;i;i; i; I" final; T; [i,i-iIio; ;i;i;i; i; I" final; T; [i,iEiIio; ;i;i;i; i; I" final; T; [i3i.iIio; ;i;i;i; i; I" final; T; [i5i-iJio; ;i;i;i; i; I" final; T; [i4i-iJio; ;i;i;i; i; I" final; T; [i6i-iJio; ;i;i;i; i; I" final; T; [iDi,iJio; ;i;i;i; i; I" final; T; [iDiEiJio; ;i;i;i; i; I" final; T; [iJi-iJio; ;i;i;i; i; I" final; T; [iJi,iJio; ;i;i;i; i; I" final; T; [iJiEiJio; ;i;i;i; i; I" final; T; [iEiEiJio; ;i;i;i; i; I" final; T; [iBiEiJio; ;i;i;i; i; I" final; T; [iFi-iJio; ;i;i;i; i; I" initial; T; [iBiEi-io; ;i;i;i; i; I" initial; T; [iDi-iEio; ;i;i;i; i; I" final; T; [i9iEiJio; ;i;i;i; i; I" final; T; [iCiEiJio; ;i;i;i; i; I" initial; T; [iFi,i-io; ;i;i;i; i; I" final; T; [iEi.iJio; ;i;i;i; i; I" initial; T; [iDi,iEio; ;i;i;i; i; I" final; T; [iCiEiEio; ;i;i;i; i; I" final; T; [iDi,iEio; ;i;i;i; i; I" final; T; [iFi,i-io; ;i;i;i; i; I" final; T; [i,i-iJio; ;i;i;i; i; I" final; T; [i-i,iJio; ;i;i;i; i; I" final; T; [iEi,iJio; ;i;i;i; i; I" final; T; [iAiEiJio; ;i;i;i; i; I" final; T; [i(i-iJio; ;i;i;i; i; I" initial; T; [iCiEiEio; ;i;i;i; i; I" initial; T; [i9i,iEio; ;i;i;i; i; I" initial; T; [i5iEiEio; ;i;i;i; i; I" final; T; [i3i.iJio; ;i;i;i; i; I" final; T; [iFi,iJio; ;i;i;i; i; I" isolated; T; [i5iDiio; ;i;i;i; i; I" isolated; T; [iBiDiio; ;i;i;i; i; I" isolated; T; [ i'iDiDiGio; ;i;i;i; i; I" isolated; T; [ i'iCi(i1io; ;i;i;i; i; I" isolated; T; [ iEi-iEi/io; ;i;i;i; i; I" isolated; T; [ i5iDi9iEio; ;i;i;i; i; I" isolated; T; [ i1i3iHiDio; ;i;i;i; i; I" isolated; T; [ i9iDiJiGio; ;i;i;i; i; I" isolated; T; [ iHi3iDiEio; ;i;i;i; i; I" isolated; T; [i5iDiIio; ;i;i;i; i; I" isolated; T; [i5iDiIi%i'iDiDiGi%i9iDiJiGi%iHi3iDiEio; ;i;i;i; i; I" isolated; T; [ i,iDi%i,iDi'iDiGio; ;i;i;i; i; I" isolated; T; [ i1ii'iDio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" vertical; T; [i1io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i?io; ;i;i;i; i; I" vertical; T; [i@io; ;i;i;i; i; I" vertical; T; [i&io; ;i;i;i; i; I" vertical; T; [iDio; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i0io; ;i;i;i; i; I" vertical; T; [i& i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i0o; ;i;i;i; i0; I" vertical; T; [i% i1o; ;i;i;i; i1; I" vertical; T; [i i2o; ;i;i;i; i2; I" vertical; T; [i i3o; ;i;i;i; i3; I" vertical; T; [idi4o; ;i;i;i; i4; I" vertical; T; [idi5o; ;i;i;i; i5; I" vertical; T; [i-i6o; ;i;i;i; i6; I" vertical; T; [i.i7o; ;i;i;i; i7; I" vertical; T; [i{i8o; ;i;i;i; i8; I" vertical; T; [i}i9o; ;i;i;i; i9; I" vertical; T; [i0i:o; ;i;i;i; i:; I" vertical; T; [i0i;o; ;i;i;i; i;; I" vertical; T; [i0io; ;i;i;i; i>; I" vertical; T; [i 0i?o; ;i;i;i; i?; I" vertical; T; [i0i@o; ;i;i;i; i@; I" vertical; T; [i 0iAo; ;i;i;i; iA; I" vertical; T; [i 0iBo; ;i;i;i; iB; I" vertical; T; [i 0iCo; ;i;i;i; iC; I" vertical; T; [i0iDo; ;i;i;i; iD; I" vertical; T; [i0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; I" vertical; T; [i`iHo; ;i;i;i; iH; I" vertical; T; [ibiIo; ;i;i;i; iI; I" compat; T; [i> iJo; ;i;i;i; iJ; I" compat; T; [i> iKo; ;i;i;i; iK; I" compat; T; [i> iLo; ;i;i;i; iL; I" compat; T; [i> iMo; ;i;i;i; iM; I" compat; T; [idiNo; ;i;i;i; iN; I" compat; T; [idiOo; ;i;i;i; iO; I" compat; T; [idiPo; ;i;i;i; iP; I" small; T; [i1iQo; ;i;i;i; iQ; I" small; T; [i0iRo; ;i;i;i; iR; I" small; T; [i3iTo; ;i;i;i; iT; I" small; T; [i@iUo; ;i;i;i; iU; I" small; T; [i?iVo; ;i;i;i; iV; I" small; T; [iDiWo; ;i;i;i; iW; I" small; T; [i&iXo; ;i;i;i; iX; I" small; T; [i iYo; ;i;i;i; iY; I" small; T; [i-iZo; ;i;i;i; iZ; I" small; T; [i.i[o; ;i;i;i; i[; I" small; T; [i{i\o; ;i;i;i; i\; I" small; T; [i}i]o; ;i;i;i; i]; I" small; T; [i0i^o; ;i;i;i; i^; I" small; T; [i0i_o; ;i;i;i; i_; I" small; T; [i(i`o; ;i;i;i; i`; I" small; T; [i+iao; ;i;i;i; ia; I" small; T; [i/ibo; ;i;i;i; ib; I" small; T; [i0ico; ;i;i;i; ic; I" small; T; [i2ido; ;i;i;i; id; I" small; T; [iAieo; ;i;i;i; ie; I" small; T; [iCifo; ;i;i;i; if; I" small; T; [iBiho; ;i;i;i; ih; I" small; T; [iaiio; ;i;i;i; ii; I" small; T; [i)ijo; ;i;i;i; ij; I" small; T; [i*iko; ;i;i;i; ik; I" small; T; [iEipo; ;i;i;i; ip; I" isolated; T; [i%iKiqo; ;i;i;i; iq; I" medial; T; [i@iKiro; ;i;i;i; ir; I" isolated; T; [i%iLiso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; I" isolated; T; [i%iMivo; ;i;i;i; iv; I" isolated; T; [i%iNiwo; ;i;i;i; iw; I" medial; T; [i@iNixo; ;i;i;i; ix; I" isolated; T; [i%iOiyo; ;i;i;i; iy; I" medial; T; [i@iOizo; ;i;i;i; iz; I" isolated; T; [i%iPi{o; ;i;i;i; i{; I" medial; T; [i@iPi|o; ;i;i;i; i|; I" isolated; T; [i%iQi}o; ;i;i;i; i}; I" medial; T; [i@iQi~o; ;i;i;i; i~; I" isolated; T; [i%iRio; ;i;i;i; i; I" medial; T; [i@iRio; ;i;i;i; i; I" isolated; T; [i!io; ;i;i;i; i; I" isolated; T; [i"io; ;i;i;i; i; I" final; T; [i"io; ;i;i;i; i; I" isolated; T; [i#io; ;i;i;i; i; I" final; T; [i#io; ;i;i;i; i; I" isolated; T; [i$io; ;i;i;i; i; I" final; T; [i$io; ;i;i;i; i; I" isolated; T; [i%io; ;i;i;i; i; I" final; T; [i%io; ;i;i;i; i; I" isolated; T; [i&io; ;i;i;i; i; I" final; T; [i&io; ;i;i;i; i; I" initial; T; [i&io; ;i;i;i; i; I" medial; T; [i&io; ;i;i;i; i; I" isolated; T; [i'io; ;i;i;i; i; I" final; T; [i'io; ;i;i;i; i; I" isolated; T; [i(io; ;i;i;i; i; I" final; T; [i(io; ;i;i;i; i; I" initial; T; [i(io; ;i;i;i; i; I" medial; T; [i(io; ;i;i;i; i; I" isolated; T; [i)io; ;i;i;i; i; I" final; T; [i)io; ;i;i;i; i; I" isolated; T; [i*io; ;i;i;i; i; I" final; T; [i*io; ;i;i;i; i; I" initial; T; [i*io; ;i;i;i; i; I" medial; T; [i*io; ;i;i;i; i; I" isolated; T; [i+io; ;i;i;i; i; I" final; T; [i+io; ;i;i;i; i; I" initial; T; [i+io; ;i;i;i; i; I" medial; T; [i+io; ;i;i;i; i; I" isolated; T; [i,io; ;i;i;i; i; I" final; T; [i,io; ;i;i;i; i; I" initial; T; [i,io; ;i;i;i; i; I" medial; T; [i,io; ;i;i;i; i; I" isolated; T; [i-io; ;i;i;i; i; I" final; T; [i-io; ;i;i;i; i; I" initial; T; [i-io; ;i;i;i; i; I" medial; T; [i-io; ;i;i;i; i; I" isolated; T; [i.io; ;i;i;i; i; I" final; T; [i.io; ;i;i;i; i; I" initial; T; [i.io; ;i;i;i; i; I" medial; T; [i.io; ;i;i;i; i; I" isolated; T; [i/io; ;i;i;i; i; I" final; T; [i/io; ;i;i;i; i; I" isolated; T; [i0io; ;i;i;i; i; I" final; T; [i0io; ;i;i;i; i; I" isolated; T; [i1io; ;i;i;i; i; I" final; T; [i1io; ;i;i;i; i; I" isolated; T; [i2io; ;i;i;i; i; I" final; T; [i2io; ;i;i;i; i; I" isolated; T; [i3io; ;i;i;i; i; I" final; T; [i3io; ;i;i;i; i; I" initial; T; [i3io; ;i;i;i; i; I" medial; T; [i3io; ;i;i;i; i; I" isolated; T; [i4io; ;i;i;i; i; I" final; T; [i4io; ;i;i;i; i; I" initial; T; [i4io; ;i;i;i; i; I" medial; T; [i4io; ;i;i;i; i; I" isolated; T; [i5io; ;i;i;i; i; I" final; T; [i5io; ;i;i;i; i; I" initial; T; [i5io; ;i;i;i; i; I" medial; T; [i5io; ;i;i;i; i; I" isolated; T; [i6io; ;i;i;i; i; I" final; T; [i6io; ;i;i;i; i; I" initial; T; [i6io; ;i;i;i; i; I" medial; T; [i6io; ;i;i;i; i; I" isolated; T; [i7io; ;i;i;i; i; I" final; T; [i7io; ;i;i;i; i; I" initial; T; [i7io; ;i;i;i; i; I" medial; T; [i7io; ;i;i;i; i; I" isolated; T; [i8io; ;i;i;i; i; I" final; T; [i8io; ;i;i;i; i; I" initial; T; [i8io; ;i;i;i; i; I" medial; T; [i8io; ;i;i;i; i; I" isolated; T; [i9io; ;i;i;i; i; I" final; T; [i9io; ;i;i;i; i; I" initial; T; [i9io; ;i;i;i; i; I" medial; T; [i9io; ;i;i;i; i; I" isolated; T; [i:io; ;i;i;i; i; I" final; T; [i:io; ;i;i;i; i; I" initial; T; [i:io; ;i;i;i; i; I" medial; T; [i:io; ;i;i;i; i; I" isolated; T; [iAio; ;i;i;i; i; I" final; T; [iAio; ;i;i;i; i; I" initial; T; [iAio; ;i;i;i; i; I" medial; T; [iAio; ;i;i;i; i; I" isolated; T; [iBio; ;i;i;i; i; I" final; T; [iBio; ;i;i;i; i; I" initial; T; [iBio; ;i;i;i; i; I" medial; T; [iBio; ;i;i;i; i; I" isolated; T; [iCio; ;i;i;i; i; I" final; T; [iCio; ;i;i;i; i; I" initial; T; [iCio; ;i;i;i; i; I" medial; T; [iCio; ;i;i;i; i; I" isolated; T; [iDio; ;i;i;i; i; I" final; T; [iDio; ;i;i;i; i; I" initial; T; [iDio; ;i;i;i; i; I" medial; T; [iDio; ;i;i;i; i; I" isolated; T; [iEio; ;i;i;i; i; I" final; T; [iEio; ;i;i;i; i; I" initial; T; [iEio; ;i;i;i; i; I" medial; T; [iEio; ;i;i;i; i; I" isolated; T; [iFio; ;i;i;i; i; I" final; T; [iFio; ;i;i;i; i; I" initial; T; [iFio; ;i;i;i; i; I" medial; T; [iFio; ;i;i;i; i; I" isolated; T; [iGio; ;i;i;i; i; I" final; T; [iGio; ;i;i;i; i; I" initial; T; [iGio; ;i;i;i; i; I" medial; T; [iGio; ;i;i;i; i; I" isolated; T; [iHio; ;i;i;i; i; I" final; T; [iHio; ;i;i;i; i; I" isolated; T; [iIio; ;i;i;i; i; I" final; T; [iIio; ;i;i;i; i; I" isolated; T; [iJio; ;i;i;i; i; I" final; T; [iJio; ;i;i;i; i; I" initial; T; [iJio; ;i;i;i; i; I" medial; T; [iJio; ;i;i;i; i; I" isolated; T; [iDi"io; ;i;i;i; i; I" final; T; [iDi"io; ;i;i;i; i; I" isolated; T; [iDi#io; ;i;i;i; i; I" final; T; [iDi#io; ;i;i;i; i; I" isolated; T; [iDi%io; ;i;i;i; i; I" final; T; [iDi%io; ;i;i;i; i; I" isolated; T; [iDi'io; ;i;i;i; i; I" final; T; [iDi'io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" wide; T; [i&io; ;i;i;i; i; I" wide; T; [i'io; ;i;i;i; i; I" wide; T; [i(io; ;i;i;i; i; I" wide; T; [i)io; ;i;i;i; i; I" wide; T; [i*io; ;i;i;i; i; I" wide; T; [i+io; ;i;i;i; i; I" wide; T; [i,io; ;i;i;i; i; I" wide; T; [i-i o; ;i;i;i; i ; I" wide; T; [i.i o; ;i;i;i; i ; I" wide; T; [i/i o; ;i;i;i; i ; I" wide; T; [i0i o; ;i;i;i; i ; I" wide; T; [i1i o; ;i;i;i; i ; I" wide; T; [i2io; ;i;i;i; i; I" wide; T; [i3io; ;i;i;i; i; I" wide; T; [i4io; ;i;i;i; i; I" wide; T; [i5io; ;i;i;i; i; I" wide; T; [i6io; ;i;i;i; i; I" wide; T; [i7io; ;i;i;i; i; I" wide; T; [i8io; ;i;i;i; i; I" wide; T; [i9io; ;i;i;i; i; I" wide; T; [i:io; ;i;i;i; i; I" wide; T; [i;io; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [i?io; ;i;i;i; i; I" wide; T; [i@io; ;i;i;i; i; I" wide; T; [iAio; ;i;i;i; i; I" wide; T; [iBio; ;i;i;i; i; I" wide; T; [iCio; ;i;i;i; i; I" wide; T; [iDi o; ;i;i;i; i ; I" wide; T; [iEi!o; ;i;i;iA; i!; I" wide; T; [iFi"o; ;i;i;iB; i"; I" wide; T; [iGi#o; ;i;i;iC; i#; I" wide; T; [iHi$o; ;i;i;iD; i$; I" wide; T; [iIi%o; ;i;i;iE; i%; I" wide; T; [iJi&o; ;i;i;iF; i&; I" wide; T; [iKi'o; ;i;i;iG; i'; I" wide; T; [iLi(o; ;i;i;iH; i(; I" wide; T; [iMi)o; ;i;i;iI; i); I" wide; T; [iNi*o; ;i;i;iJ; i*; I" wide; T; [iOi+o; ;i;i;iK; i+; I" wide; T; [iPi,o; ;i;i;iL; i,; I" wide; T; [iQi-o; ;i;i;iM; i-; I" wide; T; [iRi.o; ;i;i;iN; i.; I" wide; T; [iSi/o; ;i;i;iO; i/; I" wide; T; [iTi0o; ;i;i;iP; i0; I" wide; T; [iUi1o; ;i;i;iQ; i1; I" wide; T; [iVi2o; ;i;i;iR; i2; I" wide; T; [iWi3o; ;i;i;iS; i3; I" wide; T; [iXi4o; ;i;i;iT; i4; I" wide; T; [iYi5o; ;i;i;iU; i5; I" wide; T; [iZi6o; ;i;i;iV; i6; I" wide; T; [i[i7o; ;i;i;iW; i7; I" wide; T; [i\i8o; ;i;i;iX; i8; I" wide; T; [i]i9o; ;i;i;iY; i9; I" wide; T; [i^i:o; ;i;i;iZ; i:; I" wide; T; [i_i;o; ;i;i;i; i;; I" wide; T; [i`io; ;i;i;i; i>; I" wide; T; [ici?o; ;i;i;i; i?; I" wide; T; [idi@o; ;i;i;i; i@; I" wide; T; [ieiAo; ;i;i!;i; iA; I" wide; T; [ifiBo; ;i;i";i; iB; I" wide; T; [igiCo; ;i;i#;i; iC; I" wide; T; [ihiDo; ;i;i$;i; iD; I" wide; T; [iiiEo; ;i;i%;i; iE; I" wide; T; [ijiFo; ;i;i&;i; iF; I" wide; T; [ikiGo; ;i;i';i; iG; I" wide; T; [iliHo; ;i;i(;i; iH; I" wide; T; [imiIo; ;i;i);i; iI; I" wide; T; [iniJo; ;i;i*;i; iJ; I" wide; T; [ioiKo; ;i;i+;i; iK; I" wide; T; [ipiLo; ;i;i,;i; iL; I" wide; T; [iqiMo; ;i;i-;i; iM; I" wide; T; [iriNo; ;i;i.;i; iN; I" wide; T; [isiOo; ;i;i/;i; iO; I" wide; T; [itiPo; ;i;i0;i; iP; I" wide; T; [iuiQo; ;i;i1;i; iQ; I" wide; T; [iviRo; ;i;i2;i; iR; I" wide; T; [iwiSo; ;i;i3;i; iS; I" wide; T; [ixiTo; ;i;i4;i; iT; I" wide; T; [iyiUo; ;i;i5;i; iU; I" wide; T; [iziVo; ;i;i6;i; iV; I" wide; T; [i{iWo; ;i;i7;i; iW; I" wide; T; [i|iXo; ;i;i8;i; iX; I" wide; T; [i}iYo; ;i;i9;i; iY; I" wide; T; [i~iZo; ;i;i:;i; iZ; I" wide; T; [ii[o; ;i;i;i; i[; I" wide; T; [i{i\o; ;i;i;i; i\; I" wide; T; [i|i]o; ;i;i;i; i]; I" wide; T; [i}i^o; ;i;i;i; i^; I" wide; T; [i~i_o; ;i;i;i; i_; I" wide; T; [i)i`o; ;i;i;i; i`; I" wide; T; [i)iao; ;i;i;i; ia; I" narrow; T; [i0ibo; ;i;i;i; ib; I" narrow; T; [i 0ico; ;i;i;i; ic; I" narrow; T; [i 0ido; ;i;i;i; id; I" narrow; T; [i0ieo; ;i;i;i; ie; I" narrow; T; [i0ifo; ;i;i;i; if; I" narrow; T; [i0igo; ;i;i;i; ig; I" narrow; T; [i0iho; ;i;i;i; ih; I" narrow; T; [i0iio; ;i;i;i; ii; I" narrow; T; [i0ijo; ;i;i;i; ij; I" narrow; T; [i0iko; ;i;i;i; ik; I" narrow; T; [i0ilo; ;i;i;i; il; I" narrow; T; [i0imo; ;i;i;i; im; I" narrow; T; [i0ino; ;i;i;i; in; I" narrow; T; [i0ioo; ;i;i;i; io; I" narrow; T; [i0ipo; ;i;i;i; ip; I" narrow; T; [i0iqo; ;i;i;i; iq; I" narrow; T; [i0iro; ;i;i;i; ir; I" narrow; T; [i0iso; ;i;i;i; is; I" narrow; T; [i0ito; ;i;i;i; it; I" narrow; T; [i0iuo; ;i;i;i; iu; I" narrow; T; [i0ivo; ;i;i;i; iv; I" narrow; T; [i0iwo; ;i;i;i; iw; I" narrow; T; [i0ixo; ;i;i;i; ix; I" narrow; T; [i0iyo; ;i;i;i; iy; I" narrow; T; [i0izo; ;i;i;i; iz; I" narrow; T; [i0i{o; ;i;i;i; i{; I" narrow; T; [i0i|o; ;i;i;i; i|; I" narrow; T; [i0i}o; ;i;i;i; i}; I" narrow; T; [i0i~o; ;i;i;i; i~; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [i0io; ;i;i;i; i; I" narrow; T; [id1io; ;i;i;i; i; I" narrow; T; [i11io; ;i;i;i; i; I" narrow; T; [i21io; ;i;i;i; i; I" narrow; T; [i31io; ;i;i;i; i; I" narrow; T; [i41io; ;i;i;i; i; I" narrow; T; [i51io; ;i;i;i; i; I" narrow; T; [i61io; ;i;i;i; i; I" narrow; T; [i71io; ;i;i;i; i; I" narrow; T; [i81io; ;i;i;i; i; I" narrow; T; [i91io; ;i;i;i; i; I" narrow; T; [i:1io; ;i;i;i; i; I" narrow; T; [i;1io; ;i;i;i; i; I" narrow; T; [i<1io; ;i;i;i; i; I" narrow; T; [i=1io; ;i;i;i; i; I" narrow; T; [i>1io; ;i;i;i; i; I" narrow; T; [i?1io; ;i;i;i; i; I" narrow; T; [i@1io; ;i;i;i; i; I" narrow; T; [iA1io; ;i;i;i; i; I" narrow; T; [iB1io; ;i;i;i; i; I" narrow; T; [iC1io; ;i;i;i; i; I" narrow; T; [iD1io; ;i;i;i; i; I" narrow; T; [iE1io; ;i;i;i; i; I" narrow; T; [iF1io; ;i;i;i; i; I" narrow; T; [iG1io; ;i;i;i; i; I" narrow; T; [iH1io; ;i;i;i; i; I" narrow; T; [iI1io; ;i;i;i; i; I" narrow; T; [iJ1io; ;i;i;i; i; I" narrow; T; [iK1io; ;i;i;i; i; I" narrow; T; [iL1io; ;i;i;i; i; I" narrow; T; [iM1io; ;i;i;i; i; I" narrow; T; [iN1io; ;i;i;i; i; I" narrow; T; [iO1io; ;i;i;i; i; I" narrow; T; [iP1io; ;i;i;i; i; I" narrow; T; [iQ1io; ;i;i;i; i; I" narrow; T; [iR1io; ;i;i;i; i; I" narrow; T; [iS1io; ;i;i;i; i; I" narrow; T; [iT1io; ;i;i;i; i; I" narrow; T; [iU1io; ;i;i;i; i; I" narrow; T; [iV1io; ;i;i;i; i; I" narrow; T; [iW1io; ;i;i;i; i; I" narrow; T; [iX1io; ;i;i;i; i; I" narrow; T; [iY1io; ;i;i;i; i; I" narrow; T; [iZ1io; ;i;i;i; i; I" narrow; T; [i[1io; ;i;i;i; i; I" narrow; T; [i\1io; ;i;i;i; i; I" narrow; T; [i]1io; ;i;i;i; i; I" narrow; T; [i^1io; ;i;i;i; i; I" narrow; T; [i_1io; ;i;i;i; i; I" narrow; T; [i`1io; ;i;i;i; i; I" narrow; T; [ia1io; ;i;i;i; i; I" narrow; T; [ib1io; ;i;i;i; i; I" narrow; T; [ic1io; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [iio; ;i;i;i; i; I" wide; T; [i io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i!io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; I" narrow; T; [i%io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i(; i; 0; 0io; ;i;i;i); i; 0; 0io; ;i;i;i*; i; 0; 0io; ;i;i;i+; i; 0; 0io; ;i;i;i,; i; 0; 0io; ;i;i;i-; i; 0; 0io; ;i;i;i.; i; 0; 0io; ;i;i;i/; i; 0; 0io; ;i;i;i0; i; 0; 0i o; ;i;i;i1; i ; 0; 0i o; ;i;i;i2; i ; 0; 0i o; ;i;i;i3; i ; 0; 0i o; ;i;i;i4; i ; 0; 0i o; ;i;i;i5; i ; 0; 0io; ;i;i;i6; i; 0; 0io; ;i;i;i7; i; 0; 0io; ;i;i;i8; i; 0; 0io; ;i;i;i9; i; 0; 0io; ;i;i;i:; i; 0; 0io; ;i;i;i;; i; 0; 0io; ;i;i;i<; i; 0; 0io; ;i;i;i=; i; 0; 0io; ;i;i;i>; i; 0; 0io; ;i;i;i?; i; 0; 0io; ;i;i;i@; i; 0; 0io; ;i;i;iA; i; 0; 0io; ;i;i;iB; i; 0; 0io; ;i;i;iC; i; 0; 0io; ;i;i;iD; i; 0; 0io; ;i;i;iE; i; 0; 0io; ;i;i;iF; i; 0; 0io; ;i;i;iG; i; 0; 0i o; ;i;i;iH; i ; 0; 0i!o; ;i;i;iI; i!; 0; 0i"o; ;i;i;iJ; i"; 0; 0i#o; ;i;i;iK; i#; 0; 0i$o; ;i;i;iL; i$; 0; 0i%o; ;i;i;iM; i%; 0; 0i&o; ;i;i;iN; i&; 0; 0i'o; ;i;i;iO; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i ;i; i1; 0; 0i2o; ;i;i ;i; i2; 0; 0i3o; ;i;i ;i; i3; 0; 0i4o; ;i;i ;i; i4; 0; 0i5o; ;i;i ;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i ;i; iH; 0; 0iIo; ;i;i!;i; iI; 0; 0iJo; ;i;i";i; iJ; 0; 0iKo; ;i;i#;i; iK; 0; 0iLo; ;i;i$;i; iL; 0; 0iMo; ;i;i%;i; iM; 0; 0iNo; ;i;i&;i; iN; 0; 0iOo; ;i;i';i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ioo; ;i;i;i; io; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i<o; ;i;i;i; i<; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i? o; ;i;i;i; i? ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0iX o; ;i;i;i; iX ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; [i1i'i/o; ;i;i;i; i/; 0; [i2i'i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i ;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i ;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i<o; ;i ;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iKo; ;i;i;i; iK; 0; [iGi>iLo; ;i;i;i; iL; 0; [iGiWiMo; ;i;i;i; iM; 0; 0iWo; ;i;i;i; iW; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i ;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i! o; ;i;i;i; i! ; 0; 0i" o; ;i;i;i; i" ; 0; 0i# o; ;i;i;i; i# ; 0; 0i$ o; ;i;i;i; i$ ; 0; 0i% o; ;i;i;i; i% ; 0; 0i& o; ;i;i;i; i& ; 0; 0i' o; ;i;i;i; i' ; 0; 0i( o; ;i;i;i; i( ; 0; 0i) o; ;i;i;i; i) ; 0; 0i* o; ;i;i;i; i* ; 0; 0i+ o; ;i;i;i; i+ ; 0; 0i, o; ;i;i;i; i, ; 0; 0i- o; ;i;i;i; i- ; 0; 0i. o; ;i;i;i; i. ; 0; 0i/ o; ;i;i;i; i/ ; 0; 0i0 o; ;i;i;i; i0 ; 0; 0i1 o; ;i;i;i; i1 ; 0; 0i2 o; ;i;i;i; i2 ; 0; 0i3 o; ;i;i;i; i3 ; 0; 0i4 o; ;i;i;i; i4 ; 0; 0i5 o; ;i;i;i; i5 ; 0; 0i6 o; ;i;i;i; i6 ; 0; 0i7 o; ;i;i;i; i7 ; 0; 0i8 o; ;i;i;i; i8 ; 0; 0i9 o; ;i;i;i; i9 ; 0; 0i: o; ;i;i;i; i: ; 0; 0i; o; ;i;i;i; i; ; 0; 0i< o; ;i;i;i; i< ; 0; 0i= o; ;i;i;i; i= ; 0; 0i> o; ;i;i;i; i> ; 0; 0i? o; ;i;i;i; i? ; 0; 0i@ o; ;i;i;i; i@ ; 0; 0iA o; ;i;i;i; iA ; 0; 0iB o; ;i;i;i; iB ; 0; 0iC o; ;i;i;i; iC ; 0; 0iD o; ;i;i;i; iD ; 0; 0iE o; ;i;i;i; iE ; 0; 0iF o; ;i;i;i; iF ; 0; 0iG o; ;i;i;i; iG ; 0; 0iH o; ;i;i;i; iH ; 0; 0iI o; ;i;i;i; iI ; 0; 0iJ o; ;i;i;i; iJ ; 0; 0iK o; ;i;i;i; iK ; 0; 0iL o; ;i;i;i; iL ; 0; 0iM o; ;i;i;i; iM ; 0; 0iN o; ;i;i;i; iN ; 0; 0iO o; ;i;i;i; iO ; 0; 0iP o; ;i;i;i; iP ; 0; 0iQ o; ;i;i;i; iQ ; 0; 0iR o; ;i;i;i; iR ; 0; 0iS o; ;i;i;i; iS ; 0; 0iT o; ;i;i;i; iT ; 0; 0iU o; ;i;i;i; iU ; 0; 0iV o; ;i;i;i; iV ; 0; 0iW o; ;i;i;i; iW ; 0; 0iX o; ;i;i;i; iX ; 0; 0iY o; ;i;i;i; iY ; 0; 0iZ o; ;i;i;i; iZ ; 0; 0i[ o; ;i;i;i; i[ ; 0; 0i\ o; ;i;i;i; i\ ; 0; 0i] o; ;i;i;i; i] ; 0; 0i^ o; ;i;i;i; i^ ; 0; 0i_ o; ;i;i;i; i_ ; 0; 0i` o; ;i;i;i; i` ; 0; 0ia o; ;i;i;i; ia ; 0; 0ib o; ;i;i;i; ib ; 0; 0ic o; ;i;i;i; ic ; 0; 0id o; ;i;i;i; id ; 0; 0ie o; ;i;i;i; ie ; 0; 0if o; ;i;i;i; if ; 0; 0ig o; ;i;i;i; ig ; 0; 0ih o; ;i;i;i; ih ; 0; 0ii o; ;i;i;i; ii ; 0; 0ij o; ;i;i;i; ij ; 0; 0ik o; ;i;i;i; ik ; 0; 0il o; ;i;i;i; il ; 0; 0im o; ;i;i;i; im ; 0; 0in o; ;i;i;i; in ; 0; 0io o; ;i;i;i; io ; 0; 0ip o; ;i;i;i; ip ; 0; 0iq o; ;i;i;i; iq ; 0; 0ir o; ;i;i;i; ir ; 0; 0is o; ;i;i;i; is ; 0; 0it o; ;i;i;i; it ; 0; 0iu o; ;i;i;i; iu ; 0; 0iv o; ;i;i;i; iv ; 0; 0iw o; ;i;i;i; iw ; 0; 0ix o; ;i;i;i; ix ; 0; 0iy o; ;i;i;i; iy ; 0; 0iz o; ;i;i;i; iz ; 0; 0i{ o; ;i;i;i; i{ ; 0; 0i| o; ;i;i;i; i| ; 0; 0i} o; ;i;i;i; i} ; 0; 0i~ o; ;i;i;i; i~ ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i !o; ;i;i;i; i !; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i !o; ;i;i;i; i !; 0; 0i!!o; ;i;i;i; i!!; 0; 0i"!o; ;i;i;i; i"!; 0; 0i#!o; ;i;i;i; i#!; 0; 0i$!o; ;i;i;i; i$!; 0; 0i%!o; ;i;i;i; i%!; 0; 0i&!o; ;i;i;i; i&!; 0; 0i'!o; ;i;i;i; i'!; 0; 0i(!o; ;i;i;i; i(!; 0; 0i)!o; ;i;i;i; i)!; 0; 0i*!o; ;i;i;i; i*!; 0; 0i+!o; ;i;i;i; i+!; 0; 0i,!o; ;i;i;i; i,!; 0; 0i-!o; ;i;i;i; i-!; 0; 0i.!o; ;i;i;i; i.!; 0; 0i/!o; ;i;i;i; i/!; 0; 0i0!o; ;i;i;i; i0!; 0; 0i1!o; ;i;i;i; i1!; 0; 0i2!o; ;i;i;i; i2!; 0; 0i3!o; ;i;i;i; i3!; 0; 0i4!o; ;i;i;i; i4!; 0; 0i5!o; ;i;i;i; i5!; 0; 0i6!o; ;i;i;i; i6!; 0; 0i7!o; ;i;i;i; i7!; 0; 0i8!o; ;i;i;i; i8!; 0; 0i9!o; ;i;i;i; i9!; 0; 0i:!o; ;i;i;i; i:!; 0; 0i;!o; ;i;i;i; i;!; 0; 0i!o; ;i;i;i; i>!; 0; 0i?!o; ;i;i;i; i?!; 0; 0i@!o; ;i;i;i; i@!; 0; 0iA!o; ;i;i;i; iA!; 0; 0iB!o; ;i;i;i; iB!; 0; 0iC!o; ;i;i;i; iC!; 0; 0iD!o; ;i;i;i; iD!; 0; 0iE!o; ;i;i;i; iE!; 0; 0iF!o; ;i;i;i; iF!; 0; 0iG!o; ;i;i;i; iG!; 0; 0iH!o; ;i;i;i; iH!; 0; 0iI!o; ;i;i;i; iI!; 0; 0iJ!o; ;i;i;i; iJ!; 0; 0iK!o; ;i;i;i; iK!; 0; 0iL!o; ;i;i;i; iL!; 0; 0iM!o; ;i;i;i; iM!; 0; 0iN!o; ;i;i;i; iN!; 0; 0iO!o; ;i;i;i; iO!; 0; 0iP!o; ;i;i;i; iP!; 0; 0iQ!o; ;i;i;i; iQ!; 0; 0iR!o; ;i;i;i; iR!; 0; 0iS!o; ;i;i;i; iS!; 0; 0iT!o; ;i;i;i; iT!; 0; 0iU!o; ;i;i;i; iU!; 0; 0iV!o; ;i;i;i; iV!; 0; 0iW!o; ;i;i;i; iW!; 0; 0iX!o; ;i;i;i; iX!; 0; 0iY!o; ;i;i;i; iY!; 0; 0iZ!o; ;i;i;i; iZ!; 0; 0i[!o; ;i;i;i; i[!; 0; 0i\!o; ;i;i;i; i\!; 0; 0i]!o; ;i;i;i; i]!; 0; 0i^!o; ;i;i;i; i^!; 0; 0i_!o; ;i;i;i; i_!; 0; 0i`!o; ;i;i;i; i`!; 0; 0ia!o; ;i;i;i; ia!; 0; 0ib!o; ;i;i;i; ib!; 0; 0ic!o; ;i;i;i; ic!; 0; 0id!o; ;i;i;i; id!; 0; 0ie!o; ;i;i;i; ie!; 0; 0if!o; ;i;i;i; if!; 0; 0ig!o; ;i;i;i; ig!; 0; 0ih!o; ;i;i;i; ih!; 0; 0ii!o; ;i;i;i; ii!; 0; 0ij!o; ;i;i;i; ij!; 0; 0ik!o; ;i;i;i; ik!; 0; 0il!o; ;i;i;i; il!; 0; 0im!o; ;i;i;i; im!; 0; 0in!o; ;i;i;i; in!; 0; 0io!o; ;i;i;i; io!; 0; 0ip!o; ;i;i;i; ip!; 0; 0iq!o; ;i;i;i; iq!; 0; 0ir!o; ;i;i;i; ir!; 0; 0is!o; ;i;i;i; is!; 0; 0it!o; ;i;i;i; it!; 0; 0iu!o; ;i;i;i; iu!; 0; 0iv!o; ;i;i;i; iv!; 0; 0iw!o; ;i;i;i; iw!; 0; 0ix!o; ;i;i;i; ix!; 0; 0iy!o; ;i;i;i; iy!; 0; 0iz!o; ;i;i;i; iz!; 0; 0i{!o; ;i;i;i; i{!; 0; 0i|!o; ;i;i;i; i|!; 0; 0i}!o; ;i;i;i; i}!; 0; 0i~!o; ;i;i;i; i~!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i "o; ;i;i;i; i "; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i "o; ;i;i;i; i "; 0; 0i!"o; ;i;i;i; i!"; 0; 0i""o; ;i;i;i; i""; 0; 0i#"o; ;i;i;i; i#"; 0; 0i$"o; ;i;i;i; i$"; 0; 0i%"o; ;i;i;i; i%"; 0; 0i&"o; ;i;i;i; i&"; 0; 0i'"o; ;i;i;i; i'"; 0; 0i("o; ;i;i;i; i("; 0; 0i)"o; ;i;i;i; i)"; 0; 0i*"o; ;i;i;i; i*"; 0; 0i+"o; ;i;i;i; i+"; 0; 0i,"o; ;i;i;i; i,"; 0; 0i-"o; ;i;i;i; i-"; 0; 0i."o; ;i;i;i; i."; 0; 0i/"o; ;i;i;i; i/"; 0; 0i0"o; ;i;i;i; i0"; 0; 0i1"o; ;i;i;i; i1"; 0; 0i2"o; ;i;i;i; i2"; 0; 0i3"o; ;i;i;i; i3"; 0; 0i4"o; ;i;i;i; i4"; 0; 0i5"o; ;i;i;i; i5"; 0; 0i6"o; ;i;i;i; i6"; 0; 0i7"o; ;i;i;i; i7"; 0; 0i8"o; ;i;i;i; i8"; 0; 0i9"o; ;i;i;i; i9"; 0; 0i:"o; ;i;i;i; i:"; 0; 0i;"o; ;i;i;i; i;"; 0; 0i<"o; ;i;i;i; i<"; 0; 0i="o; ;i;i;i; i="; 0; 0i>"o; ;i;i;i; i>"; 0; 0i?"o; ;i;i;i; i?"; 0; 0i@"o; ;i;i;i; i@"; 0; 0iA"o; ;i;i;i; iA"; 0; 0iB"o; ;i;i;i; iB"; 0; 0iC"o; ;i;i;i; iC"; 0; 0iD"o; ;i;i;i; iD"; 0; 0iE"o; ;i;i;i; iE"; 0; 0iF"o; ;i;i;i; iF"; 0; 0iG"o; ;i;i;i; iG"; 0; 0iH"o; ;i;i;i; iH"; 0; 0iI"o; ;i;i;i; iI"; 0; 0iJ"o; ;i;i;i; iJ"; 0; 0iK"o; ;i;i;i; iK"; 0; 0iL"o; ;i;i;i; iL"; 0; 0iM"o; ;i;i;i; iM"; 0; 0iN"o; ;i;i;i; iN"; 0; 0iO"o; ;i;i;i; iO"; 0; 0iP"o; ;i;i;i; iP"; 0; 0iQ"o; ;i;i;i; iQ"; 0; 0iR"o; ;i;i;i; iR"; 0; 0iS"o; ;i;i;i; iS"; 0; 0iT"o; ;i;i;i; iT"; 0; 0iU"o; ;i;i;i; iU"; 0; 0iV"o; ;i;i;i; iV"; 0; 0iW"o; ;i;i;i; iW"; 0; 0iX"o; ;i;i;i; iX"; 0; 0iY"o; ;i;i;i; iY"; 0; 0iZ"o; ;i;i;i; iZ"; 0; 0i["o; ;i;i;i; i["; 0; 0i\"o; ;i;i;i; i\"; 0; 0i]"o; ;i;i;i; i]"; 0; 0i^"o; ;i;i;i; i^"; 0; 0i_"o; ;i;i;i; i_"; 0; 0i`"o; ;i;i;i; i`"; 0; 0ia"o; ;i;i;i; ia"; 0; 0ib"o; ;i;i;i; ib"; 0; 0ic"o; ;i;i;i; ic"; 0; 0id"o; ;i;i;i; id"; 0; 0ie"o; ;i;i;i; ie"; 0; 0if"o; ;i;i;i; if"; 0; 0ig"o; ;i;i;i; ig"; 0; 0ih"o; ;i;i;i; ih"; 0; 0ii"o; ;i;i;i; ii"; 0; 0ij"o; ;i;i;i; ij"; 0; 0ik"o; ;i;i;i; ik"; 0; 0il"o; ;i;i;i; il"; 0; 0im"o; ;i;i;i; im"; 0; 0in"o; ;i;i;i; in"; 0; 0io"o; ;i;i;i; io"; 0; 0ip"o; ;i;i;i; ip"; 0; 0iq"o; ;i;i;i; iq"; 0; 0ir"o; ;i;i;i; ir"; 0; 0is"o; ;i;i;i; is"; 0; 0it"o; ;i;i;i; it"; 0; 0iu"o; ;i;i;i; iu"; 0; 0iv"o; ;i;i;i; iv"; 0; 0iw"o; ;i;i;i; iw"; 0; 0ix"o; ;i;i;i; ix"; 0; 0iy"o; ;i;i;i; iy"; 0; 0iz"o; ;i;i;i; iz"; 0; 0i{"o; ;i;i;i; i{"; 0; 0i|"o; ;i;i;i; i|"; 0; 0i}"o; ;i;i;i; i}"; 0; 0i~"o; ;i;i;i; i~"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i #o; ;i;i;i; i #; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i #o; ;i;i;i; i #; 0; 0i!#o; ;i;i;i; i!#; 0; 0i"#o; ;i;i;i; i"#; 0; 0i##o; ;i;i;i; i##; 0; 0i$#o; ;i;i;i; i$#; 0; 0i%#o; ;i;i;i; i%#; 0; 0i&#o; ;i;i;i; i&#; 0; 0i'#o; ;i;i;i; i'#; 0; 0i(#o; ;i;i;i; i(#; 0; 0i)#o; ;i;i;i; i)#; 0; 0i*#o; ;i;i;i; i*#; 0; 0i+#o; ;i;i;i; i+#; 0; 0i,#o; ;i;i;i; i,#; 0; 0i-#o; ;i;i;i; i-#; 0; 0i.#o; ;i;i;i; i.#; 0; 0i/#o; ;i;i;i; i/#; 0; 0i0#o; ;i;i;i; i0#; 0; 0i1#o; ;i;i;i; i1#; 0; 0i2#o; ;i;i;i; i2#; 0; 0i3#o; ;i;i;i; i3#; 0; 0i4#o; ;i;i;i; i4#; 0; 0i5#o; ;i;i;i; i5#; 0; 0i6#o; ;i;i;i; i6#; 0; 0i7#o; ;i;i;i; i7#; 0; 0i8#o; ;i;i;i; i8#; 0; 0i9#o; ;i;i;i; i9#; 0; 0i:#o; ;i;i;i; i:#; 0; 0i;#o; ;i;i;i; i;#; 0; 0i<#o; ;i;i;i; i<#; 0; 0i=#o; ;i;i;i; i=#; 0; 0i>#o; ;i;i;i; i>#; 0; 0i?#o; ;i;i;i; i?#; 0; 0i@#o; ;i;i;i; i@#; 0; 0iA#o; ;i;i;i; iA#; 0; 0iB#o; ;i;i;i; iB#; 0; 0iC#o; ;i;i;i; iC#; 0; 0iD#o; ;i;i;i; iD#; 0; 0iE#o; ;i;i;i; iE#; 0; 0iF#o; ;i;i;i; iF#; 0; 0iG#o; ;i;i;i; iG#; 0; 0iH#o; ;i;i;i; iH#; 0; 0iI#o; ;i;i;i; iI#; 0; 0iJ#o; ;i;i;i; iJ#; 0; 0iK#o; ;i;i;i; iK#; 0; 0iL#o; ;i;i;i; iL#; 0; 0iM#o; ;i;i;i; iM#; 0; 0iN#o; ;i;i;i; iN#; 0; 0iO#o; ;i;i;i; iO#; 0; 0iP#o; ;i;i;i; iP#; 0; 0iQ#o; ;i;i;i; iQ#; 0; 0iR#o; ;i;i;i; iR#; 0; 0iS#o; ;i;i;i; iS#; 0; 0iT#o; ;i;i;i; iT#; 0; 0iU#o; ;i;i;i; iU#; 0; 0iV#o; ;i;i;i; iV#; 0; 0iW#o; ;i;i;i; iW#; 0; 0iX#o; ;i;i;i; iX#; 0; 0iY#o; ;i;i;i; iY#; 0; 0iZ#o; ;i;i;i; iZ#; 0; 0i[#o; ;i;i;i; i[#; 0; 0i\#o; ;i;i;i; i\#; 0; 0i]#o; ;i;i;i; i]#; 0; 0i^#o; ;i;i;i; i^#; 0; 0i_#o; ;i;i;i; i_#; 0; 0i`#o; ;i;i;i; i`#; 0; 0ia#o; ;i;i;i; ia#; 0; 0ib#o; ;i;i;i; ib#; 0; 0ic#o; ;i;i;i; ic#; 0; 0id#o; ;i;i;i; id#; 0; 0ie#o; ;i;i;i; ie#; 0; 0if#o; ;i;i;i; if#; 0; 0ig#o; ;i;i;i; ig#; 0; 0ih#o; ;i;i;i; ih#; 0; 0ii#o; ;i;i;i; ii#; 0; 0ij#o; ;i;i;i; ij#; 0; 0ik#o; ;i;i;i; ik#; 0; 0il#o; ;i;i;i; il#; 0; 0im#o; ;i;i;i; im#; 0; 0in#o; ;i;i;i; in#; 0; 0io#o; ;i;i;i; io#; 0; 0ip#o; ;i;i;i; ip#; 0; 0iq#o; ;i;i;i; iq#; 0; 0ir#o; ;i;i;i; ir#; 0; 0is#o; ;i;i;i; is#; 0; 0it#o; ;i;i;i; it#; 0; 0iu#o; ;i;i;i; iu#; 0; 0iv#o; ;i;i;i; iv#; 0; 0iw#o; ;i;i;i; iw#; 0; 0ix#o; ;i;i;i; ix#; 0; 0iy#o; ;i;i;i; iy#; 0; 0iz#o; ;i;i;i; iz#; 0; 0i{#o; ;i;i;i; i{#; 0; 0i|#o; ;i;i;i; i|#; 0; 0i}#o; ;i;i;i; i}#; 0; 0i~#o; ;i;i;i; i~#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i $o; ;i;i;i; i $; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i$o; ;i;i;i; i$; 0; 0i $o; ;i;i;i; i $; 0; 0i!$o; ;i;i;i; i!$; 0; 0i"$o; ;i;i;i; i"$; 0; 0i#$o; ;i;i;i; i#$; 0; 0i$$o; ;i;i;i; i$$; 0; 0i%$o; ;i;i;i; i%$; 0; 0i&$o; ;i;i;i; i&$; 0; 0i'$o; ;i;i;i; i'$; 0; 0i($o; ;i;i;i; i($; 0; 0i)$o; ;i;i;i; i)$; 0; 0i*$o; ;i;i;i; i*$; 0; 0i+$o; ;i;i;i; i+$; 0; 0i,$o; ;i;i;i; i,$; 0; 0i-$o; ;i;i;i; i-$; 0; 0i.$o; ;i;i;i; i.$; 0; 0i/$o; ;i;i;i; i/$; 0; 0i0$o; ;i;i;i; i0$; 0; 0i1$o; ;i;i;i; i1$; 0; 0i2$o; ;i;i;i; i2$; 0; 0i3$o; ;i;i;i; i3$; 0; 0i4$o; ;i;i;i; i4$; 0; 0i5$o; ;i;i;i; i5$; 0; 0i6$o; ;i;i;i; i6$; 0; 0i7$o; ;i;i;i; i7$; 0; 0i8$o; ;i;i;i; i8$; 0; 0i9$o; ;i;i;i; i9$; 0; 0i:$o; ;i;i;i; i:$; 0; 0i;$o; ;i;i;i; i;$; 0; 0i<$o; ;i;i;i; i<$; 0; 0i=$o; ;i;i;i; i=$; 0; 0i>$o; ;i;i;i; i>$; 0; 0i?$o; ;i;i;i; i?$; 0; 0i@$o; ;i;i;i; i@$; 0; 0iA$o; ;i;i;i; iA$; 0; 0iB$o; ;i;i;i; iB$; 0; 0iC$o; ;i;i;i; iC$; 0; 0iD$o; ;i;i;i; iD$; 0; 0iE$o; ;i;i;i; iE$; 0; 0iF$o; ;i;i;i; iF$; 0; 0iG$o; ;i;i;i; iG$; 0; 0iH$o; ;i;i;i; iH$; 0; 0iI$o; ;i;i;i; iI$; 0; 0iJ$o; ;i;i;i; iJ$; 0; 0iK$o; ;i;i;i; iK$; 0; 0iL$o; ;i;i;i; iL$; 0; 0iM$o; ;i;i;i; iM$; 0; 0iN$o; ;i;i;i; iN$; 0; 0iO$o; ;i;i;i; iO$; 0; 0iP$o; ;i;i;i; iP$; 0; 0iQ$o; ;i;i;i; iQ$; 0; 0iR$o; ;i;i;i; iR$; 0; 0iS$o; ;i;i;i; iS$; 0; 0iT$o; ;i;i;i; iT$; 0; 0iU$o; ;i;i;i; iU$; 0; 0iV$o; ;i;i;i; iV$; 0; 0iW$o; ;i;i;i; iW$; 0; 0iX$o; ;i;i;i; iX$; 0; 0iY$o; ;i;i;i; iY$; 0; 0iZ$o; ;i;i;i; iZ$; 0; 0i[$o; ;i;i;i; i[$; 0; 0i\$o; ;i;i;i; i\$; 0; 0i]$o; ;i;i;i; i]$; 0; 0i^$o; ;i;i;i; i^$; 0; 0i_$o; ;i;i;i; i_$; 0; 0i`$o; ;i;i;i; i`$; 0; 0ia$o; ;i;i;i; ia$; 0; 0ib$o; ;i;i;i; ib$; 0; 0ic$o; ;i;i;i; ic$; 0; 0id$o; ;i;i;i; id$; 0; 0ie$o; ;i;i;i; ie$; 0; 0if$o; ;i;i;i; if$; 0; 0ig$o; ;i;i;i; ig$; 0; 0ih$o; ;i;i;i; ih$; 0; 0ii$o; ;i;i;i; ii$; 0; 0ij$o; ;i;i;i; ij$; 0; 0ik$o; ;i;i;i; ik$; 0; 0il$o; ;i;i;i; il$; 0; 0im$o; ;i;i;i; im$; 0; 0in$o; ;i;i;i; in$; 0; 0ip$o; ;i;i;i; ip$; 0; 0iq$o; ;i;i;i; iq$; 0; 0ir$o; ;i;i;i; ir$; 0; 0is$o; ;i;i;i; is$; 0; 0it$o; ;i;i;i; it$; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i 0o; ;i;i;i; i 0; 0; 0i!0o; ;i;i;i; i!0; 0; 0i"0o; ;i;i;i; i"0; 0; 0i#0o; ;i;i;i; i#0; 0; 0i$0o; ;i;i;i; i$0; 0; 0i%0o; ;i;i;i; i%0; 0; 0i&0o; ;i;i;i; i&0; 0; 0i'0o; ;i;i;i; i'0; 0; 0i(0o; ;i;i;i; i(0; 0; 0i)0o; ;i;i;i; i)0; 0; 0i*0o; ;i;i;i; i*0; 0; 0i+0o; ;i;i;i; i+0; 0; 0i,0o; ;i;i;i; i,0; 0; 0i-0o; ;i;i;i; i-0; 0; 0i.0o; ;i;i;i; i.0; 0; 0i/0o; ;i;i;i; i/0; 0; 0i00o; ;i;i;i; i00; 0; 0i10o; ;i;i;i; i10; 0; 0i20o; ;i;i;i; i20; 0; 0i30o; ;i;i;i; i30; 0; 0i40o; ;i;i;i; i40; 0; 0i50o; ;i;i;i; i50; 0; 0i60o; ;i;i;i; i60; 0; 0i70o; ;i;i;i; i70; 0; 0i80o; ;i;i;i; i80; 0; 0i90o; ;i;i;i; i90; 0; 0i:0o; ;i;i;i; i:0; 0; 0i;0o; ;i;i;i; i;0; 0; 0i<0o; ;i;i;i; i<0; 0; 0i=0o; ;i;i;i; i=0; 0; 0i>0o; ;i;i;i; i>0; 0; 0i?0o; ;i;i;i; i?0; 0; 0i@0o; ;i;i;i; i@0; 0; 0iA0o; ;i;i;i; iA0; 0; 0iB0o; ;i;i;i; iB0; 0; 0iC0o; ;i;i;i; iC0; 0; 0iD0o; ;i;i;i; iD0; 0; 0iE0o; ;i;i;i; iE0; 0; 0iF0o; ;i;i;i; iF0; 0; 0iG0o; ;i;i;i; iG0; 0; 0iH0o; ;i;i;i; iH0; 0; 0iI0o; ;i;i;i; iI0; 0; 0iJ0o; ;i;i;i; iJ0; 0; 0iK0o; ;i;i;i; iK0; 0; 0iL0o; ;i;i;i; iL0; 0; 0iM0o; ;i;i;i; iM0; 0; 0iN0o; ;i;i;i; iN0; 0; 0iO0o; ;i;i;i; iO0; 0; 0iP0o; ;i;i;i; iP0; 0; 0iQ0o; ;i;i;i; iQ0; 0; 0iR0o; ;i;i;i; iR0; 0; 0iS0o; ;i;i;i; iS0; 0; 0iT0o; ;i;i;i; iT0; 0; 0iU0o; ;i;i;i; iU0; 0; 0iV0o; ;i;i;i; iV0; 0; 0iW0o; ;i;i;i; iW0; 0; 0iX0o; ;i;i;i; iX0; 0; 0iY0o; ;i;i;i; iY0; 0; 0iZ0o; ;i;i;i; iZ0; 0; 0i[0o; ;i;i;i; i[0; 0; 0i\0o; ;i;i;i; i\0; 0; 0i]0o; ;i;i;i; i]0; 0; 0i^0o; ;i;i;i; i^0; 0; 0i_0o; ;i;i;i; i_0; 0; 0i`0o; ;i;i;i; i`0; 0; 0ia0o; ;i;i;i; ia0; 0; 0ib0o; ;i;i;i; ib0; 0; 0ic0o; ;i;i;i; ic0; 0; 0id0o; ;i;i;i; id0; 0; 0ie0o; ;i;i;i; ie0; 0; 0if0o; ;i;i;i; if0; 0; 0ig0o; ;i;i;i; ig0; 0; 0ih0o; ;i;i;i; ih0; 0; 0ii0o; ;i;i;i; ii0; 0; 0ij0o; ;i;i;i; ij0; 0; 0ik0o; ;i;i;i; ik0; 0; 0il0o; ;i;i;i; il0; 0; 0im0o; ;i;i;i; im0; 0; 0in0o; ;i;i;i; in0; 0; 0io0o; ;i;i;i; io0; 0; 0ip0o; ;i;i;i; ip0; 0; 0iq0o; ;i;i;i; iq0; 0; 0ir0o; ;i;i;i; ir0; 0; 0is0o; ;i;i;i; is0; 0; 0it0o; ;i;i;i; it0; 0; 0iu0o; ;i;i;i; iu0; 0; 0iv0o; ;i;i;i; iv0; 0; 0iw0o; ;i;i;i; iw0; 0; 0ix0o; ;i;i;i; ix0; 0; 0iy0o; ;i;i;i; iy0; 0; 0iz0o; ;i;i;i; iz0; 0; 0i{0o; ;i;i;i; i{0; 0; 0i|0o; ;i;i;i; i|0; 0; 0i}0o; ;i;i;i; i}0; 0; 0i~0o; ;i;i;i; i~0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i 1o; ;i;i;i; i 1; 0; 0i!1o; ;i;i;i; i!1; 0; 0i"1o; ;i;i;i; i"1; 0; 0i#1o; ;i;i;i; i#1; 0; 0i$1o; ;i;i;i; i$1; 0; 0i%1o; ;i;i;i; i%1; 0; 0i&1o; ;i;i;i; i&1; 0; 0i'1o; ;i;i;i; i'1; 0; 0i(1o; ;i;i;i; i(1; 0; 0i)1o; ;i;i;i; i)1; 0; 0i*1o; ;i;i;i; i*1; 0; 0i+1o; ;i;i;i; i+1; 0; 0i,1o; ;i;i;i; i,1; 0; 0i-1o; ;i;i;i; i-1; 0; 0i.1o; ;i;i;i; i.1; 0; 0i/1o; ;i;i;i; i/1; 0; 0i01o; ;i;i;i; i01; 0; 0i11o; ;i;i;i; i11; 0; 0i21o; ;i;i;i; i21; 0; 0i31o; ;i;i;i; i31; 0; 0i41o; ;i;i;i; i41; 0; 0i51o; ;i;i;i; i51; 0; 0i61o; ;i;i;i; i61; 0; 0i71o; ;i;i;i; i71; 0; 0i81o; ;i;i;i; i81; 0; 0i91o; ;i;i;i; i91; 0; 0i:1o; ;i;i;i; i:1; 0; 0i;1o; ;i;i;i; i;1; 0; 0i<1o; ;i;i;i; i<1; 0; 0i=1o; ;i;i;i; i=1; 0; 0i>1o; ;i;i;i; i>1; 0; 0i?1o; ;i;i;i; i?1; 0; 0i@1o; ;i;i;i; i@1; 0; 0iA1o; ;i;i;i; iA1; 0; 0iB1o; ;i;i;i; iB1; 0; 0iC1o; ;i;i;i; iC1; 0; 0iD1o; ;i;i;i; iD1; 0; 0iE1o; ;i;i;i; iE1; 0; 0iF1o; ;i;i;i; iF1; 0; 0iG1o; ;i;i;i; iG1; 0; 0iH1o; ;i;i;i; iH1; 0; 0iI1o; ;i;i;i; iI1; 0; 0iJ1o; ;i;i;i; iJ1; 0; 0iK1o; ;i;i;i; iK1; 0; 0iL1o; ;i;i;i; iL1; 0; 0iM1o; ;i;i;i; iM1; 0; 0iN1o; ;i;i;i; iN1; 0; 0iO1o; ;i;i;i; iO1; 0; 0iP1o; ;i;i;i; iP1; 0; 0iQ1o; ;i;i;i; iQ1; 0; 0iR1o; ;i;i;i; iR1; 0; 0iS1o; ;i;i;i; iS1; 0; 0iT1o; ;i;i;i; iT1; 0; 0iU1o; ;i;i;i; iU1; 0; 0iV1o; ;i;i;i; iV1; 0; 0iW1o; ;i;i;i; iW1; 0; 0iX1o; ;i;i;i; iX1; 0; 0iY1o; ;i;i;i; iY1; 0; 0iZ1o; ;i;i;i; iZ1; 0; 0i[1o; ;i;i;i; i[1; 0; 0i\1o; ;i;i;i; i\1; 0; 0i]1o; ;i;i;i; i]1; 0; 0i^1o; ;i;i;i; i^1; 0; 0i_1o; ;i;i;i; i_1; 0; 0i`1o; ;i;i;i; i`1; 0; 0ia1o; ;i;i;i; ia1; 0; 0ib1o; ;i;i;i; ib1; 0; 0ic1o; ;i;i;i; ic1; 0; 0id1o; ;i;i;i; id1; 0; 0ie1o; ;i;i;i; ie1; 0; 0if1o; ;i;i;i; if1; 0; 0ig1o; ;i;i;i; ig1; 0; 0ih1o; ;i;i;i; ih1; 0; 0ii1o; ;i;i;i; ii1; 0; 0ij1o; ;i;i;i; ij1; 0; 0ik1o; ;i;i;i; ik1; 0; 0il1o; ;i;i;i; il1; 0; 0im1o; ;i;i;i; im1; 0; 0in1o; ;i;i;i; in1; 0; 0io1o; ;i;i;i; io1; 0; 0ip1o; ;i;i;i; ip1; 0; 0iq1o; ;i;i;i; iq1; 0; 0ir1o; ;i;i;i; ir1; 0; 0is1o; ;i;i;i; is1; 0; 0it1o; ;i;i;i; it1; 0; 0iu1o; ;i;i;i; iu1; 0; 0iv1o; ;i;i;i; iv1; 0; 0iw1o; ;i;i;i; iw1; 0; 0ix1o; ;i;i;i; ix1; 0; 0iy1o; ;i;i;i; iy1; 0; 0iz1o; ;i;i;i; iz1; 0; 0i{1o; ;i;i;i; i{1; 0; 0i|1o; ;i;i;i; i|1; 0; 0i}1o; ;i;i;i; i}1; 0; 0i~1o; ;i;i;i; i~1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i 2o; ;i;i;i; i 2; 0; 0i!2o; ;i;i;i; i!2; 0; 0i"2o; ;i;i;i; i"2; 0; 0i#2o; ;i;i;i; i#2; 0; 0i$2o; ;i;i;i; i$2; 0; 0i%2o; ;i;i;i; i%2; 0; 0i&2o; ;i;i;i; i&2; 0; 0i'2o; ;i;i;i; i'2; 0; 0i(2o; ;i;i;i; i(2; 0; 0i)2o; ;i;i;i; i)2; 0; 0i*2o; ;i;i;i; i*2; 0; 0i+2o; ;i;i;i; i+2; 0; 0i,2o; ;i;i;i; i,2; 0; 0i-2o; ;i;i;i; i-2; 0; 0i.2o; ;i;i;i; i.2; 0; 0i/2o; ;i;i;i; i/2; 0; 0i02o; ;i;i;i; i02; 0; 0i12o; ;i;i;i; i12; 0; 0i22o; ;i;i;i; i22; 0; 0i32o; ;i;i;i; i32; 0; 0i42o; ;i;i;i; i42; 0; 0i52o; ;i;i;i; i52; 0; 0i62o; ;i;i;i; i62; 0; 0i72o; ;i;i;i; i72; 0; 0i82o; ;i;i;i; i82; 0; 0i92o; ;i;i;i; i92; 0; 0i:2o; ;i;i;i; i:2; 0; 0i;2o; ;i;i;i; i;2; 0; 0i<2o; ;i;i;i; i<2; 0; 0i=2o; ;i;i;i; i=2; 0; 0i>2o; ;i;i;i; i>2; 0; 0i?2o; ;i;i;i; i?2; 0; 0i@2o; ;i;i;i; i@2; 0; 0iA2o; ;i;i;i; iA2; 0; 0iB2o; ;i;i;i; iB2; 0; 0iC2o; ;i;i;i; iC2; 0; 0iD2o; ;i;i;i; iD2; 0; 0iE2o; ;i;i;i; iE2; 0; 0iF2o; ;i;i;i; iF2; 0; 0iG2o; ;i;i;i; iG2; 0; 0iH2o; ;i;i;i; iH2; 0; 0iI2o; ;i;i;i; iI2; 0; 0iJ2o; ;i;i;i; iJ2; 0; 0iK2o; ;i;i;i; iK2; 0; 0iL2o; ;i;i;i; iL2; 0; 0iM2o; ;i;i;i; iM2; 0; 0iN2o; ;i;i;i; iN2; 0; 0iO2o; ;i;i;i; iO2; 0; 0iP2o; ;i;i;i; iP2; 0; 0iQ2o; ;i;i;i; iQ2; 0; 0iR2o; ;i;i;i; iR2; 0; 0iS2o; ;i;i;i; iS2; 0; 0iT2o; ;i;i;i; iT2; 0; 0iU2o; ;i;i;i; iU2; 0; 0iV2o; ;i;i;i; iV2; 0; 0iW2o; ;i;i;i; iW2; 0; 0iX2o; ;i;i;i; iX2; 0; 0iY2o; ;i;i;i; iY2; 0; 0iZ2o; ;i;i;i; iZ2; 0; 0i[2o; ;i;i;i; i[2; 0; 0i\2o; ;i;i;i; i\2; 0; 0i]2o; ;i;i;i; i]2; 0; 0i^2o; ;i;i;i; i^2; 0; 0i_2o; ;i;i;i; i_2; 0; 0i`2o; ;i;i;i; i`2; 0; 0ia2o; ;i;i;i; ia2; 0; 0ib2o; ;i;i;i; ib2; 0; 0ic2o; ;i;i;i; ic2; 0; 0id2o; ;i;i;i; id2; 0; 0ie2o; ;i;i;i; ie2; 0; 0if2o; ;i;i;i; if2; 0; 0ig2o; ;i;i;i; ig2; 0; 0ih2o; ;i;i;i; ih2; 0; 0ii2o; ;i;i;i; ii2; 0; 0ij2o; ;i;i;i; ij2; 0; 0ik2o; ;i;i;i; ik2; 0; 0il2o; ;i;i;i; il2; 0; 0im2o; ;i;i;i; im2; 0; 0in2o; ;i;i;i; in2; 0; 0io2o; ;i;i;i; io2; 0; 0ip2o; ;i;i;i; ip2; 0; 0iq2o; ;i;i;i; iq2; 0; 0ir2o; ;i;i;i; ir2; 0; 0is2o; ;i;i;i; is2; 0; 0it2o; ;i;i;i; it2; 0; 0iu2o; ;i;i;i; iu2; 0; 0iv2o; ;i;i;i; iv2; 0; 0iw2o; ;i;i;i; iw2; 0; 0ix2o; ;i;i;i; ix2; 0; 0iy2o; ;i;i;i; iy2; 0; 0iz2o; ;i;i;i; iz2; 0; 0i{2o; ;i;i;i; i{2; 0; 0i|2o; ;i;i;i; i|2; 0; 0i}2o; ;i;i;i; i}2; 0; 0i~2o; ;i;i;i; i~2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i 3o; ;i;i;i; i 3; 0; 0i!3o; ;i;i;i; i!3; 0; 0i"3o; ;i;i;i; i"3; 0; 0i#3o; ;i;i;i; i#3; 0; 0i$3o; ;i;i;i; i$3; 0; 0i%3o; ;i;i;i; i%3; 0; 0i&3o; ;i;i;i; i&3; 0; 0i'3o; ;i;i;i; i'3; 0; 0i(3o; ;i;i;i; i(3; 0; 0i)3o; ;i;i;i; i)3; 0; 0i*3o; ;i;i;i; i*3; 0; 0i+3o; ;i;i;i; i+3; 0; 0i,3o; ;i;i;i; i,3; 0; 0i-3o; ;i;i;i; i-3; 0; 0i.3o; ;i;i;i; i.3; 0; 0i/3o; ;i;i;i; i/3; 0; 0i03o; ;i;i;i; i03; 0; 0i13o; ;i;i;i; i13; 0; 0i23o; ;i;i;i; i23; 0; 0i33o; ;i;i;i; i33; 0; 0i43o; ;i;i;i; i43; 0; 0i53o; ;i;i;i; i53; 0; 0i63o; ;i;i;i; i63; 0; 0i73o; ;i;i;i; i73; 0; 0i83o; ;i;i;i; i83; 0; 0i93o; ;i;i;i; i93; 0; 0i:3o; ;i;i;i; i:3; 0; 0i;3o; ;i;i;i; i;3; 0; 0i<3o; ;i;i;i; i<3; 0; 0i=3o; ;i;i;i; i=3; 0; 0i>3o; ;i;i;i; i>3; 0; 0i?3o; ;i;i;i; i?3; 0; 0i@3o; ;i;i;i; i@3; 0; 0iA3o; ;i;i;i; iA3; 0; 0iB3o; ;i;i;i; iB3; 0; 0iC3o; ;i;i;i; iC3; 0; 0iD3o; ;i;i;i; iD3; 0; 0iE3o; ;i;i;i; iE3; 0; 0iF3o; ;i;i;i; iF3; 0; 0iG3o; ;i;i;i; iG3; 0; 0iH3o; ;i;i;i; iH3; 0; 0iI3o; ;i;i;i; iI3; 0; 0iJ3o; ;i;i;i; iJ3; 0; 0iK3o; ;i;i;i; iK3; 0; 0iL3o; ;i;i;i; iL3; 0; 0iM3o; ;i;i;i; iM3; 0; 0iN3o; ;i;i;i; iN3; 0; 0iO3o; ;i;i;i; iO3; 0; 0iP3o; ;i;i;i; iP3; 0; 0iQ3o; ;i;i;i; iQ3; 0; 0iR3o; ;i;i;i; iR3; 0; 0iS3o; ;i;i;i; iS3; 0; 0iT3o; ;i;i;i; iT3; 0; 0iU3o; ;i;i;i; iU3; 0; 0iV3o; ;i;i;i; iV3; 0; 0iW3o; ;i;i;i; iW3; 0; 0iX3o; ;i;i;i; iX3; 0; 0iY3o; ;i;i;i; iY3; 0; 0iZ3o; ;i;i;i; iZ3; 0; 0i[3o; ;i;i;i; i[3; 0; 0i\3o; ;i;i;i; i\3; 0; 0i]3o; ;i;i;i; i]3; 0; 0i^3o; ;i;i;i; i^3; 0; 0i_3o; ;i;i;i; i_3; 0; 0i`3o; ;i;i;i; i`3; 0; 0ia3o; ;i;i;i; ia3; 0; 0ib3o; ;i;i;i; ib3; 0; 0ic3o; ;i;i;i; ic3; 0; 0id3o; ;i;i;i; id3; 0; 0ie3o; ;i;i;i; ie3; 0; 0if3o; ;i;i;i; if3; 0; 0ig3o; ;i;i;i; ig3; 0; 0ih3o; ;i;i;i; ih3; 0; 0ii3o; ;i;i;i; ii3; 0; 0ij3o; ;i;i;i; ij3; 0; 0ik3o; ;i;i;i; ik3; 0; 0il3o; ;i;i;i; il3; 0; 0im3o; ;i;i;i; im3; 0; 0in3o; ;i;i;i; in3; 0; 0io3o; ;i;i;i; io3; 0; 0ip3o; ;i;i;i; ip3; 0; 0iq3o; ;i;i;i; iq3; 0; 0ir3o; ;i;i;i; ir3; 0; 0is3o; ;i;i;i; is3; 0; 0it3o; ;i;i;i; it3; 0; 0iu3o; ;i;i;i; iu3; 0; 0iv3o; ;i;i;i; iv3; 0; 0iw3o; ;i;i;i; iw3; 0; 0ix3o; ;i;i;i; ix3; 0; 0iy3o; ;i;i;i; iy3; 0; 0iz3o; ;i;i;i; iz3; 0; 0i{3o; ;i;i;i; i{3; 0; 0i|3o; ;i;i;i; i|3; 0; 0i}3o; ;i;i;i; i}3; 0; 0i~3o; ;i;i;i; i~3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i4o; ;i;i;i; i4; 0; 0i 4o; ;i;i;i; i 4; 0; 0i!4o; ;i;i;i; i!4; 0; 0i"4o; ;i;i;i; i"4; 0; 0i#4o; ;i;i;i; i#4; 0; 0i$4o; ;i;i;i; i$4; 0; 0i%4o; ;i;i;i; i%4; 0; 0i&4o; ;i;i;i; i&4; 0; 0i'4o; ;i;i;i; i'4; 0; 0i(4o; ;i;i;i; i(4; 0; 0i)4o; ;i;i;i; i)4; 0; 0i*4o; ;i;i;i; i*4; 0; 0i+4o; ;i;i;i; i+4; 0; 0i,4o; ;i;i;i; i,4; 0; 0i-4o; ;i;i;i; i-4; 0; 0i.4o; ;i;i;i; i.4; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0i ho; ;i;i;i; i h; 0; 0i ho; ;i;i;i; i h; 0; 0i ho; ;i;i;i; i h; 0; 0i ho; ;i;i;i; i h; 0; 0i ho; ;i;i;i; i h; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0i ho; ;i;i;i; i h; 0; 0i!ho; ;i;i;i; i!h; 0; 0i"ho; ;i;i;i; i"h; 0; 0i#ho; ;i;i;i; i#h; 0; 0i$ho; ;i;i;i; i$h; 0; 0i%ho; ;i;i;i; i%h; 0; 0i&ho; ;i;i;i; i&h; 0; 0i'ho; ;i;i;i; i'h; 0; 0i(ho; ;i;i;i; i(h; 0; 0i)ho; ;i;i;i; i)h; 0; 0i*ho; ;i;i;i; i*h; 0; 0i+ho; ;i;i;i; i+h; 0; 0i,ho; ;i;i;i; i,h; 0; 0i-ho; ;i;i;i; i-h; 0; 0i.ho; ;i;i;i; i.h; 0; 0i/ho; ;i;i;i; i/h; 0; 0i0ho; ;i;i;i; i0h; 0; 0i1ho; ;i;i;i; i1h; 0; 0i2ho; ;i;i;i; i2h; 0; 0i3ho; ;i;i;i; i3h; 0; 0i4ho; ;i;i;i; i4h; 0; 0i5ho; ;i;i;i; i5h; 0; 0i6ho; ;i;i;i; i6h; 0; 0i7ho; ;i;i;i; i7h; 0; 0i8ho; ;i;i;i; i8h; 0; 0i9ho; ;i;i;i; i9h; 0; 0i:ho; ;i;i;i; i:h; 0; 0i;ho; ;i;i;i; i;h; 0; 0iho; ;i;i;i; i>h; 0; 0i?ho; ;i;i;i; i?h; 0; 0i@ho; ;i;i;i; i@h; 0; 0iAho; ;i;i;i; iAh; 0; 0iBho; ;i;i;i; iBh; 0; 0iCho; ;i;i;i; iCh; 0; 0iDho; ;i;i;i; iDh; 0; 0iEho; ;i;i;i; iEh; 0; 0iFho; ;i;i;i; iFh; 0; 0iGho; ;i;i;i; iGh; 0; 0iHho; ;i;i;i; iHh; 0; 0iIho; ;i;i;i; iIh; 0; 0iJho; ;i;i;i; iJh; 0; 0iKho; ;i;i;i; iKh; 0; 0iLho; ;i;i;i; iLh; 0; 0iMho; ;i;i;i; iMh; 0; 0iNho; ;i;i;i; iNh; 0; 0iOho; ;i;i;i; iOh; 0; 0iPho; ;i;i;i; iPh; 0; 0iQho; ;i;i;i; iQh; 0; 0iRho; ;i;i;i; iRh; 0; 0iSho; ;i;i;i; iSh; 0; 0iTho; ;i;i;i; iTh; 0; 0iUho; ;i;i;i; iUh; 0; 0iVho; ;i;i;i; iVh; 0; 0iWho; ;i;i;i; iWh; 0; 0iXho; ;i;i;i; iXh; 0; 0iYho; ;i;i;i; iYh; 0; 0iZho; ;i;i;i; iZh; 0; 0i[ho; ;i;i;i; i[h; 0; 0i\ho; ;i;i;i; i\h; 0; 0i]ho; ;i;i;i; i]h; 0; 0i^ho; ;i;i;i; i^h; 0; 0i_ho; ;i;i;i; i_h; 0; 0i`ho; ;i;i;i; i`h; 0; 0iaho; ;i;i;i; iah; 0; 0ibho; ;i;i;i; ibh; 0; 0icho; ;i;i;i; ich; 0; 0idho; ;i;i;i; idh; 0; 0ieho; ;i;i;i; ieh; 0; 0ifho; ;i;i;i; ifh; 0; 0igho; ;i;i;i; igh; 0; 0ihho; ;i;i;i; ihh; 0; 0iiho; ;i;i;i; iih; 0; 0ijho; ;i;i;i; ijh; 0; 0ikho; ;i;i;i; ikh; 0; 0ilho; ;i;i;i; ilh; 0; 0imho; ;i;i;i; imh; 0; 0inho; ;i;i;i; inh; 0; 0ioho; ;i;i;i; ioh; 0; 0ipho; ;i;i;i; iph; 0; 0iqho; ;i;i;i; iqh; 0; 0irho; ;i;i;i; irh; 0; 0isho; ;i;i;i; ish; 0; 0itho; ;i;i;i; ith; 0; 0iuho; ;i;i;i; iuh; 0; 0ivho; ;i;i;i; ivh; 0; 0iwho; ;i;i;i; iwh; 0; 0ixho; ;i;i;i; ixh; 0; 0iyho; ;i;i;i; iyh; 0; 0izho; ;i;i;i; izh; 0; 0i{ho; ;i;i;i; i{h; 0; 0i|ho; ;i;i;i; i|h; 0; 0i}ho; ;i;i;i; i}h; 0; 0i~ho; ;i;i;i; i~h; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0i io; ;i;i;i; i i; 0; 0i io; ;i;i;i; i i; 0; 0i io; ;i;i;i; i i; 0; 0i io; ;i;i;i; i i; 0; 0i io; ;i;i;i; i i; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0i io; ;i;i;i; i i; 0; 0i!io; ;i;i;i; i!i; 0; 0i"io; ;i;i;i; i"i; 0; 0i#io; ;i;i;i; i#i; 0; 0i$io; ;i;i;i; i$i; 0; 0i%io; ;i;i;i; i%i; 0; 0i&io; ;i;i;i; i&i; 0; 0i'io; ;i;i;i; i'i; 0; 0i(io; ;i;i;i; i(i; 0; 0i)io; ;i;i;i; i)i; 0; 0i*io; ;i;i;i; i*i; 0; 0i+io; ;i;i;i; i+i; 0; 0i,io; ;i;i;i; i,i; 0; 0i-io; ;i;i;i; i-i; 0; 0i.io; ;i;i;i; i.i; 0; 0i/io; ;i;i;i; i/i; 0; 0i0io; ;i;i;i; i0i; 0; 0i1io; ;i;i;i; i1i; 0; 0i2io; ;i;i;i; i2i; 0; 0i3io; ;i;i;i; i3i; 0; 0i4io; ;i;i;i; i4i; 0; 0i5io; ;i;i;i; i5i; 0; 0i6io; ;i;i;i; i6i; 0; 0i7io; ;i;i;i; i7i; 0; 0i8io; ;i;i;i; i8i; 0; 0i9io; ;i;i;i; i9i; 0; 0i:io; ;i;i;i; i:i; 0; 0i;io; ;i;i;i; i;i; 0; 0iio; ;i;i;i; i>i; 0; 0i?io; ;i;i;i; i?i; 0; 0i@io; ;i;i;i; i@i; 0; 0iAio; ;i;i;i; iAi; 0; 0iBio; ;i;i;i; iBi; 0; 0iCio; ;i;i;i; iCi; 0; 0iDio; ;i;i;i; iDi; 0; 0iEio; ;i;i;i; iEi; 0; 0iFio; ;i;i;i; iFi; 0; 0iGio; ;i;i;i; iGi; 0; 0iHio; ;i;i;i; iHi; 0; 0iIio; ;i;i;i; iIi; 0; 0iJio; ;i;i;i; iJi; 0; 0iKio; ;i;i;i; iKi; 0; 0iLio; ;i;i;i; iLi; 0; 0iMio; ;i;i;i; iMi; 0; 0iNio; ;i;i;i; iNi; 0; 0iOio; ;i;i;i; iOi; 0; 0iPio; ;i;i;i; iPi; 0; 0iQio; ;i;i;i; iQi; 0; 0iRio; ;i;i;i; iRi; 0; 0iSio; ;i;i;i; iSi; 0; 0iTio; ;i;i;i; iTi; 0; 0iUio; ;i;i;i; iUi; 0; 0iVio; ;i;i;i; iVi; 0; 0iWio; ;i;i;i; iWi; 0; 0iXio; ;i;i;i; iXi; 0; 0iYio; ;i;i;i; iYi; 0; 0iZio; ;i;i;i; iZi; 0; 0i[io; ;i;i;i; i[i; 0; 0i\io; ;i;i;i; i\i; 0; 0i]io; ;i;i;i; i]i; 0; 0i^io; ;i;i;i; i^i; 0; 0i_io; ;i;i;i; i_i; 0; 0i`io; ;i;i;i; i`i; 0; 0iaio; ;i;i;i; iai; 0; 0ibio; ;i;i;i; ibi; 0; 0icio; ;i;i;i; ici; 0; 0idio; ;i;i;i; idi; 0; 0ieio; ;i;i;i; iei; 0; 0ifio; ;i;i;i; ifi; 0; 0igio; ;i;i;i; igi; 0; 0ihio; ;i;i;i; ihi; 0; 0iiio; ;i;i;i; iii; 0; 0ijio; ;i;i;i; iji; 0; 0ikio; ;i;i;i; iki; 0; 0ilio; ;i;i;i; ili; 0; 0imio; ;i;i;i; imi; 0; 0inio; ;i;i;i; ini; 0; 0ioio; ;i;i;i; ioi; 0; 0ipio; ;i;i;i; ipi; 0; 0iqio; ;i;i;i; iqi; 0; 0irio; ;i;i;i; iri; 0; 0isio; ;i;i;i; isi; 0; 0itio; ;i;i;i; iti; 0; 0iuio; ;i;i;i; iui; 0; 0ivio; ;i;i;i; ivi; 0; 0iwio; ;i;i;i; iwi; 0; 0ixio; ;i;i;i; ixi; 0; 0iyio; ;i;i;i; iyi; 0; 0izio; ;i;i;i; izi; 0; 0i{io; ;i;i;i; i{i; 0; 0i|io; ;i;i;i; i|i; 0; 0i}io; ;i;i;i; i}i; 0; 0i~io; ;i;i;i; i~i; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0i jo; ;i;i;i; i j; 0; 0i jo; ;i;i;i; i j; 0; 0i jo; ;i;i;i; i j; 0; 0i jo; ;i;i;i; i j; 0; 0i jo; ;i;i;i; i j; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0i jo; ;i;i;i; i j; 0; 0i!jo; ;i;i;i; i!j; 0; 0i"jo; ;i;i;i; i"j; 0; 0i#jo; ;i;i;i; i#j; 0; 0i$jo; ;i;i;i; i$j; 0; 0i%jo; ;i;i;i; i%j; 0; 0i&jo; ;i;i;i; i&j; 0; 0i'jo; ;i;i;i; i'j; 0; 0i(jo; ;i;i;i; i(j; 0; 0i)jo; ;i;i;i; i)j; 0; 0i*jo; ;i;i;i; i*j; 0; 0i+jo; ;i;i;i; i+j; 0; 0i,jo; ;i;i;i; i,j; 0; 0i-jo; ;i;i;i; i-j; 0; 0i.jo; ;i;i;i; i.j; 0; 0i/jo; ;i;i;i; i/j; 0; 0i0jo; ;i;i;i; i0j; 0; 0i1jo; ;i;i;i; i1j; 0; 0i2jo; ;i;i;i; i2j; 0; 0i3jo; ;i;i;i; i3j; 0; 0i4jo; ;i;i;i; i4j; 0; 0i5jo; ;i;i;i; i5j; 0; 0i6jo; ;i;i;i; i6j; 0; 0i7jo; ;i;i;i; i7j; 0; 0i8jo; ;i;i;i; i8j; 0; 0i@jo; ;i;i;i; i@j; 0; 0iAjo; ;i;i;i; iAj; 0; 0iBjo; ;i;i;i; iBj; 0; 0iCjo; ;i;i;i; iCj; 0; 0iDjo; ;i;i;i; iDj; 0; 0iEjo; ;i;i;i; iEj; 0; 0iFjo; ;i;i;i; iFj; 0; 0iGjo; ;i;i;i; iGj; 0; 0iHjo; ;i;i;i; iHj; 0; 0iIjo; ;i;i;i; iIj; 0; 0iJjo; ;i;i;i; iJj; 0; 0iKjo; ;i;i;i; iKj; 0; 0iLjo; ;i;i;i; iLj; 0; 0iMjo; ;i;i;i; iMj; 0; 0iNjo; ;i;i;i; iNj; 0; 0iOjo; ;i;i;i; iOj; 0; 0iPjo; ;i;i;i; iPj; 0; 0iQjo; ;i;i;i; iQj; 0; 0iRjo; ;i;i;i; iRj; 0; 0iSjo; ;i;i;i; iSj; 0; 0iTjo; ;i;i;i; iTj; 0; 0iUjo; ;i;i;i; iUj; 0; 0iVjo; ;i;i;i; iVj; 0; 0iWjo; ;i;i;i; iWj; 0; 0iXjo; ;i;i;i; iXj; 0; 0iYjo; ;i;i;i; iYj; 0; 0iZjo; ;i;i;i; iZj; 0; 0i[jo; ;i;i;i; i[j; 0; 0i\jo; ;i;i;i; i\j; 0; 0i]jo; ;i;i;i; i]j; 0; 0i^jo; ;i;i;i; i^j; 0; 0i`jo; ;i;i;i; i`j; 0; 0iajo; ;i;i;i; iaj; 0; 0ibjo; ;i;i;i; ibj; 0; 0icjo; ;i;i;i; icj; 0; 0idjo; ;i;i;i; idj; 0; 0iejo; ;i;i;i; iej; 0; 0ifjo; ;i;i;i; ifj; 0; 0igjo; ;i;i;i; igj; 0; 0ihjo; ;i;i;i; ihj; 0; 0iijo; ;i;i;i; iij; 0; 0injo; ;i;i;i; inj; 0; 0iojo; ;i;i;i; ioj; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0i ko; ;i;i;i; i k; 0; 0i ko; ;i;i;i; i k; 0; 0i ko; ;i;i;i; i k; 0; 0i ko; ;i;i;i; i k; 0; 0i ko; ;i;i;i; i k; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0i ko; ;i;i;i; i k; 0; 0i!ko; ;i;i;i; i!k; 0; 0i"ko; ;i;i;i; i"k; 0; 0i#ko; ;i;i;i; i#k; 0; 0i$ko; ;i;i;i; i$k; 0; 0i%ko; ;i;i;i; i%k; 0; 0i&ko; ;i;i;i; i&k; 0; 0i'ko; ;i;i;i; i'k; 0; 0i(ko; ;i;i;i; i(k; 0; 0i)ko; ;i;i;i; i)k; 0; 0i*ko; ;i;i;i; i*k; 0; 0i+ko; ;i;i;i; i+k; 0; 0i,ko; ;i;i;i; i,k; 0; 0i-ko; ;i;i;i; i-k; 0; 0i.ko; ;i;i;i; i.k; 0; 0i/ko; ;i;i;i; i/k; 0; 0i0ko; ;i;i;i; i0k; 0; 0i1ko; ;i;i;i; i1k; 0; 0i2ko; ;i;i;i; i2k; 0; 0i3ko; ;i;i;i; i3k; 0; 0i4ko; ;i;i;i; i4k; 0; 0i5ko; ;i;i;i; i5k; 0; 0i6ko; ;i;i;i; i6k; 0; 0i7ko; ;i;i;i; i7k; 0; 0i8ko; ;i;i;i; i8k; 0; 0i9ko; ;i;i;i; i9k; 0; 0i:ko; ;i;i;i; i:k; 0; 0i;ko; ;i;i;i; i;k; 0; 0iko; ;i;i;i; i>k; 0; 0i?ko; ;i;i;i; i?k; 0; 0i@ko; ;i;i;i; i@k; 0; 0iAko; ;i;i;i; iAk; 0; 0iBko; ;i;i;i; iBk; 0; 0iCko; ;i;i;i; iCk; 0; 0iDko; ;i;i;i; iDk; 0; 0iEko; ;i;i;i; iEk; 0; 0iPko; ;i;i;i; iPk; 0; 0iQko; ;i;i;i; iQk; 0; 0iRko; ;i;i;i; iRk; 0; 0iSko; ;i;i;i; iSk; 0; 0iTko; ;i;i;i; iTk; 0; 0iUko; ;i;i;i; iUk; 0; 0iVko; ;i;i;i; iVk; 0; 0iWko; ;i;i;i; iWk; 0; 0iXko; ;i;i;i; iXk; 0; 0iYko; ;i;i;i; iYk; 0; 0i[ko; ;i;i;i; i[k; 0; 0i\ko; ;i;i;i; i\k; 0; 0i]ko; ;i;i;i; i]k; 0; 0i^ko; ;i;i;i; i^k; 0; 0i_ko; ;i;i;i; i_k; 0; 0i`ko; ;i;i;i; i`k; 0; 0iako; ;i;i;i; iak; 0; 0icko; ;i;i;i; ick; 0; 0idko; ;i;i;i; idk; 0; 0ieko; ;i;i;i; iek; 0; 0ifko; ;i;i;i; ifk; 0; 0igko; ;i;i;i; igk; 0; 0ihko; ;i;i;i; ihk; 0; 0iiko; ;i;i;i; iik; 0; 0ijko; ;i;i;i; ijk; 0; 0ikko; ;i;i;i; ikk; 0; 0ilko; ;i;i;i; ilk; 0; 0imko; ;i;i;i; imk; 0; 0inko; ;i;i;i; ink; 0; 0ioko; ;i;i;i; iok; 0; 0ipko; ;i;i;i; ipk; 0; 0iqko; ;i;i;i; iqk; 0; 0irko; ;i;i;i; irk; 0; 0isko; ;i;i;i; isk; 0; 0itko; ;i;i;i; itk; 0; 0iuko; ;i;i;i; iuk; 0; 0ivko; ;i;i;i; ivk; 0; 0iwko; ;i;i;i; iwk; 0; 0i}ko; ;i;i;i; i}k; 0; 0i~ko; ;i;i;i; i~k; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0iko; ;i;i;i; ik; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0i oo; ;i;i;i; i o; 0; 0i oo; ;i;i;i; i o; 0; 0i oo; ;i;i;i; i o; 0; 0i oo; ;i;i;i; i o; 0; 0i oo; ;i;i;i; i o; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0i oo; ;i;i;i; i o; 0; 0i!oo; ;i;i;i; i!o; 0; 0i"oo; ;i;i;i; i"o; 0; 0i#oo; ;i;i;i; i#o; 0; 0i$oo; ;i;i;i; i$o; 0; 0i%oo; ;i;i;i; i%o; 0; 0i&oo; ;i;i;i; i&o; 0; 0i'oo; ;i;i;i; i'o; 0; 0i(oo; ;i;i;i; i(o; 0; 0i)oo; ;i;i;i; i)o; 0; 0i*oo; ;i;i;i; i*o; 0; 0i+oo; ;i;i;i; i+o; 0; 0i,oo; ;i;i;i; i,o; 0; 0i-oo; ;i;i;i; i-o; 0; 0i.oo; ;i;i;i; i.o; 0; 0i/oo; ;i;i;i; i/o; 0; 0i0oo; ;i;i;i; i0o; 0; 0i1oo; ;i;i;i; i1o; 0; 0i2oo; ;i;i;i; i2o; 0; 0i3oo; ;i;i;i; i3o; 0; 0i4oo; ;i;i;i; i4o; 0; 0i5oo; ;i;i;i; i5o; 0; 0i6oo; ;i;i;i; i6o; 0; 0i7oo; ;i;i;i; i7o; 0; 0i8oo; ;i;i;i; i8o; 0; 0i9oo; ;i;i;i; i9o; 0; 0i:oo; ;i;i;i; i:o; 0; 0i;oo; ;i;i;i; i;o; 0; 0ioo; ;i;i;i; i>o; 0; 0i?oo; ;i;i;i; i?o; 0; 0i@oo; ;i;i;i; i@o; 0; 0iAoo; ;i;i;i; iAo; 0; 0iBoo; ;i;i;i; iBo; 0; 0iCoo; ;i;i;i; iCo; 0; 0iDoo; ;i;i;i; iDo; 0; 0iPoo; ;i;i;i; iPo; 0; 0iQoo; ;i;i;i; iQo; 0; 0iRoo; ;i;i;i; iRo; 0; 0iSoo; ;i;i;i; iSo; 0; 0iToo; ;i;i;i; iTo; 0; 0iUoo; ;i;i;i; iUo; 0; 0iVoo; ;i;i;i; iVo; 0; 0iWoo; ;i;i;i; iWo; 0; 0iXoo; ;i;i;i; iXo; 0; 0iYoo; ;i;i;i; iYo; 0; 0iZoo; ;i;i;i; iZo; 0; 0i[oo; ;i;i;i; i[o; 0; 0i\oo; ;i;i;i; i\o; 0; 0i]oo; ;i;i;i; i]o; 0; 0i^oo; ;i;i;i; i^o; 0; 0i_oo; ;i;i;i; i_o; 0; 0i`oo; ;i;i;i; i`o; 0; 0iaoo; ;i;i;i; iao; 0; 0iboo; ;i;i;i; ibo; 0; 0icoo; ;i;i;i; ico; 0; 0idoo; ;i;i;i; ido; 0; 0ieoo; ;i;i;i; ieo; 0; 0ifoo; ;i;i;i; ifo; 0; 0igoo; ;i;i;i; igo; 0; 0ihoo; ;i;i;i; iho; 0; 0iioo; ;i;i;i; iio; 0; 0ijoo; ;i;i;i; ijo; 0; 0ikoo; ;i;i;i; iko; 0; 0iloo; ;i;i;i; ilo; 0; 0imoo; ;i;i;i; imo; 0; 0inoo; ;i;i;i; ino; 0; 0iooo; ;i;i;i; ioo; 0; 0ipoo; ;i;i;i; ipo; 0; 0iqoo; ;i;i;i; iqo; 0; 0iroo; ;i;i;i; iro; 0; 0isoo; ;i;i;i; iso; 0; 0itoo; ;i;i;i; ito; 0; 0iuoo; ;i;i;i; iuo; 0; 0ivoo; ;i;i;i; ivo; 0; 0iwoo; ;i;i;i; iwo; 0; 0ixoo; ;i;i;i; ixo; 0; 0iyoo; ;i;i;i; iyo; 0; 0izoo; ;i;i;i; izo; 0; 0i{oo; ;i;i;i; i{o; 0; 0i|oo; ;i;i;i; i|o; 0; 0i}oo; ;i;i;i; i}o; 0; 0i~oo; ;i;i;i; i~o; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0ioo; ;i;i;i; io; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; [iWiei_o; ;i;i;i; i_; 0; [iXiei`o; ;i;i;i; i`; 0; [i_iniao; ;i;i;i; ia; 0; [i_ioibo; ;i;i;i; ib; 0; [i_ipico; ;i;i;i; ic; 0; [i_iqido; ;i;i;i; id; 0; [i_irieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [iieio; ;i;i;i; i; 0; [iieio; ;i;i;i; i; 0; [iinio; ;i;i;i; i; 0; [iinio; ;i;i;i; i; 0; [iioio; ;i;i;i; i; 0; [iioio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0io; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNi o; ;i;i;i; i ; I" font; T; [iOi o; ;i;i;i; i ; I" font; T; [iPi o; ;i;i;i; i ; I" font; T; [iQi o; ;i;i;i; i ; I" font; T; [iRi o; ;i;i;i; i ; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [iki o; ;i;i;i; i ; I" font; T; [ili!o; ;i;i;i; i!; I" font; T; [imi"o; ;i;i;i; i"; I" font; T; [ini#o; ;i;i;i; i#; I" font; T; [ioi$o; ;i;i;i; i$; I" font; T; [ipi%o; ;i;i;i; i%; I" font; T; [iqi&o; ;i;i;i; i&; I" font; T; [iri'o; ;i;i;i; i'; I" font; T; [isi(o; ;i;i;i; i(; I" font; T; [iti)o; ;i;i;i; i); I" font; T; [iui*o; ;i;i;i; i*; I" font; T; [ivi+o; ;i;i;i; i+; I" font; T; [iwi,o; ;i;i;i; i,; I" font; T; [ixi-o; ;i;i;i; i-; I" font; T; [iyi.o; ;i;i;i; i.; I" font; T; [izi/o; ;i;i;i; i/; I" font; T; [i{i0o; ;i;i;i; i0; I" font; T; [i|i1o; ;i;i;i; i1; I" font; T; [i}i2o; ;i;i;i; i2; I" font; T; [i~i3o; ;i;i;i; i3; I" font; T; [ii4o; ;i;i;i; i4; I" font; T; [iFi5o; ;i;i;i; i5; I" font; T; [iGi6o; ;i;i;i; i6; I" font; T; [iHi7o; ;i;i;i; i7; I" font; T; [iIi8o; ;i;i;i; i8; I" font; T; [iJi9o; ;i;i;i; i9; I" font; T; [iKi:o; ;i;i;i; i:; I" font; T; [iLi;o; ;i;i;i; i;; I" font; T; [iMi<o; ;i;i;i; i<; I" font; T; [iNi=o; ;i;i;i; i=; I" font; T; [iOi>o; ;i;i;i; i>; I" font; T; [iPi?o; ;i;i;i; i?; I" font; T; [iQi@o; ;i;i;i; i@; I" font; T; [iRiAo; ;i;i;i; iA; I" font; T; [iSiBo; ;i;i;i; iB; I" font; T; [iTiCo; ;i;i;i; iC; I" font; T; [iUiDo; ;i;i;i; iD; I" font; T; [iViEo; ;i;i;i; iE; I" font; T; [iWiFo; ;i;i;i; iF; I" font; T; [iXiGo; ;i;i;i; iG; I" font; T; [iYiHo; ;i;i;i; iH; I" font; T; [iZiIo; ;i;i;i; iI; I" font; T; [i[iJo; ;i;i;i; iJ; I" font; T; [i\iKo; ;i;i;i; iK; I" font; T; [i]iLo; ;i;i;i; iL; I" font; T; [i^iMo; ;i;i;i; iM; I" font; T; [i_iNo; ;i;i;i; iN; I" font; T; [ifiOo; ;i;i;i; iO; I" font; T; [igiPo; ;i;i;i; iP; I" font; T; [ihiQo; ;i;i;i; iQ; I" font; T; [iiiRo; ;i;i;i; iR; I" font; T; [ijiSo; ;i;i;i; iS; I" font; T; [ikiTo; ;i;i;i; iT; I" font; T; [iliVo; ;i;i;i; iV; I" font; T; [iniWo; ;i;i;i; iW; I" font; T; [ioiXo; ;i;i;i; iX; I" font; T; [ipiYo; ;i;i;i; iY; I" font; T; [iqiZo; ;i;i;i; iZ; I" font; T; [iri[o; ;i;i;i; i[; I" font; T; [isi\o; ;i;i;i; i\; I" font; T; [iti]o; ;i;i;i; i]; I" font; T; [iui^o; ;i;i;i; i^; I" font; T; [ivi_o; ;i;i;i; i_; I" font; T; [iwi`o; ;i;i;i; i`; I" font; T; [ixiao; ;i;i;i; ia; I" font; T; [iyibo; ;i;i;i; ib; I" font; T; [izico; ;i;i;i; ic; I" font; T; [i{ido; ;i;i;i; id; I" font; T; [i|ieo; ;i;i;i; ie; I" font; T; [i}ifo; ;i;i;i; if; I" font; T; [i~igo; ;i;i;i; ig; I" font; T; [iiho; ;i;i;i; ih; I" font; T; [iFiio; ;i;i;i; ii; I" font; T; [iGijo; ;i;i;i; ij; I" font; T; [iHiko; ;i;i;i; ik; I" font; T; [iIilo; ;i;i;i; il; I" font; T; [iJimo; ;i;i;i; im; I" font; T; [iKino; ;i;i;i; in; I" font; T; [iLioo; ;i;i;i; io; I" font; T; [iMipo; ;i;i;i; ip; I" font; T; [iNiqo; ;i;i;i; iq; I" font; T; [iOiro; ;i;i;i; ir; I" font; T; [iPiso; ;i;i;i; is; I" font; T; [iQito; ;i;i;i; it; I" font; T; [iRiuo; ;i;i;i; iu; I" font; T; [iSivo; ;i;i;i; iv; I" font; T; [iTiwo; ;i;i;i; iw; I" font; T; [iUixo; ;i;i;i; ix; I" font; T; [iViyo; ;i;i;i; iy; I" font; T; [iWizo; ;i;i;i; iz; I" font; T; [iXi{o; ;i;i;i; i{; I" font; T; [iYi|o; ;i;i;i; i|; I" font; T; [iZi}o; ;i;i;i; i}; I" font; T; [i[i~o; ;i;i;i; i~; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJi o; ;i;i;i; i ; I" font; T; [iKi o; ;i;i;i; i ; I" font; T; [iLi o; ;i;i;i; i ; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igi o; ;i;i;i; i ; I" font; T; [ihi!o; ;i;i;i; i!; I" font; T; [iii"o; ;i;i;i; i"; I" font; T; [iji#o; ;i;i;i; i#; I" font; T; [iki$o; ;i;i;i; i$; I" font; T; [ili%o; ;i;i;i; i%; I" font; T; [imi&o; ;i;i;i; i&; I" font; T; [ini'o; ;i;i;i; i'; I" font; T; [ioi(o; ;i;i;i; i(; I" font; T; [ipi)o; ;i;i;i; i); I" font; T; [iqi*o; ;i;i;i; i*; I" font; T; [iri+o; ;i;i;i; i+; I" font; T; [isi,o; ;i;i;i; i,; I" font; T; [iti-o; ;i;i;i; i-; I" font; T; [iui.o; ;i;i;i; i.; I" font; T; [ivi/o; ;i;i;i; i/; I" font; T; [iwi0o; ;i;i;i; i0; I" font; T; [ixi1o; ;i;i;i; i1; I" font; T; [iyi2o; ;i;i;i; i2; I" font; T; [izi3o; ;i;i;i; i3; I" font; T; [i{i4o; ;i;i;i; i4; I" font; T; [i|i5o; ;i;i;i; i5; I" font; T; [i}i6o; ;i;i;i; i6; I" font; T; [i~i7o; ;i;i;i; i7; I" font; T; [ii8o; ;i;i;i; i8; I" font; T; [iFi9o; ;i;i;i; i9; I" font; T; [iGi;o; ;i;i;i; i;; I" font; T; [iIi<o; ;i;i;i; i<; I" font; T; [iJi=o; ;i;i;i; i=; I" font; T; [iKi>o; ;i;i;i; i>; I" font; T; [iLi@o; ;i;i;i; i@; I" font; T; [iNiAo; ;i;i;i; iA; I" font; T; [iOiBo; ;i;i;i; iB; I" font; T; [iPiCo; ;i;i;i; iC; I" font; T; [iQiDo; ;i;i;i; iD; I" font; T; [iRiFo; ;i;i;i; iF; I" font; T; [iTiJo; ;i;i;i; iJ; I" font; T; [iXiKo; ;i;i;i; iK; I" font; T; [iYiLo; ;i;i;i; iL; I" font; T; [iZiMo; ;i;i;i; iM; I" font; T; [i[iNo; ;i;i;i; iN; I" font; T; [i\iOo; ;i;i;i; iO; I" font; T; [i]iPo; ;i;i;i; iP; I" font; T; [i^iRo; ;i;i;i; iR; I" font; T; [ifiSo; ;i;i;i; iS; I" font; T; [igiTo; ;i;i;i; iT; I" font; T; [ihiUo; ;i;i;i; iU; I" font; T; [iiiVo; ;i;i;i; iV; I" font; T; [ijiWo; ;i;i;i; iW; I" font; T; [ikiXo; ;i;i;i; iX; I" font; T; [iliYo; ;i;i;i; iY; I" font; T; [imiZo; ;i;i;i; iZ; I" font; T; [ini[o; ;i;i;i; i[; I" font; T; [ioi\o; ;i;i;i; i\; I" font; T; [ipi]o; ;i;i;i; i]; I" font; T; [iqi^o; ;i;i;i; i^; I" font; T; [iri_o; ;i;i;i; i_; I" font; T; [isi`o; ;i;i;i; i`; I" font; T; [itiao; ;i;i;i; ia; I" font; T; [iuibo; ;i;i;i; ib; I" font; T; [ivico; ;i;i;i; ic; I" font; T; [iwido; ;i;i;i; id; I" font; T; [ixieo; ;i;i;i; ie; I" font; T; [iyifo; ;i;i;i; if; I" font; T; [izigo; ;i;i;i; ig; I" font; T; [i{iho; ;i;i;i; ih; I" font; T; [i|iio; ;i;i;i; ii; I" font; T; [i}ijo; ;i;i;i; ij; I" font; T; [i~iko; ;i;i;i; ik; I" font; T; [iilo; ;i;i;i; il; I" font; T; [iFimo; ;i;i;i; im; I" font; T; [iGino; ;i;i;i; in; I" font; T; [iHioo; ;i;i;i; io; I" font; T; [iIipo; ;i;i;i; ip; I" font; T; [iJiqo; ;i;i;i; iq; I" font; T; [iKiro; ;i;i;i; ir; I" font; T; [iLiso; ;i;i;i; is; I" font; T; [iMito; ;i;i;i; it; I" font; T; [iNiuo; ;i;i;i; iu; I" font; T; [iOivo; ;i;i;i; iv; I" font; T; [iPiwo; ;i;i;i; iw; I" font; T; [iQixo; ;i;i;i; ix; I" font; T; [iRiyo; ;i;i;i; iy; I" font; T; [iSizo; ;i;i;i; iz; I" font; T; [iTi{o; ;i;i;i; i{; I" font; T; [iUi|o; ;i;i;i; i|; I" font; T; [iVi}o; ;i;i;i; i}; I" font; T; [iWi~o; ;i;i;i; i~; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [iIio; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iFi o; ;i;i;i; i ; I" font; T; [iGi o; ;i;i;i; i ; I" font; T; [iHi o; ;i;i;i; i ; I" font; T; [iIi o; ;i;i;i; i ; I" font; T; [iJi o; ;i;i;i; i ; I" font; T; [iKio; ;i;i;i; i; I" font; T; [iLio; ;i;i;i; i; I" font; T; [iMio; ;i;i;i; i; I" font; T; [iNio; ;i;i;i; i; I" font; T; [iOio; ;i;i;i; i; I" font; T; [iPio; ;i;i;i; i; I" font; T; [iQio; ;i;i;i; i; I" font; T; [iRio; ;i;i;i; i; I" font; T; [iSio; ;i;i;i; i; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]i o; ;i;i;i; i ; I" font; T; [i^i!o; ;i;i;i; i!; I" font; T; [i_i"o; ;i;i;i; i"; I" font; T; [ifi#o; ;i;i;i; i#; I" font; T; [igi$o; ;i;i;i; i$; I" font; T; [ihi%o; ;i;i;i; i%; I" font; T; [iii&o; ;i;i;i; i&; I" font; T; [iji'o; ;i;i;i; i'; I" font; T; [iki(o; ;i;i;i; i(; I" font; T; [ili)o; ;i;i;i; i); I" font; T; [imi*o; ;i;i;i; i*; I" font; T; [ini+o; ;i;i;i; i+; I" font; T; [ioi,o; ;i;i;i; i,; I" font; T; [ipi-o; ;i;i;i; i-; I" font; T; [iqi.o; ;i;i;i; i.; I" font; T; [iri/o; ;i;i;i; i/; I" font; T; [isi0o; ;i;i;i; i0; I" font; T; [iti1o; ;i;i;i; i1; I" font; T; [iui2o; ;i;i;i; i2; I" font; T; [ivi3o; ;i;i;i; i3; I" font; T; [iwi4o; ;i;i;i; i4; I" font; T; [ixi5o; ;i;i;i; i5; I" font; T; [iyi6o; ;i;i;i; i6; I" font; T; [izi7o; ;i;i;i; i7; I" font; T; [i{i8o; ;i;i;i; i8; I" font; T; [i|i9o; ;i;i;i; i9; I" font; T; [i}i:o; ;i;i;i; i:; I" font; T; [i~i;o; ;i;i;i; i;; I" font; T; [ii<o; ;i;i;i; i<; I" font; T; [iFi=o; ;i;i;i; i=; I" font; T; [iGi>o; ;i;i;i; i>; I" font; T; [iHi?o; ;i;i;i; i?; I" font; T; [iIi@o; ;i;i;i; i@; I" font; T; [iJiAo; ;i;i;i; iA; I" font; T; [iKiBo; ;i;i;i; iB; I" font; T; [iLiCo; ;i;i;i; iC; I" font; T; [iMiDo; ;i;i;i; iD; I" font; T; [iNiEo; ;i;i;i; iE; I" font; T; [iOiFo; ;i;i;i; iF; I" font; T; [iPiGo; ;i;i;i; iG; I" font; T; [iQiHo; ;i;i;i; iH; I" font; T; [iRiIo; ;i;i;i; iI; I" font; T; [iSiJo; ;i;i;i; iJ; I" font; T; [iTiKo; ;i;i;i; iK; I" font; T; [iUiLo; ;i;i;i; iL; I" font; T; [iViMo; ;i;i;i; iM; I" font; T; [iWiNo; ;i;i;i; iN; I" font; T; [iXiOo; ;i;i;i; iO; I" font; T; [iYiPo; ;i;i;i; iP; I" font; T; [iZiQo; ;i;i;i; iQ; I" font; T; [i[iRo; ;i;i;i; iR; I" font; T; [i\iSo; ;i;i;i; iS; I" font; T; [i]iTo; ;i;i;i; iT; I" font; T; [i^iUo; ;i;i;i; iU; I" font; T; [i_iVo; ;i;i;i; iV; I" font; T; [ifiWo; ;i;i;i; iW; I" font; T; [igiXo; ;i;i;i; iX; I" font; T; [ihiYo; ;i;i;i; iY; I" font; T; [iiiZo; ;i;i;i; iZ; I" font; T; [iji[o; ;i;i;i; i[; I" font; T; [iki\o; ;i;i;i; i\; I" font; T; [ili]o; ;i;i;i; i]; I" font; T; [imi^o; ;i;i;i; i^; I" font; T; [ini_o; ;i;i;i; i_; I" font; T; [ioi`o; ;i;i;i; i`; I" font; T; [ipiao; ;i;i;i; ia; I" font; T; [iqibo; ;i;i;i; ib; I" font; T; [irico; ;i;i;i; ic; I" font; T; [isido; ;i;i;i; id; I" font; T; [itieo; ;i;i;i; ie; I" font; T; [iuifo; ;i;i;i; if; I" font; T; [ivigo; ;i;i;i; ig; I" font; T; [iwiho; ;i;i;i; ih; I" font; T; [ixiio; ;i;i;i; ii; I" font; T; [iyijo; ;i;i;i; ij; I" font; T; [iziko; ;i;i;i; ik; I" font; T; [i{ilo; ;i;i;i; il; I" font; T; [i|imo; ;i;i;i; im; I" font; T; [i}ino; ;i;i;i; in; I" font; T; [i~ioo; ;i;i;i; io; I" font; T; [iipo; ;i;i;i; ip; I" font; T; [iFiqo; ;i;i;i; iq; I" font; T; [iGiro; ;i;i;i; ir; I" font; T; [iHiso; ;i;i;i; is; I" font; T; [iIito; ;i;i;i; it; I" font; T; [iJiuo; ;i;i;i; iu; I" font; T; [iKivo; ;i;i;i; iv; I" font; T; [iLiwo; ;i;i;i; iw; I" font; T; [iMixo; ;i;i;i; ix; I" font; T; [iNiyo; ;i;i;i; iy; I" font; T; [iOizo; ;i;i;i; iz; I" font; T; [iPi{o; ;i;i;i; i{; I" font; T; [iQi|o; ;i;i;i; i|; I" font; T; [iRi}o; ;i;i;i; i}; I" font; T; [iSi~o; ;i;i;i; i~; I" font; T; [iTio; ;i;i;i; i; I" font; T; [iUio; ;i;i;i; i; I" font; T; [iVio; ;i;i;i; i; I" font; T; [iWio; ;i;i;i; i; I" font; T; [iXio; ;i;i;i; i; I" font; T; [iYio; ;i;i;i; i; I" font; T; [iZio; ;i;i;i; i; I" font; T; [i[io; ;i;i;i; i; I" font; T; [i\io; ;i;i;i; i; I" font; T; [i]io; ;i;i;i; i; I" font; T; [i^io; ;i;i;i; i; I" font; T; [i_io; ;i;i;i; i; I" font; T; [ifio; ;i;i;i; i; I" font; T; [igio; ;i;i;i; i; I" font; T; [ihio; ;i;i;i; i; I" font; T; [iiio; ;i;i;i; i; I" font; T; [ijio; ;i;i;i; i; I" font; T; [ikio; ;i;i;i; i; I" font; T; [ilio; ;i;i;i; i; I" font; T; [imio; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [ioio; ;i;i;i; i; I" font; T; [ipio; ;i;i;i; i; I" font; T; [iqio; ;i;i;i; i; I" font; T; [irio; ;i;i;i; i; I" font; T; [isio; ;i;i;i; i; I" font; T; [itio; ;i;i;i; i; I" font; T; [iuio; ;i;i;i; i; I" font; T; [ivio; ;i;i;i; i; I" font; T; [iwio; ;i;i;i; i; I" font; T; [ixio; ;i;i;i; i; I" font; T; [iyio; ;i;i;i; i; I" font; T; [izio; ;i;i;i; i; I" font; T; [i{io; ;i;i;i; i; I" font; T; [i|io; ;i;i;i; i; I" font; T; [i}io; ;i;i;i; i; I" font; T; [i~io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i1io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [ii o; ;i;i;i; i ; I" font; T; [ii!o; ;i;i;i; i!; I" font; T; [ii"o; ;i;i;i; i"; I" font; T; [ii#o; ;i;i;i; i#; I" font; T; [ii$o; ;i;i;i; i$; I" font; T; [ii%o; ;i;i;i; i%; I" font; T; [ii&o; ;i;i;i; i&; I" font; T; [ii'o; ;i;i;i; i'; I" font; T; [ii(o; ;i;i;i; i(; I" font; T; [ii)o; ;i;i;i; i); I" font; T; [ii*o; ;i;i;i; i*; I" font; T; [ii+o; ;i;i;i; i+; I" font; T; [ii,o; ;i;i;i; i,; I" font; T; [ii-o; ;i;i;i; i-; I" font; T; [ii.o; ;i;i;i; i.; I" font; T; [ii/o; ;i;i;i; i/; I" font; T; [ii0o; ;i;i;i; i0; I" font; T; [ii1o; ;i;i;i; i1; I" font; T; [ii2o; ;i;i;i; i2; I" font; T; [ii3o; ;i;i;i; i3; I" font; T; [ii4o; ;i;i;i; i4; I" font; T; [ii5o; ;i;i;i; i5; I" font; T; [i"i6o; ;i;i;i; i6; I" font; T; [ii7o; ;i;i;i; i7; I" font; T; [ii8o; ;i;i;i; i8; I" font; T; [ii9o; ;i;i;i; i9; I" font; T; [ii:o; ;i;i;i; i:; I" font; T; [ii;o; ;i;i;i; i;; I" font; T; [ii<o; ;i;i;i; i<; I" font; T; [ii=o; ;i;i;i; i=; I" font; T; [ii>o; ;i;i;i; i>; I" font; T; [ii?o; ;i;i;i; i?; I" font; T; [ii@o; ;i;i;i; i@; I" font; T; [iiAo; ;i;i;i; iA; I" font; T; [iiBo; ;i;i;i; iB; I" font; T; [iiCo; ;i;i;i; iC; I" font; T; [iiDo; ;i;i;i; iD; I" font; T; [iiEo; ;i;i;i; iE; I" font; T; [iiFo; ;i;i;i; iF; I" font; T; [iiGo; ;i;i;i; iG; I" font; T; [iiHo; ;i;i;i; iH; I" font; T; [iiIo; ;i;i;i; iI; I" font; T; [iiJo; ;i;i;i; iJ; I" font; T; [iiKo; ;i;i;i; iK; I" font; T; [iiLo; ;i;i;i; iL; I" font; T; [iiMo; ;i;i;i; iM; I" font; T; [iiNo; ;i;i;i; iN; I" font; T; [iiOo; ;i;i;i; iO; I" font; T; [i"iPo; ;i;i;i; iP; I" font; T; [iiQo; ;i;i;i; iQ; I" font; T; [iiRo; ;i;i;i; iR; I" font; T; [iiSo; ;i;i;i; iS; I" font; T; [iiTo; ;i;i;i; iT; I" font; T; [iiUo; ;i;i;i; iU; I" font; T; [iiVo; ;i;i;i; iV; I" font; T; [iiWo; ;i;i;i; iW; I" font; T; [iiXo; ;i;i;i; iX; I" font; T; [iiYo; ;i;i;i; iY; I" font; T; [iiZo; ;i;i;i; iZ; I" font; T; [ii[o; ;i;i;i; i[; I" font; T; [ii\o; ;i;i;i; i\; I" font; T; [ii]o; ;i;i;i; i]; I" font; T; [ii^o; ;i;i;i; i^; I" font; T; [ii_o; ;i;i;i; i_; I" font; T; [ii`o; ;i;i;i; i`; I" font; T; [iiao; ;i;i;i; ia; I" font; T; [iibo; ;i;i;i; ib; I" font; T; [iico; ;i;i;i; ic; I" font; T; [iido; ;i;i;i; id; I" font; T; [iieo; ;i;i;i; ie; I" font; T; [iifo; ;i;i;i; if; I" font; T; [iigo; ;i;i;i; ig; I" font; T; [iiho; ;i;i;i; ih; I" font; T; [iiio; ;i;i;i; ii; I" font; T; [iijo; ;i;i;i; ij; I" font; T; [iiko; ;i;i;i; ik; I" font; T; [iilo; ;i;i;i; il; I" font; T; [iimo; ;i;i;i; im; I" font; T; [iino; ;i;i;i; in; I" font; T; [iioo; ;i;i;i; io; I" font; T; [i"ipo; ;i;i;i; ip; I" font; T; [iiqo; ;i;i;i; iq; I" font; T; [iiro; ;i;i;i; ir; I" font; T; [iiso; ;i;i;i; is; I" font; T; [iito; ;i;i;i; it; I" font; T; [iiuo; ;i;i;i; iu; I" font; T; [iivo; ;i;i;i; iv; I" font; T; [iiwo; ;i;i;i; iw; I" font; T; [iixo; ;i;i;i; ix; I" font; T; [iiyo; ;i;i;i; iy; I" font; T; [iizo; ;i;i;i; iz; I" font; T; [ii{o; ;i;i;i; i{; I" font; T; [ii|o; ;i;i;i; i|; I" font; T; [ii}o; ;i;i;i; i}; I" font; T; [ii~o; ;i;i;i; i~; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i"io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i;io; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" font; T; [i'io; ;i;i;i; i; I" font; T; [i(io; ;i;i;i; i; I" font; T; [i,io; ;i;i;i; i; I" font; T; [i/io; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [i2io; ;i;i;i; i; I" font; T; [i-io; ;i;i;i; i; I" font; T; [i7i o; ;i;i;i; i ; I" font; T; [iJi o; ;i;i;i; i ; I" font; T; [iCi o; ;i;i;i; i ; I" font; T; [iDi o; ;i;i;i; i ; I" font; T; [iEi o; ;i;i;i; i ; I" font; T; [iFio; ;i;i;i; i; I" font; T; [i3io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [iAio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [iBio; ;i;i;i; i; I" font; T; [i1io; ;i;i;i; i; I" font; T; [i4io; ;i;i;i; i; I" font; T; [i*io; ;i;i;i; i; I" font; T; [i+io; ;i;i;i; i; I" font; T; [i.io; ;i;i;i; i; I" font; T; [i0io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [inio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [iio; ;i;i;i; i; I" font; T; [ioi!o; ;i;i;i; i!; I" font; T; [i(i"o; ;i;i;i; i"; I" font; T; [i,i$o; ;i;i;i; i$; I" font; T; [iGi'o; ;i;i;i; i'; I" font; T; [i-i)o; ;i;i;i; i); I" font; T; [iJi*o; ;i;i;i; i*; I" font; T; [iCi+o; ;i;i;i; i+; I" font; T; [iDi,o; ;i;i;i; i,; I" font; T; [iEi-o; ;i;i;i; i-; I" font; T; [iFi.o; ;i;i;i; i.; I" font; T; [i3i/o; ;i;i;i; i/; I" font; T; [i9i0o; ;i;i;i; i0; I" font; T; [iAi1o; ;i;i;i; i1; I" font; T; [i5i2o; ;i;i;i; i2; I" font; T; [iBi4o; ;i;i;i; i4; I" font; T; [i4i5o; ;i;i;i; i5; I" font; T; [i*i6o; ;i;i;i; i6; I" font; T; [i+i7o; ;i;i;i; i7; I" font; T; [i.i9o; ;i;i;i; i9; I" font; T; [i6i;o; ;i;i;i; i;; I" font; T; [i:iBo; ;i;i;i; iB; I" font; T; [i,iGo; ;i;i;i; iG; I" font; T; [i-iIo; ;i;i;i; iI; I" font; T; [iJiKo; ;i;i;i; iK; I" font; T; [iDiMo; ;i;i;i; iM; I" font; T; [iFiNo; ;i;i;i; iN; I" font; T; [i3iOo; ;i;i;i; iO; I" font; T; [i9iQo; ;i;i;i; iQ; I" font; T; [i5iRo; ;i;i;i; iR; I" font; T; [iBiTo; ;i;i;i; iT; I" font; T; [i4iWo; ;i;i;i; iW; I" font; T; [i.iYo; ;i;i;i; iY; I" font; T; [i6i[o; ;i;i;i; i[; I" font; T; [i:i]o; ;i;i;i; i]; I" font; T; [ii_o; ;i;i;i; i_; I" font; T; [ioiao; ;i;i;i; ia; I" font; T; [i(ibo; ;i;i;i; ib; I" font; T; [i,ido; ;i;i;i; id; I" font; T; [iGigo; ;i;i;i; ig; I" font; T; [i-iho; ;i;i;i; ih; I" font; T; [i7iio; ;i;i;i; ii; I" font; T; [iJijo; ;i;i;i; ij; I" font; T; [iCilo; ;i;i;i; il; I" font; T; [iEimo; ;i;i;i; im; I" font; T; [iFino; ;i;i;i; in; I" font; T; [i3ioo; ;i;i;i; io; I" font; T; [i9ipo; ;i;i;i; ip; I" font; T; [iAiqo; ;i;i;i; iq; I" font; T; [i5iro; ;i;i;i; ir; I" font; T; [iBito; ;i;i;i; it; I" font; T; [i4iuo; ;i;i;i; iu; I" font; T; [i*ivo; ;i;i;i; iv; I" font; T; [i+iwo; ;i;i;i; iw; I" font; T; [i.iyo; ;i;i;i; iy; I" font; T; [i6izo; ;i;i;i; iz; I" font; T; [i8i{o; ;i;i;i; i{; I" font; T; [i:i|o; ;i;i;i; i|; I" font; T; [ini~o; ;i;i;i; i~; I" font; T; [iio; ;i;i;i; i; I" font; T; [i'io; ;i;i;i; i; I" font; T; [i(io; ;i;i;i; i; I" font; T; [i,io; ;i;i;i; i; I" font; T; [i/io; ;i;i;i; i; I" font; T; [iGio; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [i2io; ;i;i;i; i; I" font; T; [i-io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iDio; ;i;i;i; i; I" font; T; [iEio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [i3io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [iAio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [iBio; ;i;i;i; i; I" font; T; [i1io; ;i;i;i; i; I" font; T; [i4io; ;i;i;i; i; I" font; T; [i*io; ;i;i;i; i; I" font; T; [i+io; ;i;i;i; i; I" font; T; [i.io; ;i;i;i; i; I" font; T; [i0io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; I" font; T; [i(io; ;i;i;i; i; I" font; T; [i,io; ;i;i;i; i; I" font; T; [i/io; ;i;i;i; i; I" font; T; [iHio; ;i;i;i; i; I" font; T; [i2io; ;i;i;i; i; I" font; T; [i-io; ;i;i;i; i; I" font; T; [i7io; ;i;i;i; i; I" font; T; [iJio; ;i;i;i; i; I" font; T; [iDio; ;i;i;i; i; I" font; T; [iEio; ;i;i;i; i; I" font; T; [iFio; ;i;i;i; i; I" font; T; [i3io; ;i;i;i; i; I" font; T; [i9io; ;i;i;i; i; I" font; T; [iAio; ;i;i;i; i; I" font; T; [i5io; ;i;i;i; i; I" font; T; [iBio; ;i;i;i; i; I" font; T; [i1io; ;i;i;i; i; I" font; T; [i4io; ;i;i;i; i; I" font; T; [i*io; ;i;i;i; i; I" font; T; [i+io; ;i;i;i; i; I" font; T; [i.io; ;i;i;i; i; I" font; T; [i0io; ;i;i;i; i; I" font; T; [i6io; ;i;i;i; i; I" font; T; [i8io; ;i;i;i; i; I" font; T; [i:io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" compat; T; [i5i3io; ;i;i;i; i; I" compat; T; [i5i1io; ;i;i;i; i; I" compat; T; [i6i1io; ;i;i;i; i; I" compat; T; [i7i1io; ;i;i;i; i; I" compat; T; [i8i1io; ;i;i;i; i; I" compat; T; [i9i1io; ;i;i;i; i; I" compat; T; [i:i1io; ;i;i;i; i; I" compat; T; [i;i1io; ;i;i;i; i; I" compat; T; [ii1i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; I" compat; T; [i-iFi.io; ;i;i;i; i; I" compat; T; [i-iGi.io; ;i;i;i; i; I" compat; T; [i-iHi.io; ;i;i;i; i; I" compat; T; [i-iIi.io; ;i;i;i; i; I" compat; T; [i-iJi.io; ;i;i;i; i; I" compat; T; [i-iKi.io; ;i;i;i; i; I" compat; T; [i-iLi.io; ;i;i;i; i; I" compat; T; [i-iMi.io; ;i;i;i; i; I" compat; T; [i-iNi.io; ;i;i;i; i; I" compat; T; [i-iOi.io; ;i;i;i; i; I" compat; T; [i-iPi.io; ;i;i;i; i; I" compat; T; [i-iQi.io; ;i;i;i; i; I" compat; T; [i-iRi.io; ;i;i;i; i; I" compat; T; [i-iSi.io; ;i;i;i; i; I" compat; T; [i-iTi.io; ;i;i;i; i; I" compat; T; [i-iUi.i o; ;i;i;i; i ; I" compat; T; [i-iVi.i!o; ;i;i;i; i!; I" compat; T; [i-iWi.i"o; ;i;i;i; i"; I" compat; T; [i-iXi.i#o; ;i;i;i; i#; I" compat; T; [i-iYi.i$o; ;i;i;i; i$; I" compat; T; [i-iZi.i%o; ;i;i;i; i%; I" compat; T; [i-i[i.i&o; ;i;i;i; i&; I" compat; T; [i-i\i.i'o; ;i;i;i; i'; I" compat; T; [i-i]i.i(o; ;i;i;i; i(; I" compat; T; [i-i^i.i)o; ;i;i;i; i); I" compat; T; [i-i_i.i*o; ;i;i;i; i*; I" compat; T; [i0iXi0i+o; ;i;i;i; i+; I" circle; T; [iHi,o; ;i;i;i; i,; I" circle; T; [iWi-o; ;i;i;i; i-; I" circle; T; [iHiIi.o; ;i;i;i; i.; I" circle; T; [i\i_i0o; ;i;i;i; i0; I" square; T; [iFi1o; ;i;i;i; i1; I" square; T; [iGi2o; ;i;i;i; i2; I" square; T; [iHi3o; ;i;i;i; i3; I" square; T; [iIi4o; ;i;i;i; i4; I" square; T; [iJi5o; ;i;i;i; i5; I" square; T; [iKi6o; ;i;i;i; i6; I" square; T; [iLi7o; ;i;i;i; i7; I" square; T; [iMi8o; ;i;i;i; i8; I" square; T; [iNi9o; ;i;i;i; i9; I" square; T; [iOi:o; ;i;i;i; i:; I" square; T; [iPi;o; ;i;i;i; i;; I" square; T; [iQi<o; ;i;i;i; i<; I" square; T; [iRi=o; ;i;i;i; i=; I" square; T; [iSi>o; ;i;i;i; i>; I" square; T; [iTi?o; ;i;i;i; i?; I" square; T; [iUi@o; ;i;i;i; i@; I" square; T; [iViAo; ;i;i;i; iA; I" square; T; [iWiBo; ;i;i;i; iB; I" square; T; [iXiCo; ;i;i;i; iC; I" square; T; [iYiDo; ;i;i;i; iD; I" square; T; [iZiEo; ;i;i;i; iE; I" square; T; [i[iFo; ;i;i;i; iF; I" square; T; [i\iGo; ;i;i;i; iG; I" square; T; [i]iHo; ;i;i;i; iH; I" square; T; [i^iIo; ;i;i;i; iI; I" square; T; [i_iJo; ;i;i;i; iJ; I" square; T; [iMi[iKo; ;i;i;i; iK; I" square; T; [iRi[iLo; ;i;i;i; iL; I" square; T; [iXiIiMo; ;i;i;i; iM; I" square; T; [iXiXiNo; ;i;i;i; iN; I" square; T; [iUiUi[iOo; ;i;i;i; iO; I" square; T; [i\iHiPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; I" super; T; [iRiHiko; ;i;i;i; ik; I" super; T; [iRiIipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" square; T; [iIiOio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; I" square; T; [i{0iK0io; ;i;i;i; i; I" square; T; [i0i0io; ;i;i;i; i; I" square; T; [i0io; ;i;i;i; i; I" square; T; [iKbio; ;i;i;i; i; I" square; T; [iW[io; ;i;i;i; i; I" square; T; [iSio; ;i;i;i; i; I" square; T; [i0io; ;i;i;i; i; I" square; T; [iNio; ;i;i;i; i; I" square; T; [iYio; ;i;i;i; i; I" square; T; [iio; ;i;i;i; i; I" square; T; [i)Yio; ;i;i;i; i; I" square; T; [iNio; ;i;i;i; i; I" square; T; [i fio; ;i;i;i; i; I" square; T; [i!qio; ;i;i;i; i; I" square; T; [ieio; ;i;i;i; i; I" square; T; [iMRio; ;i;i;i; i; I" square; T; [i_io; ;i;i;i; i; I" square; T; [iQio; ;i;i;i; i; I" square; T; [iei o; ;i;i;i; i ; I" square; T; [iRi!o; ;i;i;i; i!; I" square; T; [iB}i"o; ;i;i;i; i"; I" square; T; [iui#o; ;i;i;i; i#; I" square; T; [ii$o; ;i;i;i; i$; I" square; T; [iXi%o; ;i;i;i; i%; I" square; T; [i9Ti&o; ;i;i;i; i&; I" square; T; [ioi'o; ;i;i;i; i'; I" square; T; [ibi(o; ;i;i;i; i(; I" square; T; [iUci)o; ;i;i;i; i); I" square; T; [iNi*o; ;i;i;i; i*; I" square; T; [i Ni+o; ;i;i;i; i+; I" square; T; [iJi,o; ;i;i;i; i,; I" square; T; [i]i-o; ;i;i;i; i-; I" square; T; [i-Ni.o; ;i;i;i; i.; I" square; T; [iSi/o; ;i;i;i; i/; I" square; T; [ici0o; ;i;i;i; i0; I" square; T; [ipi1o; ;i;i;i; i1; I" square; T; [iSbi2o; ;i;i;i; i2; I" square; T; [iyi3o; ;i;i;i; i3; I" square; T; [izzi4o; ;i;i;i; i4; I" square; T; [iTi5o; ;i;i;i; i5; I" square; T; [ini6o; ;i;i;i; i6; I" square; T; [i gi7o; ;i;i;i; i7; I" square; T; [igi8o; ;i;i;i; i8; I" square; T; [i3ui9o; ;i;i;i; i9; I" square; T; [irRi:o; ;i;i;i; i:; I" square; T; [iUi@o; ;i;i;i; i@; I" compat; T; [i0i,gi0iAo; ;i;i;i; iA; I" compat; T; [i0i Ni0iBo; ;i;i;i; iB; I" compat; T; [i0iNi0iCo; ;i;i;i; iC; I" compat; T; [i0i[i0iDo; ;i;i;i; iD; I" compat; T; [i0ipi0iEo; ;i;i;i; iE; I" compat; T; [i0iSbi0iFo; ;i;i;i; iF; I" compat; T; [i0ivi0iGo; ;i;i;i; iG; I" compat; T; [i0iRi0iHo; ;i;i;i; iH; I" compat; T; [i0iWei0iPo; ;i;i;i; iP; I" circle; T; [i_iQo; ;i;i;i; iQ; I" circle; T; [iSio; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i֦o; ;i;i;i; i֦; 0; 0io; ;i;i;i; i; 0; 0i4o; ;i;i;i; i4; 0; 0i@o; ;i;i;i; i@; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; [i=Nio; ;i;i;i; i; 0; [i8Nio; ;i;i;i; i; 0; [iANio; ;i;i;i; i; 0; [i"io; ;i;i;i; i; 0; [i`Oio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iOio; ;i;i;i; i; 0; [iPio; ;i;i;i; i; 0; [izPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [iPi o; ;i;i;i; i ; 0; [i4i o; ;i;i;i; i ; 0; [i:io; ;i;i;i; i; 0; [iMQio; ;i;i;i; i; 0; [iTQio; ;i;i;i; i; 0; [idQio; ;i;i;i; i; 0; [iwQio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i4io; ;i;i;i; i; 0; [igQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iKio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iNio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iߑio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [i4i o; ;i;i;i; i ; 0; [i;Ri!o; ;i;i;i; i!; 0; [iFRi"o; ;i;i;i; i"; 0; [irRi#o; ;i;i;i; i#; 0; [iwRi$o; ;i;i;i; i$; 0; [i5i%o; ;i;i;i; i%; 0; [iRi&o; ;i;i;i; i&; 0; [iRi'o; ;i;i;i; i'; 0; [iRi(o; ;i;i;i; i(; 0; [iRi)o; ;i;i;i; i); 0; [iSi*o; ;i;i;i; i*; 0; [iSi+o; ;i;i;i; i+; 0; [iSi,o; ;i;i;i; i,; 0; [iISi-o; ;i;i;i; i-; 0; [iQSi.o; ;i;i;i; i.; 0; [iZSi/o; ;i;i;i; i/; 0; [isSi0o; ;i;i;i; i0; 0; [i}Si1o; ;i;i;i; i1; 0; [iSi2o; ;i;i;i; i2; 0; [iSi3o; ;i;i;i; i3; 0; [iSi4o; ;i;i;i; i4; 0; [i, i5o; ;i;i;i; i5; 0; [ippi6o; ;i;i;i; i6; 0; [iSi7o; ;i;i;i; i7; 0; [iSi8o; ;i;i;i; i8; 0; [ic i9o; ;i;i;i; i9; 0; [iSi:o; ;i;i;i; i:; 0; [iSi;o; ;i;i;i; i;; 0; [iTi<o; ;i;i;i; i<; 0; [iTi=o; ;i;i;i; i=; 0; [i8Ti>o; ;i;i;i; i>; 0; [iHTi?o; ;i;i;i; i?; 0; [ihTi@o; ;i;i;i; i@; 0; [iTiAo; ;i;i;i; iA; 0; [iTiBo; ;i;i;i; iB; 0; [iUiCo; ;i;i;i; iC; 0; [iSUiDo; ;i;i;i; iD; 0; [icUiEo; ;i;i;i; iE; 0; [iUiFo; ;i;i;i; iF; 0; [iUiGo; ;i;i;i; iG; 0; [iUiHo; ;i;i;i; iH; 0; [iUiIo; ;i;i;i; iI; 0; [iUiJo; ;i;i;i; iJ; 0; [iUiKo; ;i;i;i; iK; 0; [iWiLo; ;i;i;i; iL; 0; [iViMo; ;i;i;i; iM; 0; [iWiNo; ;i;i;i; iN; 0; [iQViOo; ;i;i;i; iO; 0; [itViPo; ;i;i;i; iP; 0; [iRiQo; ;i;i;i; iQ; 0; [iXiRo; ;i;i;i; iR; 0; [iWiSo; ;i;i;i; iS; 0; [iWiTo; ;i;i;i; iT; 0; [i XiUo; ;i;i;i; iU; 0; [iWiVo; ;i;i;i; iV; 0; [i2XiWo; ;i;i;i; iW; 0; [i1XiXo; ;i;i;i; iX; 0; [iXiYo; ;i;i;i; iY; 0; [iiZo; ;i;i;i; iZ; 0; [iXi[o; ;i;i;i; i[; 0; [iXi\o; ;i;i;i; i\; 0; [iYi]o; ;i;i;i; i]; 0; [iYi^o; ;i;i;i; i^; 0; [i"Yi_o; ;i;i;i; i_; 0; [ibYi`o; ;i;i;i; i`; 0; [iiao; ;i;i;i; ia; 0; [iibo; ;i;i;i; ib; 0; [iYico; ;i;i;i; ic; 0; [iZido; ;i;i;i; id; 0; [i'Zieo; ;i;i;i; ie; 0; [iYifo; ;i;i;i; if; 0; [ifZigo; ;i;i;i; ig; 0; [i6iho; ;i;i;i; ih; 0; [i6iio; ;i;i;i; ii; 0; [i[ijo; ;i;i;i; ij; 0; [i>[iko; ;i;i;i; ik; 0; [i>[ilo; ;i;i;i; il; 0; [iimo; ;i;i;i; im; 0; [i[ino; ;i;i;i; in; 0; [i[ioo; ;i;i;i; io; 0; [i[ipo; ;i;i;i; ip; 0; [i[iqo; ;i;i;i; iq; 0; [iiro; ;i;i;i; ir; 0; [i[iso; ;i;i;i; is; 0; [i\ito; ;i;i;i; it; 0; [iS_iuo; ;i;i;i; iu; 0; [i"\ivo; ;i;i;i; iv; 0; [i7iwo; ;i;i;i; iw; 0; [i`\ixo; ;i;i;i; ix; 0; [in\iyo; ;i;i;i; iy; 0; [i\izo; ;i;i;i; iz; 0; [i\i{o; ;i;i;i; i{; 0; [ii|o; ;i;i;i; i|; 0; [iC]i}o; ;i;i;i; i}; 0; [ii~o; ;i;i;i; i~; 0; [in]io; ;i;i;i; i; 0; [ik]io; ;i;i;i; i; 0; [i|]io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i/8io; ;i;i;i; i; 0; [i]io; ;i;i;i; i; 0; [i(^io; ;i;i;i; i; 0; [i=^io; ;i;i;i; i; 0; [ii^io; ;i;i;i; i; 0; [ib8io; ;i;i;i; i; 0; [i!io; ;i;i;i; i; 0; [i|8io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i^io; ;i;i;i; i; 0; [i1#io; ;i;i;i; i; 0; [i1#io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i"_io; ;i;i;i; i; 0; [i"_io; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [i2io; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ib_io; ;i;i;i; i; 0; [ik_io; ;i;i;i; i; 0; [i8io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i_io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [i:9io; ;i;i;i; i; 0; [i9io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [i&io; ;i;i;i; i; 0; [i`io; ;i;i;i; i; 0; [iHaio; ;i;i;i; i; 0; [iLaio; ;i;i;i; i; 0; [iNaio; ;i;i;i; i; 0; [iLaio; ;i;i;i; i; 0; [izaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [iaio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [i]bio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [iPcio; ;i;i;i; i; 0; [i +io; ;i;i;i; i; 0; [i=cio; ;i;i;i; i; 0; [ibio; ;i;i;i; i; 0; [ihcio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [i+io; ;i;i;i; i; 0; [i"dio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [icio; ;i;i;i; i; 0; [i.:io; ;i;i;i; i; 0; [iidio; ;i;i;i; i; 0; [i~dio; ;i;i;i; i; 0; [idio; ;i;i;i; i; 0; [iwdio; ;i;i;i; i; 0; [il:io; ;i;i;i; i; 0; [iOeio; ;i;i;i; i; 0; [ileio; ;i;i;i; i; 0; [i 0io; ;i;i;i; i; 0; [ieio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iIfio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [i:io; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [iQio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [ifio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [i!gio; ;i;i;i; i; 0; [i^gio; ;i;i;i; i; 0; [iSgio; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [iI;io; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [iRhio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [im4io; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [ihio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [i;io; ;i;i;i; i; 0; [iBiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [iiio; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [i6io; ;i;i;i; i; 0; [ijio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [iwmio; ;i;i;i; i; 0; [iAmio; ;i;i;i; i; 0; [iimio; ;i;i;i; i; 0; [ixmio; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [i4mio; ;i;i;i; i; 0; [i/ni o; ;i;i;i; i ; 0; [inni o; ;i;i;i; i ; 0; [i3=i o; ;i;i;i; i ; 0; [ini o; ;i;i;i; i ; 0; [ini o; ;i;i;i; i ; 0; [i>io; ;i;i;i; i; 0; [imio; ;i;i;i; i; 0; [inoio; ;i;i;i; i; 0; [i^?io; ;i;i;i; i; 0; [i?io; ;i;i;i; i; 0; [ioio; ;i;i;i; i; 0; [i9pio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i=io; ;i;i;i; i; 0; [iJpio; ;i;i;i; i; 0; [i}pio; ;i;i;i; i; 0; [iwpio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i%io; ;i;i;i; i; 0; [iEqio; ;i;i;i; i; 0; [icBio; ;i;i;i; i; 0; [iqio; ;i;i;i; i; 0; [iCi o; ;i;i;i; i ; 0; [i(ri!o; ;i;i;i; i!; 0; [i5ri"o; ;i;i;i; i"; 0; [iPri#o; ;i;i;i; i#; 0; [iFi$o; ;i;i;i; i$; 0; [iri%o; ;i;i;i; i%; 0; [iri&o; ;i;i;i; i&; 0; [i5Gi'o; ;i;i;i; i'; 0; [iHi(o; ;i;i;i; i(; 0; [izsi)o; ;i;i;i; i); 0; [isi*o; ;i;i;i; i*; 0; [i>i+o; ;i;i;i; i+; 0; [isi,o; ;i;i;i; i,; 0; [i>i-o; ;i;i;i; i-; 0; [i>i.o; ;i;i;i; i.; 0; [iGti/o; ;i;i;i; i/; 0; [i\ti0o; ;i;i;i; i0; 0; [iqti1o; ;i;i;i; i1; 0; [iti2o; ;i;i;i; i2; 0; [iti3o; ;i;i;i; i3; 0; [i?i4o; ;i;i;i; i4; 0; [i$ui5o; ;i;i;i; i5; 0; [i6Li6o; ;i;i;i; i6; 0; [i>ui7o; ;i;i;i; i7; 0; [iLi8o; ;i;i;i; i8; 0; [ipui9o; ;i;i;i; i9; 0; [i!i:o; ;i;i;i; i:; 0; [ivi;o; ;i;i;i; i;; 0; [iOi<o; ;i;i;i; i<; 0; [iOi=o; ;i;i;i; i=; 0; [iDPi>o; ;i;i;i; i>; 0; [i?i?o; ;i;i;i; i?; 0; [i@i@o; ;i;i;i; i@; 0; [iviAo; ;i;i;i; iA; 0; [iPiBo; ;i;i;i; iB; 0; [iPiCo; ;i;i;i; iC; 0; [iQiDo; ;i;i;i; iD; 0; [i3QiEo; ;i;i;i; iE; 0; [iwiFo; ;i;i;i; iF; 0; [iwiGo; ;i;i;i; iG; 0; [iwiHo; ;i;i;i; iH; 0; [iJwiIo; ;i;i;i; iI; 0; [i9@iJo; ;i;i;i; iJ; 0; [iwiKo; ;i;i;i; iK; 0; [iF@iLo; ;i;i;i; iL; 0; [i@iMo; ;i;i;i; iM; 0; [iTiNo; ;i;i;i; iN; 0; [iNxiOo; ;i;i;i; iO; 0; [ixiPo; ;i;i;i; iP; 0; [ixiQo; ;i;i;i; iQ; 0; [i@iRo; ;i;i;i; iR; 0; [i&ViSo; ;i;i;i; iS; 0; [iVyiTo; ;i;i;i; iT; 0; [iViUo; ;i;i;i; iU; 0; [iViVo; ;i;i;i; iV; 0; [iyiWo; ;i;i;i; iW; 0; [iyiXo; ;i;i;i; iX; 0; [i/AiYo; ;i;i;i; iY; 0; [i@ziZo; ;i;i;i; iZ; 0; [iJzi[o; ;i;i;i; i[; 0; [iOzi\o; ;i;i;i; i\; 0; [i|Yi]o; ;i;i;i; i]; 0; [iZi^o; ;i;i;i; i^; 0; [iZi_o; ;i;i;i; i_; 0; [izi`o; ;i;i;i; i`; 0; [iBiao; ;i;i;i; ia; 0; [i[ibo; ;i;i;i; ib; 0; [i{ico; ;i;i;i; ic; 0; [i{ido; ;i;i;i; id; 0; [i'Bieo; ;i;i;i; ie; 0; [i\ifo; ;i;i;i; if; 0; [i|igo; ;i;i;i; ig; 0; [iBiho; ;i;i;i; ih; 0; [i|iio; ;i;i;i; ii; 0; [i|ijo; ;i;i;i; ij; 0; [i}iko; ;i;i;i; ik; 0; [i_ilo; ;i;i;i; il; 0; [ic}imo; ;i;i;i; im; 0; [iCino; ;i;i;i; in; 0; [i}ioo; ;i;i;i; io; 0; [i~ipo; ;i;i;i; ip; 0; [iE~iqo; ;i;i;i; iq; 0; [i4Ciro; ;i;i;i; ir; 0; [i(biso; ;i;i;i; is; 0; [iGbito; ;i;i;i; it; 0; [iYCiuo; ;i;i;i; iu; 0; [ibivo; ;i;i;i; iv; 0; [iziwo; ;i;i;i; iw; 0; [i>cixo; ;i;i;i; ix; 0; [iiyo; ;i;i;i; iy; 0; [iizo; ;i;i;i; iz; 0; [ii{o; ;i;i;i; i{; 0; [idi|o; ;i;i;i; i|; 0; [i#ei}o; ;i;i;i; i}; 0; [i`i~o; ;i;i;i; i~; 0; [ieio; ;i;i;i; i; 0; [ipio; ;i;i;i; i; 0; [i_3io; ;i;i;i; i; 0; [iCio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [i Dio; ;i;i;i; i; 0; [i>io; ;i;i;i; i; 0; [iZio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [igio; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [i3io; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [ikDio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iRio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [iio; ;i;i;i; i; 0; [io; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0i o; ;i;i;i; i ; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0i o; ;i;i;i; i ; 0; 0i!o; ;i;i;i; i!; 0; 0i"o; ;i;i;i; i"; 0; 0i#o; ;i;i;i; i#; 0; 0i$o; ;i;i;i; i$; 0; 0i%o; ;i;i;i; i%; 0; 0i&o; ;i;i;i; i&; 0; 0i'o; ;i;i;i; i'; 0; 0i(o; ;i;i;i; i(; 0; 0i)o; ;i;i;i; i); 0; 0i*o; ;i;i;i; i*; 0; 0i+o; ;i;i;i; i+; 0; 0i,o; ;i;i;i; i,; 0; 0i-o; ;i;i;i; i-; 0; 0i.o; ;i;i;i; i.; 0; 0i/o; ;i;i;i; i/; 0; 0i0o; ;i;i;i; i0; 0; 0i1o; ;i;i;i; i1; 0; 0i2o; ;i;i;i; i2; 0; 0i3o; ;i;i;i; i3; 0; 0i4o; ;i;i;i; i4; 0; 0i5o; ;i;i;i; i5; 0; 0i6o; ;i;i;i; i6; 0; 0i7o; ;i;i;i; i7; 0; 0i8o; ;i;i;i; i8; 0; 0i9o; ;i;i;i; i9; 0; 0i:o; ;i;i;i; i:; 0; 0i;o; ;i;i;i; i;; 0; 0i<o; ;i;i;i; i<; 0; 0i=o; ;i;i;i; i=; 0; 0i>o; ;i;i;i; i>; 0; 0i?o; ;i;i;i; i?; 0; 0i@o; ;i;i;i; i@; 0; 0iAo; ;i;i;i; iA; 0; 0iBo; ;i;i;i; iB; 0; 0iCo; ;i;i;i; iC; 0; 0iDo; ;i;i;i; iD; 0; 0iEo; ;i;i;i; iE; 0; 0iFo; ;i;i;i; iF; 0; 0iGo; ;i;i;i; iG; 0; 0iHo; ;i;i;i; iH; 0; 0iIo; ;i;i;i; iI; 0; 0iJo; ;i;i;i; iJ; 0; 0iKo; ;i;i;i; iK; 0; 0iLo; ;i;i;i; iL; 0; 0iMo; ;i;i;i; iM; 0; 0iNo; ;i;i;i; iN; 0; 0iOo; ;i;i;i; iO; 0; 0iPo; ;i;i;i; iP; 0; 0iQo; ;i;i;i; iQ; 0; 0iRo; ;i;i;i; iR; 0; 0iSo; ;i;i;i; iS; 0; 0iTo; ;i;i;i; iT; 0; 0iUo; ;i;i;i; iU; 0; 0iVo; ;i;i;i; iV; 0; 0iWo; ;i;i;i; iW; 0; 0iXo; ;i;i;i; iX; 0; 0iYo; ;i;i;i; iY; 0; 0iZo; ;i;i;i; iZ; 0; 0i[o; ;i;i;i; i[; 0; 0i\o; ;i;i;i; i\; 0; 0i]o; ;i;i;i; i]; 0; 0i^o; ;i;i;i; i^; 0; 0i_o; ;i;i;i; i_; 0; 0i`o; ;i;i;i; i`; 0; 0iao; ;i;i;i; ia; 0; 0ibo; ;i;i;i; ib; 0; 0ico; ;i;i;i; ic; 0; 0ido; ;i;i;i; id; 0; 0ieo; ;i;i;i; ie; 0; 0ifo; ;i;i;i; if; 0; 0igo; ;i;i;i; ig; 0; 0iho; ;i;i;i; ih; 0; 0iio; ;i;i;i; ii; 0; 0ijo; ;i;i;i; ij; 0; 0iko; ;i;i;i; ik; 0; 0ilo; ;i;i;i; il; 0; 0imo; ;i;i;i; im; 0; 0ino; ;i;i;i; in; 0; 0ioo; ;i;i;i; io; 0; 0ipo; ;i;i;i; ip; 0; 0iqo; ;i;i;i; iq; 0; 0iro; ;i;i;i; ir; 0; 0iso; ;i;i;i; is; 0; 0ito; ;i;i;i; it; 0; 0iuo; ;i;i;i; iu; 0; 0ivo; ;i;i;i; iv; 0; 0iwo; ;i;i;i; iw; 0; 0ixo; ;i;i;i; ix; 0; 0iyo; ;i;i;i; iy; 0; 0izo; ;i;i;i; iz; 0; 0i{o; ;i;i;i; i{; 0; 0i|o; ;i;i;i; i|; 0; 0i}o; ;i;i;i; i}; 0; 0i~o; ;i;i;i; i~; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0io; ;i;i;i; i; 0; 0o;;i;i;i[ViX iY iZ i[ i\ i] i^ i_ i i i i3 i6 iY iZ i[ i^ i\ i] iCiMiRiWi\iiivixiiiiiiiii*i+i,i-i.i/i0i1i2i3i4i5i6i8i9i:i;ii@iAiCiDiFiGiHiIiJiKiLiMiNi*i^i_i`iaibicidiiiiii{xiF{iiiiiiiiiii iiiiii(ii iiiiiii&i%ii#ii iiH{ i'iiiiiii i i iJ{iiiiiiiiiiiiiii(ii iiiiii'i(i-ii0ii#ii iiiiN{iiiiiiiiii(ii*ii,i(i.ii0i iiiii i0i,i ii#iiS{iiiiCi'iEi iGiiiiDi#iFi1iHi-iJiT{iiiiiiiiiiiiLiiNi iPiii ii(iii iiii.i#ii iiZ{iiiiiiiiiihiijiili ini ipi(iriii iiiiii$iri0iti-ivi#ii ii^{iiiiviixii2iiiii#ii iiiif{iiiiiiiiiii iiiiii(ii iiiiiii'i%ii#ii iih{ i'iiiii ii i i ij{iiiiiiiiiiiiiii(ii iiiiii'i)i-ii0ii#ii iiiin{iiiiiiiiii)ii+ii-i(i/i iii ii i0i-i ii#iis{iiiiDi'iFi iHiiiiEi#iGi1iIi-iKit{iiiiiiiiiiiiMiiOi iQiii ii(iii iiii/i#ii iiz{iiiiiiiiiiiiikiimi ioi iqi(isiii iiiiii$isi0iui-iwi#ii ii~{iiiiiiwii3iii iiii#ii iiiiI{ i iii i#i i1ii'ii-iii{ i iii i#i i1ii'ii-iiL{ iiiiii i'i"i iiiii il{ iiiiii!i'i#i iiiii!iM{ ii$i iii"i#i$ii&i'i(i.i*im{ ii%i iii#i#i%ii'i'i)i.i+i1iiO{ii4io{ii5i iiP{ i'i6i iii0i#i2i1i4ip{ i'i7i iii1i#i3i1i5iQ{ ii9i'i;i i=i#i6i1i:i-i<iq{ ii:i'i<i i>i#i7i1i;i-i=iW{ iiTi'iVi iXiiiiiiXi#iZi1i^iw{ iiUi'iWi iYiiiiiiYi#i[i1i_iX{ iiZii\i'i^i i`i&iii`i#ibix{ ii[ii]i'i_i iai&iiiai#iciY{ i'ibi idi&iiiji#ili1ini-ipiy{ i'ici iei&iiiki#imi1ioi-iqiii\{ iitiiiiiiiii#ii|{ iiuiiiiiiiii#ii ii_{ iiyii{i i}iii#ii1ii{ iizii|i i~iii#ii1ii{ iiiii iiii{ iiiii iiii{iii{iii&{iii'{iii{iiiii{iiiii{iii{iii{i ii{i ii{iii{iii{iii{iii{ii*i{ii+i{ii,iiLiiNi{ii-iiMiiOi.{ii0i/{ii1i{iiiBiiii{ iiiiii iiiiiiiEii{ iiiiiiiii{ iiii(ii)iiiEii{ iiiiii8ii9iiiiiii{ iiiiHiiIiii{ iiiiiiYiiiiiii{ iiiihiiiiiiEii{iiiiiBii{ iiiiiiiipiiiiiEiiBii{ iiiiiiiiri{ iiii ii!iitiEiiBii{ iiiiii0ii1iiviiiiiBii{iiiiiBii{ iiiiiiPiiQiiziiiiiBii{ iiii@iiAiixi{ iiii`iiaii|iEiiBii{iiiii{iiiiiii{iii{iii{ii i{ ii iiiiiii#{ iiiiiii ii8{ ii9ii]iiiii5{iiPiiQiii3{iiSiV{iiWi:{ii\iC{ ii^iiiii iit{iiviu{iiwi{iiiii6{iiiii{iiiii0{iiiii{iii{iii{iii7{iii{iii>{iii{iii{iii-{iiiM{iii'{iiiG{iii+{iiiK{iii'{iSi"iTi#iUi%iH{iTi$iJ{iTi&i{iTii{iTii{iTii( {i< i) i0 {i< i1 i3 {i< i4 i {i i i i iG {iV iH i> iK iW iL i {i i i {i i i i i {i i iF {iV iH i {i i i {i i i i i i i {i i iF {i> iJ iW iL iG {i> iK i {i i i i i i i {i i i%{i.i&i{i5ii{i5ii {i5i i {i5i i {i5ii{i5ii:{i5i;i<{i5i=i>{i5i@i?{i5iAiB{i5iCiG{iii#ii1iig{iii#ii1ii{iii{ii i{iiiii{iiiii({iii){iiiK{iiik{iii{ii.i{ii/i6{ii8i7{ii9iR{ii>ii@i#iBir{ii?iiAi#iCiL{iiPiiRiM{iiQiiSiU{iiTiiViu{iiUiiWiZ{ii\i[{ii]iZ{iidi[{iiei`{iifia{iigib{iihic{iiiih{iixii{iiyij{iizik{ii{i[{ii|i#i~i{{ii}i#ii]{iiiii}{iiiii{iii{ iiiii iiii{ iiiii iiii{iiiii{iiiii{ iiiii iiii{ iiiii iiii{ iiiii iiii{ iiiii iiii{iii{iii{ iiiii iiii{ iiiii iiii{iii{iii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiii iiii#ii{ iiiiiBiiEii{ iiiiiBiiEii{ ii ii iBiiEii { ii ii iBiiEii{iiiii{iiiii{iiiii{iiiii { ii"ii$iBi&iEii!{ ii#ii%iBi'iEii({ ii*ii,iBi.iEii){ ii+ii-iBi/iEii0{ii2ii4iBi6i1{ii3ii5iBi7i8{ii:ii<iBi>i9{ii;ii=iBi?i@{iiBiiDiA{iiCiiEiH{iiJiiLiI{iiKiiMiP{iiRiiTiBiViQ{iiSiiUiBiWiY{ii[ii]iBi_i`{ iibiidiBifiEiia{ iiciieiBigiEiih{ iijiiliBiniEiii{ iikiimiBioiEii{iEii{iEii{iEii{iEii{iEii{iEii {iEii {iEii {iEii {iEii{iEii{iEii"{iEii#{iEii${iEii%{iEii&{iEii'{iEii*{iEii+{iEii,{iEii-{iEii.{iEii/{iEiib{iEiic{iEiid{iEiie{iEiif{iEiig{iEiij{iEiik{iEiil{iEiim{iEiin{iEiio{iEiip{iEii{iEii{iEiit{iEii{iEii{iEii{iiiiiBii{iiiiiBii{iiiii{iii|{iEii{iEii{iEii!{i8i!i!{i8i!i!{i8i!i!{i8i!i!{i8i!i!{i8i!i"{i8i"i"{i8i "i "{i8i "i#"{i8i$"i%"{i8i&"i<"{i8iA"iC"{i8iD"iE"{i8iG"iH"{i8iI"iB{i8i`"ia"{i8ib"iM"{i8im"iA{i8in"iC{i8io"id"{i8ip"ie"{i8iq"ir"{i8it"is"{i8iu"iv"{i8ix"iw"{i8iy"iz"{i8i"i{"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i|"{i8i"i}"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"i"{i8i"iK0{i0iL0iM0{i0iN0iO0{i0iP0iQ0{i0iR0iS0{i0iT0iU0{i0iV0iW0{i0iX0iY0{i0iZ0i[0{i0i\0i]0{i0i^0i_0{i0i`0ia0{i0ib0id0{i0ie0if0{i0ig0ih0{i0ii0io0{i0ip0i0iq0ir0{i0is0i0it0iu0{i0iv0i0iw0ix0{i0iy0i0iz0i{0{i0i|0i0i}0iF0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i0{i0i0i{iii{iii{iii1{i'i.i2{i'i/iG{i>iKiWiLi{iiiiiii{iii{ii{:cri:lfi: control[$o: Range: exclF: begini:endio;;F;i;io;;F;i;i$o;;F;i;iio;;F;i;iiiiii o;;F;i ;i i( i) o;;F;i* ;i. o;;F;i` ;id ie o;;F;if ;io o;;F;i;iio;;F;i;io;;F;i;iio;;F;i;io;;F;is;iziio;;F;i;io;;F;i ;io;;F;i;io;;F;i;i: extend[o;;F;i;ioo;;F;i;io;;F;i;io;;F;i;iio;;F;i;io;;F;i;iio;;F;i;io;;F;iK;i_ipo;;F;i;io;;F;i;io;;F;i;io;;F;i;iio;;F;i0;iJo;;F;i;io;;F;i;io;;F;i;io;;F;i;i#o;;F;i%;i'o;;F;i);i-o;;F;iY;i[o;;F;i;i i: i< o;;F;iA ;iH iM o;;F;iQ ;iW o;;F;ib ;ic i i i o;;F;i ;i i i o;;F;i ;i o;;F;i ;i i< o;;F;iA ;iB o;;F;iG ;iH o;;F;iK ;iM iQ o;;F;ip ;iq iu o;;F;i ;i i o;;F;i ;i o;;F;i ;i i o;;F;i ;i i i< i> i? o;;F;iA ;iD iM iV iW o;;F;ib ;ic i i i i i i o;;F;i> ;i@ o;;F;iF ;iH o;;F;iJ ;iM o;;F;iU ;iV o;;F;ib ;ic i i i i i o;;F;i ;i o;;F;i ;i o;;F;i ;i i i> o;;F;iA ;iD iM iW o;;F;ib ;ic i i o;;F;i ;i i i i1o;;F;i4;i:o;;F;iG;iNio;;F;i;io;;F;i;io;;F;i;io;;F;i;ii5i7i9o;;F;iq;i~o;;F;i;io;;F;i;io;;F;i;io;;F;i;iio;;F;i-;i0o;;F;i2;i7o;;F;i9;i:o;;F;i=;i>o;;F;iX;iYo;;F;i^;i`o;;F;iq;itio;;F;i;iiio;;F;i];i_o;;F;i;io;;F;i2;i4o;;F;iR;iSo;;F;ir;iso;;F;i;io;;F;i;iio;;F;i;iio;;F;i ;i io;;F;i ;i"o;;F;i';i(i2o;;F;i9;i;o;;F;i;iiiVo;;F;iX;i^i`ibo;;F;ie;ilo;;F;is;i|io;;F;i;iio;;F;i;ii4o;;F;i6;i:i<iBo;;F;ik;iso;;F;i;io;;F;i;io;;F;i;io;;F;i;iio;;F;i;iio;;F;i;io;;F;i,;i3o;;F;i6;i7o;;F;i;io;;F;i;io;;F;i;iiio;;F;i;io;;F;i;io;;F;i;io;;F;i ;i o;;F;i ;i o;;F;i ;i i o;;F;i ;i o;;F;i ;i o;;F;i,;i,i-o;;F;i-;i-o;;F;i*0;i-0o;;F;i.0;i/0o;;F;i0;i0ioo;;F;ip;iro;;F;it;i}io;;F;i;iiii o;;F;i%;i&iĨo;;F;i;io;;F;i&;i-o;;F;iG;iQo;;F;i;iio;;F;i;iiio;;F;i);i.o;;F;i1;i2o;;F;i5;i6iCiLi|io;;F;i;io;;F;i;io;;F;i;iio;;F;i;iiiiiio;;F;i;io;;F;i ;i-o;;F;i;iiio;;F;iv;izo;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i8 ;i: i? o;;F;i ;i io;;F;i8;iFo;;F;i;io;;F;i;io;;F;i;io;;F;i;io;;F;i';i+o;;F;i-;i4iso;;F;i;io;;F;i;io;;F;i/;i1i4o;;F;i6;i7io;;F;i;iii<i>i@iWo;;F;if;ilo;;F;ip;itio;;F;i;iiio;;F;i;io;;F;i;iio;;F;i;io;;F;i;io;;F;i;io;;F;i3;i:i=o;;F;i?;i@iio;;F;i;iio;;F;ij;ijo;;F;i0k;i6ko;;F;io;ioo;;F;i;iieo;;F;ig;iio;;F;in;iro;;F;i{;io;;F;i;io;;F;i;io;;F;iB;iDo;;F;i;io;;F;i;i:regional_indicator[o;;F;i;i:spacingmark[i i; o;;F;i> ;i@ o;;F;iI ;iL o;;F;iN ;iO o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i i o;;F;i> ;i@ i o;;F;i ;i i o;;F;i ;i o;;F;i ;i i@ o;;F;iG ;iH o;;F;iK ;iL i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;iA ;iD o;;F;i ;i i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i? ;i@ o;;F;iF ;iH o;;F;iJ ;iL o;;F;i ;i o;;F;i ;i o;;F;i ;i o;;F;i ;i i3io;;F;i>;i?ii1o;;F;i;;i<o;;F;iV;iWiio;;F;i;io;;F;i;io;;F;i#;i&o;;F;i);i+o;;F;i0;i1o;;F;i3;i8o;;F;i;iio;;F;i;iiUiWo;;F;im;irii5i;o;;F;i=;iAo;;F;iC;iDiio;;F;i;iiio;;F;i;iio;;F;i;io;;F;i$;i+o;;F;i4;i5io;;F;i;io;;F;i#;i$i'o;;F;i;io;;F;i;ièo;;F;iR;iSio;;F;i;io;;F;i;io;;F;i;io;;F;i/;i0o;;F;i3;i4iMio;;F;i;iio;;F;i;io;;F;i;io;;F;i;iiiiio;;F;i;io;;F;i;ii,io;;F;i;io;;F;i;io;;F;i,;i.o;;F;i2;i3i5o;;F;i;io;;F;i;ii?o;;F;iA;iDo;;F;iG;iHo;;F;iK;iMo;;F;ib;ico;;F;i;iio;;F;i;iiio;;F;i;io;;F;i;iio;;F;i0;i2o;;F;i;;i<i>io;;F;i;iio;;F;iQo;i~oifim:l[o;;F;i;i_o;;F;i`;i|:v[o;;F;i`;io;;F;i;i:t[o;;F;i;io;;F;i;i:lv[iii8iTipiiiĬiiii4iPiliiiiܭiii0iLihiiiiخiii,iHidiiiiԯii i(iDi`i|iiiаiii$i@i\ixiii̱iii ii>i?i?i@i@iAiAiBiBiCiCiDiDiEiEiFiFiGiGiHiHiIiIiJiJiKiKiLiLiMiMiNiNiOiOiPiPiQiQiRiRiSiSiTiTiUiUiViViWiWiXiXiYiYiZiZi[i[i\i\i]i]i^i^i_i_i`i`iaiaibibicicididieieififigigihihiiiiijijikikililimimininioioipipiqiqiririsisititiuiuiviviwiwixixiyiyizizi{i{i|i|i}i}i~i~iii{i{i|i|i}i}i~i~iiii ii iiii ii& ii ii! iiii0 ii`ii9 iiRii}ii ii ii ii ii" ii ii iiii"!iiaii: iiSii~iixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiimail-2.6.4/lib/mail/version.rb000066400000000000000000000003511267453234600161620ustar00rootroot00000000000000# frozen_string_literal: true module Mail module VERSION MAJOR = 2 MINOR = 6 PATCH = 4 BUILD = nil STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.') def self.version STRING end end end mail-2.6.4/lib/mail/version_specific/000077500000000000000000000000001267453234600175035ustar00rootroot00000000000000mail-2.6.4/lib/mail/version_specific/ruby_1_8.rb000066400000000000000000000066441267453234600214720ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class Ruby18 require 'base64' require 'iconv' # Escapes any parenthesis in a string that are unescaped. This can't # use the Ruby 1.9.1 regexp feature of negative look behind so we have # to do two replacement, first unescape everything, then re-escape it def Ruby18.escape_paren( str ) re = /\\\)/ str = str.gsub(re) { |s| ')'} re = /\\\(/ str = str.gsub(re) { |s| '('} re = /([\(\)])/ # Only match unescaped parens str.gsub(re) { |s| '\\' + s } end def Ruby18.paren( str ) str = $1 if str =~ /^\((.*)?\)$/ str = escape_paren( str ) '(' + str + ')' end def Ruby18.escape_bracket( str ) re = /\\\>/ str = str.gsub(re) { |s| '>'} re = /\\\])/ # Only match unescaped parens str.gsub(re) { |s| '\\' + s } end def Ruby18.bracket( str ) str = $1 if str =~ /^\<(.*)?\>$/ str = escape_bracket( str ) '<' + str + '>' end def Ruby18.decode_base64(str) Base64.decode64(str) if str end def Ruby18.encode_base64(str) Base64.encode64(str) end def Ruby18.has_constant?(klass, string) klass.constants.include?( string ) end def Ruby18.get_constant(klass, string) klass.const_get( string ) end def Ruby18.transcode_charset(str, from_encoding, to_encoding = 'UTF-8') Iconv.conv("#{normalize_iconv_charset_encoding(to_encoding)}//IGNORE", normalize_iconv_charset_encoding(from_encoding), str) end def Ruby18.b_value_encode(str, encoding) # Ruby 1.8 requires an encoding to work raise ArgumentError, "Must supply an encoding" if encoding.nil? encoding = encoding.to_s.upcase.gsub('_', '-') [Encodings::Base64.encode(str), normalize_iconv_charset_encoding(encoding)] end def Ruby18.b_value_decode(str) match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m) if match encoding = match[1] str = Ruby18.decode_base64(match[2]) str = transcode_charset(str, encoding) end str end def Ruby18.q_value_encode(str, encoding) # Ruby 1.8 requires an encoding to work raise ArgumentError, "Must supply an encoding" if encoding.nil? encoding = encoding.to_s.upcase.gsub('_', '-') [Encodings::QuotedPrintable.encode(str), encoding] end def Ruby18.q_value_decode(str) match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m) if match encoding = match[1] string = match[2].gsub(/_/, '=20') # Remove trailing = if it exists in a Q encoding string = string.sub(/\=$/, '') str = Encodings::QuotedPrintable.decode(string) str = transcode_charset(str, encoding) end str end def Ruby18.param_decode(str, encoding) URI.unescape(str) end def Ruby18.param_encode(str) encoding = $KCODE.to_s.downcase language = Configuration.instance.param_encode_language "#{encoding}'#{language}'#{URI.escape(str)}" end private def Ruby18.normalize_iconv_charset_encoding(encoding) case encoding.upcase when 'UTF8', 'UTF_8' 'UTF-8' when 'UTF16', 'UTF-16' 'UTF-16BE' when 'UTF32', 'UTF-32' 'UTF-32BE' when 'KS_C_5601-1987' 'CP949' else encoding end end end end mail-2.6.4/lib/mail/version_specific/ruby_1_9.rb000066400000000000000000000150011267453234600214560ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true module Mail class Ruby19 class StrictCharsetEncoder def encode(string, charset) string.force_encoding(Mail::Ruby19.pick_encoding(charset)) end end class BestEffortCharsetEncoder def encode(string, charset) string.force_encoding(pick_encoding(charset)) end private def pick_encoding(charset) charset = case charset when /ansi_x3.110-1983/ 'ISO-8859-1' when /Windows-?1258/i # Windows-1258 is similar to 1252 "Windows-1252" else charset end Mail::Ruby19.pick_encoding(charset) end end class << self attr_accessor :charset_encoder end self.charset_encoder = StrictCharsetEncoder.new # Escapes any parenthesis in a string that are unescaped this uses # a Ruby 1.9.1 regexp feature of negative look behind def Ruby19.escape_paren( str ) re = /(?])/ # Only match unescaped brackets str.gsub(re) { |s| '\\' + s } end def Ruby19.bracket( str ) str = $1 if str =~ /^\<(.*)?\>$/ str = escape_bracket( str ) '<' + str + '>' end def Ruby19.decode_base64(str) str.unpack( 'm' ).first end def Ruby19.encode_base64(str) [str].pack( 'm' ) end def Ruby19.has_constant?(klass, string) klass.const_defined?( string, false ) end def Ruby19.get_constant(klass, string) klass.const_get( string ) end def Ruby19.transcode_charset(str, from_encoding, to_encoding = Encoding::UTF_8) charset_encoder.encode(str.dup, from_encoding).encode(to_encoding, :undef => :replace, :invalid => :replace, :replace => '') end def Ruby19.b_value_encode(str, encoding = nil) encoding = str.encoding.to_s [Ruby19.encode_base64(str), encoding] end def Ruby19.b_value_decode(str) match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m) if match charset = match[1] str = Ruby19.decode_base64(match[2]) str = charset_encoder.encode(str, charset) end decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "") decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8) rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError warn "Encoding conversion failed #{$!}" str.dup.force_encoding(Encoding::UTF_8) end def Ruby19.q_value_encode(str, encoding = nil) encoding = str.encoding.to_s [Encodings::QuotedPrintable.encode(str), encoding] end def Ruby19.q_value_decode(str) match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m) if match charset = match[1] string = match[2].gsub(/_/, '=20') # Remove trailing = if it exists in a Q encoding string = string.sub(/\=$/, '') str = Encodings::QuotedPrintable.decode(string) str = charset_encoder.encode(str, charset) # We assume that binary strings hold utf-8 directly to work around # jruby/jruby#829 which subtly changes String#encode semantics. str.force_encoding(Encoding::UTF_8) if str.encoding == Encoding::ASCII_8BIT end decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "") decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8) rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError warn "Encoding conversion failed #{$!}" str.dup.force_encoding(Encoding::UTF_8) end def Ruby19.param_decode(str, encoding) str = uri_parser.unescape(str) str = charset_encoder.encode(str, encoding) if encoding str end def Ruby19.param_encode(str) encoding = str.encoding.to_s.downcase language = Configuration.instance.param_encode_language "#{encoding}'#{language}'#{uri_parser.escape(str)}" end def Ruby19.uri_parser @uri_parser ||= URI::Parser.new end # Pick a Ruby encoding corresponding to the message charset. Most # charsets have a Ruby encoding, but some need manual aliasing here. # # TODO: add this as a test somewhere: # Encoding.list.map { |e| [e.to_s.upcase == pick_encoding(e.to_s.downcase.gsub("-", "")), e.to_s] }.select {|a,b| !b} # Encoding.list.map { |e| [e.to_s == pick_encoding(e.to_s), e.to_s] }.select {|a,b| !b} def Ruby19.pick_encoding(charset) charset = charset.to_s encoding = case charset.downcase # ISO-8859-8-I etc. http://en.wikipedia.org/wiki/ISO-8859-8-I when /^iso[-_]?8859-(\d+)(-i)?$/ "ISO-8859-#{$1}" # ISO-8859-15, ISO-2022-JP and alike when /^iso[-_]?(\d{4})-?(\w{1,2})$/ "ISO-#{$1}-#{$2}" # "ISO-2022-JP-KDDI" and alike when /^iso[-_]?(\d{4})-?(\w{1,2})-?(\w*)$/ "ISO-#{$1}-#{$2}-#{$3}" # UTF-8, UTF-32BE and alike when /^utf[\-_]?(\d{1,2})?(\w{1,2})$/ "UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE') # Windows-1252 and alike when /^windows-?(.*)$/ "Windows-#{$1}" when '8bit' Encoding::ASCII_8BIT # alternatives/misspellings of us-ascii seen in the wild when /^iso[-_]?646(-us)?$/, 'us=ascii' Encoding::ASCII # Microsoft-specific alias for MACROMAN when 'macintosh' Encoding::MACROMAN # Microsoft-specific alias for CP949 (Korean) when 'ks_c_5601-1987' Encoding::CP949 # Wrongly written Shift_JIS (Japanese) when 'shift-jis' Encoding::Shift_JIS # GB2312 (Chinese charset) is a subset of GB18030 (its replacement) when 'gb2312' Encoding::GB18030 when 'cp-850' Encoding::CP850 when 'latin2' Encoding::ISO_8859_2 else charset end convert_to_encoding(encoding) end class << self private def convert_to_encoding(encoding) if encoding.is_a?(Encoding) encoding else begin Encoding.find(encoding) rescue ArgumentError Encoding::BINARY end end end end end end mail-2.6.4/mail.gemspec000066400000000000000000000017241267453234600147540ustar00rootroot00000000000000require './lib/mail/version' Gem::Specification.new do |s| s.name = "mail" s.version = Mail::VERSION::STRING s.author = "Mikel Lindsaar" s.email = "raasdnil@gmail.com" s.homepage = "https://github.com/mikel/mail" s.description = "A really Ruby Mail handler." s.summary = "Mail provides a nice Ruby DSL for making, sending and reading emails." s.license = "MIT" s.has_rdoc = true s.extra_rdoc_files = ["README.md", "CONTRIBUTING.md", "CHANGELOG.rdoc", "TODO.rdoc"] s.rdoc_options << '--exclude' << 'lib/mail/values/unicode_tables.dat' s.add_dependency('mime-types', [">= 1.16", "< 4"]) s.add_development_dependency('bundler', '>= 1.0.3') s.add_development_dependency('rake', '> 0.8.7') s.add_development_dependency('rspec', '~> 3.0') s.add_development_dependency('rdoc') s.files = %w(README.md MIT-LICENSE CONTRIBUTING.md CHANGELOG.rdoc Dependencies.txt Gemfile Rakefile TODO.rdoc) + Dir.glob("lib/**/*") end mail-2.6.4/patches/000077500000000000000000000000001267453234600141105ustar00rootroot00000000000000mail-2.6.4/patches/20110126_sendmail.patch000066400000000000000000000060611267453234600177040ustar00rootroot00000000000000diff --git a/lib/mail.rb b/lib/mail.rb index 1ac8614..6d13a24 100644 --- a/lib/mail.rb +++ b/lib/mail.rb @@ -2,6 +2,7 @@ module Mail # :doc: require 'date' + require 'shellwords' require 'active_support' require 'active_support/core_ext/class/attribute_accessors' @@ -33,6 +34,7 @@ module Mail # :doc: require 'mail/core_extensions/nil' require 'mail/core_extensions/string' + require 'mail/core_extensions/shellwords' unless String.new.respond_to?(:shellescape) require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3' require 'mail/patterns' diff --git a/lib/mail/core_extensions/shellwords.rb b/lib/mail/core_extensions/shellwords.rb new file mode 100644 index 0000000..aa87f31 --- /dev/null +++ b/lib/mail/core_extensions/shellwords.rb @@ -0,0 +1,55 @@ +# The following is imported from ruby 1.9.2 shellwords.rb +# +module Shellwords + # Escapes a string so that it can be safely used in a Bourne shell + # command line. + # + # Note that a resulted string should be used unquoted and is not + # intended for use in double quotes nor in single quotes. + # + # open("| grep #{Shellwords.escape(pattern)} file") { |pipe| + # # ... + # } + # + # +String#shellescape+ is a shorthand for this function. + # + # open("| grep #{pattern.shellescape} file") { |pipe| + # # ... + # } + # + def shellescape(str) + # An empty argument will be skipped, so return empty quotes. + return "''" if str.empty? + + str = str.dup + + # Process as a single byte sequence because not all shell + # implementations are multibyte aware. + str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1") + + # A LF cannot be escaped with a backslash because a backslash + LF + # combo is regarded as line continuation and simply ignored. + str.gsub!(/\n/, "'\n'") + + return str + end + + module_function :shellescape + + class << self + alias escape shellescape + end + +end + +class String + # call-seq: + # str.shellescape => string + # + # Escapes +str+ so that it can be safely used in a Bourne shell + # command line. See +Shellwords::shellescape+ for details. + # + def shellescape + Shellwords.escape(self) + end +end \ No newline at end of file diff --git a/lib/mail/network/delivery_methods/sendmail.rb b/lib/mail/network/delivery_methods/sendmail.rb index 6ae419a..29f1876 100644 --- a/lib/mail/network/delivery_methods/sendmail.rb +++ b/lib/mail/network/delivery_methods/sendmail.rb @@ -45,11 +45,11 @@ module Mail def deliver!(mail) envelope_from = mail.return_path || mail.sender || mail.from_addrs.first - return_path = "-f \"#{envelope_from}\"" if envelope_from + return_path = "-f \"#{envelope_from.to_s.shellescape}\"" if envelope_from arguments = [settings[:arguments], return_path].compact.join(" ") - Sendmail.call(settings[:location], arguments, mail.destinations.join(" "), mail) + Sendmail.call(settings[:location], arguments, mail.destinations.collect(&:shellescape).join(" "), mail) end def Sendmail.call(path, arguments, destinations, mail)mail-2.6.4/spec/000077500000000000000000000000001267453234600134135ustar00rootroot00000000000000mail-2.6.4/spec/environment.rb000066400000000000000000000001311267453234600162770ustar00rootroot00000000000000# frozen_string_literal: true $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) mail-2.6.4/spec/fixtures/000077500000000000000000000000001267453234600152645ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/attachments/000077500000000000000000000000001267453234600175775ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/attachments/basic_email.eml000066400000000000000000000027571267453234600225410ustar00rootroot00000000000000Delivered-To: raasdnil@gmail.com Received: by 10.140.178.13 with SMTP id a13cs354079rvf; Fri, 21 Nov 2008 20:05:05 -0800 (PST) Received: by 10.151.44.15 with SMTP id w15mr2254748ybj.98.1227326704711; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Return-Path: Received: from mail11.tpgi.com.au (mail11.tpgi.com.au [203.12.160.161]) by mx.google.com with ESMTP id 10si5117885gxk.81.2008.11.21.20.05.03; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Received-SPF: neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) client-ip=203.12.160.161; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) smtp.mail=test@lindsaar.net X-TPG-Junk-Status: Message not scanned X-TPG-Antivirus: Passed Received: from [192.0.0.253] (60-241-138-146.static.tpgi.com.au [60.0.0.146]) by mail11.tpgi.com.au (envelope-from test@lindsaar.net) (8.14.3/8.14.3) with ESMTP id mAM44xew022221 for ; Sat, 22 Nov 2008 15:05:01 +1100 Message-Id: <6B7EC235-5B17-4CA8-B2B8-39290DEB43A3@test.lindsaar.net> From: Mikel Lindsaar To: Mikel Lindsaar Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v929.2) Subject: Testing 123 Date: Sat, 22 Nov 2008 15:04:59 +1100 X-Mailer: Apple Mail (2.929.2) Plain email. Hope it works well! Mikel mail-2.6.4/spec/fixtures/attachments/test.gif000066400000000000000000000072231267453234600212510ustar00rootroot00000000000000GIF89ad2•|ÄbīydŦ[2n1ݩmĵɍlɺl.Ȝҽ}G1ugřU,ѿ©yˠͺ|gq5qLubŤkDnXȶ|XʫҨŭz=&ɱyUYDذ͙cM̵μpv9!sTGVAأ>50ʸҵ֭sIJⱕΣஒv{͒r|A)崙GљzT'ۦ_Hr  L!ܵmZñP:θC94vQ©`8Εuչ⼩H1p\Q;r]|D.נỨ_ԝ~L5vaЦ麠꽤p2 E.侬jG8N8eQU>e>fP`JкbMjT黢xeXBv<&涛|i޶\H߸뾥nz@(nHؽðŇeڲ֞ƴjV蹟uоެhRӾ๦˴L7R;P&NJigAx?(U7+ZDԫc:)ѻJ4r7縝t^\Es8!׮aK~I3ǵ۴I2zB,s6ϖvD+ joZͿĬˏn|N8M7-䳘ЗxF/m/вhS]GҚ{~pخp33(#^A4 S<˹ȧT>㽪~C+\>1ʲʳǯq4u:#ͯM6_K.!Ӝ}p[d<]x;$̑pwcOtOaR[lVјxϽW@u7 x}¯ëī㲗Ӫs_b;!,d2ldY|pN9AG>LdBʒB%JIرBOV(  Ui$hJuC9nl5ssXhV+5BǼ4RpKт!$ 0Qy0H$PJ|qBT6gU y,MI9aNmTڠXSd'LB.Z3nGHxA; < Y;Ĺ4+Qj #F.i;S"fmۨuOСP1Pn#<-gP\ krzX\HёI0HK\\wtSNy@SI yrhB"'Ȁ~57D!ux!@BeFq_4XJ"P-tvThL9SՒ 5!Lf?P[pE*זF a̲c9 elY{M}ZٶD ~"ƭuH|8 "`D5ܡފhzXch IEUU 7B:C -DIxe*&`ÑG\"hb#3N.PJ؈Ru>UՑI "Ļ"Zu#VڅFaʱ faqpѩIenjƙgiwRZ1|gAA!.E\ i>˥QTv]xGj.G ­F'X r3Kě :x8Qihlt-AwJ=PwiՐE~AF99Ð\Er@cLfO?-LQ=f@ާW` *4ZQquݕs[[2؉ jdUz:٪}Zjz֌զ xhZWHA~ G97d:N58ՈO`:س-tU sӀljE2r:T$ SKu;X9a@R4*3$ j8=.HF+Ld$ % oc8AͤaDB>MPh4Ѥ\OQK;Zhl 0c#Ɉliuz5Ump g,0=$ e!fxa0jV3@6de+ԑ` [a ;{]_3P%,+LR`ь:*\!~ůԡsA7ѱQۛKN6)S)01hd86A:+ UC{jŁ@zM  8 0J:v(86JZ܌<+?tk aoTĐuЕ:,(+DRA;⍔ȉa&$? dߠEyv2W ;HC/I9 tB6᧯rzPdDeO^RfA|IRQ1a|5 L>9Po mыr+Ŝb$q "GjЍn0@HGDMEsh*4^?P(J*[!"9zoE D2Z"uP>iH YZ9>s_ GE:?'5XNH<GEsimKEhLưNT[\Weڵ H x;[rI&$/~E NrϧZ R 8bVj{"]Kف JziteH\xp>yh?YjG΂2A'7\*D4n0" b 8PArBs ȉf,>"aw\_4}-0ў ,kB\mhxm 5w۵Cg" MH&Kd4gǤ}eQ35aTbf| /}5a W6Rs&qm6g`E7g"J2hi%r8Ju8ry"QWjC20Di-F p-= |PNeN4j:;Kw|/-;0.a"fF&Zu"4[]a[^p 0w2=xm+s,e~\7n3(ezҁ`oqety^yiR)"WAǃ_vxsB `, B?N*@8C2'l9i }H#u#VBbCWE$`},c]ԄQq~|G?Q]qR]?l'HqwH?Pdw8) opvy>xwSxDJiuh혈y¢rEpaW]{i,bF't6jW/V;/ueOW=|Bdu߂!AA_ֿcڐk^ۘmv&vLG!AvcmeV=>"6 3P=IIvŔB<HHHH8Nm?!Q0p냹u}w\+J)\^4QT(Pӂ& ^?7?7?)kGx=y'S x^SFduqǏ*8RV|xh4D諴iq5A"6h+[%f궭 3Yle9\Q& n^CZ>)9P@ IOB£57NҞl >_=PjӴ!:MSքӿ?!VR.oMC+.$$Ai:;Y WUHF'BL!C++XZd2.Ȇ zR<¥"GU6bkM2c|gaTUB&}OS|y˄MwwT z'nb)wcH}‘wq$nL*A5rJ+ťY?!!"gWÐHR!Fkn>E 2Opm"JeLBb>|?,50~nR_e{H0uАu3S//7{ g;9fY 1?B/CQ:Q.˃#X Chcr1)t O^B`*- Q:q4P'M`'Yc?>HBaīcDnE؄5LK'c"Y(R]F> stream x+TT(TH-JN-()MQ( ()JU5Tp*O endstream endobj 5 0 obj 51 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 100 50] >> endobj 6 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 7 0 R >> >> endobj 7 0 obj << /Length 8 0 R /Type /XObject /Subtype /Image /Width 100 /Height 50 /ColorSpace 9 0 R /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x{gTVsnd}nLn `G^Eb{{jA%j4Ğs9ߵև}7 sYO{7kI[&hONe _Uej[~.#CN]Jpq3Nq3R7g>,_jJ;FxzϯW^em? 4o|~Io;Jm)!ڬiK .F] ?ԓl_oUeVv8Pt;n;shSuW]u&ustYi&.hhՂ-5ټ1fs?Ƙk Sf{nY2iViP&lub w߿Ҳ64;jB`p yAwK"Tߐ5EWO_Wp˻_Y`VYuJ/Cm.tE_ó{*VnCJ DgKivo wj 2-u=Qp$@aǷ{pc޵V-Yuy渮Ys)K'j|ap傱aVjchJҬ>X+t]7[[#`uԡ- weJ<>yۤ2v1T?Zl8:p/lݕdבL B)&gm/~:_b˘UkbV4GĠxVW;1+WZ~Ĭ.?;WQgٷm4߭ϹU1R|8r^@vD_ZD3QnaA5K:εޟi'~1[blܣS3hDzm - 6zi˦-hf5g6g /yZ.gt㪯7. ٳ6Na1 'n"Y{rڎr -.=Z-zm]>쏴g5fߝk7e>o Խ܌YayV7zލ^~{ YPl Q;^cޝ[Ui˒_ʋv>5'3 X`]m^~8P Szg6G[{MʠK{n5 DlϳϕjVfsǘ.f;V[؎Ty.'iVaStX_$t}&ǝm N_X]OxWU}ʓ,ՏgK_Ulu P J,׺4`uj2oT]*?#*ާ#C+?*/2y-fJXю=`u%[zo~뚯 /XM^4`J+P}j1 8n4s. ܹ*և =MU`;MG\Sm`弫B@pH7ꛒo ҞXռW`ZCe:˿k+\p`y< 8\;ٗ`M`dWkYiRP,B%ƒonV_/#p9`~>57S:kZ@UtSb G-Xala+,ՙ-𡒟VVܼ @oeqR乞sI4.yTݩz-,+2Pg䴓؂m{"2Q=BϕWVnH >-`V?V BK!- VC*H`feYeZzh U]w$قߖ^-`5tXlj%+b ̬VVL[ڦkU$©FE^ўH61MwZΙ9{XXmmq1<(؂dmҨ~ X:WA`%h@kW+-5<%PHV9`V# VC1C&1[[``RrʌB.* G+ق?Y.`Vj98%5gmP]G+v,{2x? tl!k׬ܽV` kk-v1:t?ҜBBI2wdw@qhC' -` l`UX_X_H Mdtmu[±|{VIVtV` ^` 4X@f @׭ ¡˴ t``5¦~;]kb/Dec[r *CoF}BhV-XmmrWHx-T@$?i͛C*҆O-t҆ͳuO!m[h)d69RIxFb'F;IXG҆$!m[ P!m4&دfQfāMq'xFuXQ˃9Ě* $m =3! Gl!ZPОwݐ6^%iClJ6OzJ-JVH&[f $mV$mj-(t<;J$B8 <2Ҝ[ 0acL[`i8`MքvK|b{sc mҶ3X-(>BH;!m <nNF|Hb ?4f[X-4vE6 ` ׺ryu!m-ܭ([HaXh[-K{-O<l!"_Z@I8I`0+h@dict2Ky~ mjqܼ} -`츳OHDi-Ҧ5W fzE{usXv'0oΞٶ3l!pdۿԿ)*jc`@\ڪStBO(K V` seZb ` 6Ɛ6W m2oS J`[Z٤8Dcg$8?!͊<ނ|thE1Ȳ?Zgt\ޙ\6;[x_hq is{Ս,;!ߔX5?k+tM O O ?KC6E+.5&9&)JxCqwag^[Nsc]uEM$m#]l6̶\={AMu!mL.8fމsu2BiBZmmtoss\0Kx-XڒS+f ̬.](~H#JltҬ!pG6BFE":I`z 2p;Px N+2X]%m>ň y eiBFaBڤYw?]ڙ6Pvl!k7|`%CM mr"Hڴ-lk!m[~X{:&|eV0+670[XW6Sl:=eaf;a֩Px )r\Fx l eaگ ic:քS2l{[G{dG_ʺQi#6Z5,m҆P_=Ht6[|w#kI mf%lϕd6ܩ˹]E|6`V6]qlOd4ޓJF,m i0_> ð}O̰ YڬKfm4P=X2xsqWtbs+[0@ҦMHod}6+!m~HFZt!-# %-7fQ0$mőɌ`@3>WyN'-1) ~6BwbmlA5+%`i`&K'6` C-lO$iSi_| Y--EjiSKF(K.3[eiCM㖬dLJaY]&72Z̊RU$"#TH2B};cAs=aڤ@Ȏ&P6~>#w$="a |^@6$m=oeic5_, 6CPx RjFhnHb 0B%i;Ts`;PNmWXmf#t7B/Ka-pjB3}/aoaF/Y Hm$#ԭ)̩tޔ/uW1Jef RH, %jZFJNmD5J` Ej3E6d9lfidߚipnoC]0B -)9ɩ ؂^aRĦ iSv_2B3M%Ou(PĦ+!m4s|r>%X2B#]Yڀ-ܶjU?jVlRl}ޛ)6=+%Vdgw]*#TKHa6rjs PHכK_h||VdZk#i'P6 lRjނ0B1-SRNm[uDl::ix~VbS\/ai> 1rjs/>U&fdR0Uð`f椿IPS|If ^(<% C0BWPM#4**}(bPK2B)!inxhJ%i/4vGjQ"`5Q6B9ai[+v",m|IXu ؂`EǃLceVon} `^լ1]2B4:Rjl_o*s;U$PĦD(f5}8l|._fd#ZCĦdSjqxH&Mk O= KĦaDxTCb d֧>HM?HmxV2e" l~ʹSt<--[ ŦxPl6?"y 41oYZ@t<&~,ig+Jð`5{Pt<`RǣǢ!Mu6wOǬڀ-TCu[8x6F!:60BEC%m(6}9P+R;}"6Z@«uJjs9_x@(@j_crq:>6a1?Y!b&fHf%` l iC6i?_is7^޾(bSx8 @ u2+q0/' {XVu3'lKV+'*f%ͽPb ڬ룳 P6hDj;\5g#ĬXڸR! ~t<86%i#T6-tAxH-GZ@{ʹRu|Q?j$X$߿Fc΄6bJ soY $mBu bS6ԆN96$m/m(wbV&(`Bک~6e#MYڠo1(%+U!#faZ8!@P&7BύPE4-P! lAxXQ!Mx[XGR#Cn::*6nN'FgҦ#-t,uĬ=AF(6#4B[rwx:I\((J|1<+ĦĬP35B!mBJڐ ix4PlB:' QHS(66FhMV,mܤFTĦh"b la֘bt<"R#2BYTejb` bVK*!NFmĦ,moLPt<@׹AlAŹJ٫r{}-pǣ>bzH̑ a[`oR60)u9Nl u<)&B8iN,0hUH2P@lJlGg) iRR8߳quy0B]l/䎇(-Pǃ؂l iCP&u<:>dCF1S!Mxؔ:hJ҆Ҹ1ĦQ4Bc`D# i &ۢ=y} -sǃvtMzYJmT҆|6xh0MV\HSX'5Bs:V6^!Q_'iiAeCwOvPu*H- iCl:d"PxPlF(U_Y:- { +^@-BZ+HmHP{ w<҂)QI`2uxBZ讕 Ә=Ҩ!׹#Pu0+x'm6W~i#1+6T_7:t"biS' ŦD*Uނ( JVMeG#,mrp#4@}ǜ VHA}`%[߶H->T{VCP2BI@CoE 0BeiIb2B{^ޒP] `%u ^k5Bl4>஍ VDlJ`%W؂bRj$XH0B!m-ܡԦ,mY*` _p#T`‡kC4JHh]6R!X6BE}]6BVdR#̊ wb *Ŧh2[u6Hwm-H`%Ԇ]JmPAx(҆Л* 4_Y$8e\;WrlJYڌAы#f" ݵͬDl #btSǃum z H(k$F+\v6n6ie| T_w;]ҙG*P6WE w< iBڷRj:eb H' _vnrA`Y$de7)6ein6\_T]FFFwmlj )fCة&.C[╎GgnmQ&։:XnJjHwm-T;\FV2]2Y :5B[nG^h@+׹A:FV+ĦۗS%30F(1+Uǃ+0 +l GP_7r@};yx݁ isF{__ endstream endobj 8 0 obj 9261 endobj 10 0 obj << /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xMHaї$T& R+SeL b}wg-E"u.VDNC:DuE^";cT03y|URcE4`λޘvztLUF\)s:k-iYj6|vP4*wd>,y vڴ=S԰79 ڸ@`ӋmvUl5`P=Gj)kP*}6~^/~.~a2 nײ0%f|U 9l7?j`l7"tiNf]?uhgM Zʲ4i[&LY_x {xO$̥߬S]%֧&7g̞>r=g8`候 8rʶ<dWT'<eL~.u"A=9뗚]>313X3-$e}u,gmg664$ыEzL*LZ_j_]Xy[?Xs N/ ]|msϚƫk_WfȸA2)oz-di2|m٣j|5ԥej8ɮeE7[Q|IM%ײxf)|6\ k`Ҳ䍐.> endobj 12 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 1 0 obj << /Producer (Mac OS X 10.5.8 Quartz PDFContext) /CreationDate (D:20090827222429Z00'00') /ModDate (D:20090827222429Z00'00') >> endobj xref 0 13 0000000000 65535 f 0000010904 00000 n 0000000165 00000 n 0000010772 00000 n 0000000022 00000 n 0000000147 00000 n 0000000268 00000 n 0000000357 00000 n 0000009801 00000 n 0000010736 00000 n 0000009821 00000 n 0000010716 00000 n 0000010854 00000 n trailer << /Size 13 /Root 12 0 R /Info 1 0 R /ID [ <7af05eb605c91127cf4f015fea4d9646> <7af05eb605c91127cf4f015fea4d9646> ] >> startxref 11046 %%EOF mail-2.6.4/spec/fixtures/attachments/test.png000066400000000000000000000154561267453234600212770ustar00rootroot00000000000000PNG  IHDRd2RPtEXtSoftwareAdobe ImageReadyqe<IDATx N0&q8IiIBQH# O/BFΈJK۱?n:A܌[tϢ!d9|4^]Ƅ2&uT( 2p8e;,p̍fppsw~)x~1|e&I[%,@=w]Hsm~zahx)8[b:cS}v*dhUH΁Bm'eUQͶ0<#4UY2TRZΧK0/*i*XK0r}|œǏ g9yY94r 0N>7 >$Okb=0'N^` |9ϟ@߿ONׯf 3v.,ԅM@v-.r/ KET_?# ( R.F`P@0ZAA**&.'dri0N\Ғ" H OЉaCbcbE 4RN=Xb|? γY2/&29[XR Bmݖ%m6bWDV(2LqˆE1 TrOL0\}Tx JȺ5'B&i:e}I!QQ߿]t0pFPafmBpAC5De d`9nNky},L0$LŽCWjZیRJV w۬oBOOu( :&s e&}˶!rm0(8XQpZ!\1Ŏ_rJ UBdl" y #2j) X'[86}/xWGMnTU9Z@X@#R@Vܦzu׃G>|u&%L(L^`v\|2"߾INƔ  ȴM;f+Eʼnw]Y ԉ7N]YH\B )]D2( p:L e:||7^G.CWO?ʛe4{E5:,~b]QJ1P[‹4u{$MO*qIVY>(ֵD@2cĬUI>E' Y.iYhk̲)$F&A׃h;ɊጝbH^NcJ^A 5&˘ccYM#*ߐe3(pV=>*X`Y($FD!v +S QP6"~ /`e)($̛sdCv6ys߹ p`.alz3!J -9ꁔZsUֵ\WWE.T|qPIW7V=mA? # pLTd"%yU9d%(fa,9\]*KV͖Hǂq7P 뇸!褬bX=jNA&_E#c]T>Z{C8{VBT!—b 8eXtQF$!ly8CR(gp|Xo%NUoybd:~ՓV8*ΜE0i^h Tac(̊Ra>z\j+`أn?|H.}Ċ2k86``NHbq/Q3K)4QL*؀I #c_Hlk1:Wq 6W,',)#H}4)|` koe:5{7߿{__wNrXj!s((em bKt!֤6)YyT*q|>F<5R؜aIk¤~tpXh\[6Ke)#AAqqC6ٛw/o7w@)"<Rb鎤vɡ9k4 tM Q:"*oL4<1 r#6#WǥrHj'~1!pgzj:;wrwxYYwG($_L3Y}DQv~LPe9,pA(RK#.}}Ov2]4nuuǪOUMdft'zas!-+8Ҕdز9(ݳ;7Y! IʹӃ`XOm" l<筭[˪AeE *Lt}‚BS]6g*c0TIN3}!8IzdH)RD e\SK~)<̜@kV#iJ\"QbOIRnDܚGVUé&HX8npʼb*@yM{4mzW,J4#V#`Ε`C""H oBEg\Z/g]`{0w7Pz ػRV@Pmw0;jpQ|cc<g0_x`iMg! +)w35صJ8ԋhAH9=i+U/@ ৿.: Z% -nSr(2N87#itVY  &>x+ 0'Vs=<,=d3̈X oɞzPK~3+w޼wB&5#^,'r4ypfY vv L;첀:vG+bXbKWi>[\.M/s~ n㺛uy}Ab.e3KVC1_ɴn5%%:^&Za3HbUymV^A rhU\JT7J *ŻFkw[Q\ٙI+W՘<51,lAqߵcZj2eDu㡴$0C+􅬚I%a>EJp, G(SvRr|܇U(P%"V{.]ˉtT7f0s# \(ؾ*RWW]S;|v>y,w{;R<-ZҠ_7PK*?ϳsޚQǙN6K&M#S43eDT`YQ_"(EQbea@A$nNeh Xu={Zgx_>wֺd_ಶXi 0VH'cV;Mi{",k-%>ExL &fxϼz`{p6Qe&t7ǕDzÕJ< 5LQ7saa2]dyWAUQY}i8Y]6BpéhXl,$f !Jc8*23BR)#~_Rܮ঳k"]Ao J9j)*9rj=lC}abF/P!!iF{`l"hqLg;|*m7cӦRa1U#Ps -/j/~s$ک~z^x$ {V6m۸K-OtR7?[}b/oa Z7r(qS2 {kA 2Q:tNC&_Jd{T:n??udfa;'}]zd=kN~ǎCnMOulM__>:*l d;HEK/O?'V|h=Kc0Ú,Rue]!c&{zE)'(ϟ,9A+NTU>.2ϧLLИ%;}# ϞS_c`qJm {8a-c-Ӏiw0z6-MZDdmi67ZB,uJ=g|AdH7 f;Sxˋņ@4+X#e oSz dڪd>2&HFoWQ"A ]Fφd$Sh.*K/h{G9A~z [{>t/ش1AS~qط'9/gʫW{/KWhL@XLpu-l[xf #U+jcAN6pLu-ageFtYSG%(*c6M [7^~텡mҹ\N=rPE]o֧layVP=_R!o%ZQg b>Z /Yҍi \uKˋKKK 4[Z7Nڮ ¤C9vhVQ swL3u1ŴRj, X{iRaX/J&x;#v9!t6r4p3o1n0n/l.m.l.m/o3r7 w='|D.M6V@_JjUtaFFIL!P%T+Y/^5cQ:M6J3F/~C+|@(z=%w:#u8 s6q4p2o1n/m/l.l.l.m0p4t9!x?)~G1O9XCbNmYwdFFJM"Q&V+Y1_7e=jDpJvR|YƒaNJhːoЖvԝ~٣ݪᯔ嵛麡ĬɱͶлӾнλ˹ɷƴð濭㼪߹ݵڲ֮өϦ̡ȝĘ{xrn~izdu_p[lVgRdM`I[EWAS=P9K5I2F.}B+{?'y=%w:"u7 s6q4p2o1n0m/l.l.m.n1p5u:$zA*I2Q<[EeQp\{hFGK N#R(V-\2`8f?lErLxT~[Äbȋj̒rјx֟ڥޫⱕ淜꼢ƭʳθѼԿѿϽͻ˹ȶƳ°忭⻪߸ܴذխҩϥˠȜė{vqm}hxct^oZkUgQbM^HZCV@S;N8K4H0E-|A)z?'x<$v9"t7r5q3p2o1m0m.l.l.m/o2r7u<%{C-K5T?^IhSr_lFHK O%S)W.\4b;hAnGsNzU]Ňeɍl͓sҚ{סۦଐ㲗縞뾤êǯ˴ιҼѿν̺ʸǵŲ侫Ứ޷۳دԫҨͤʟǛÖ~yupk|fwbr]nXiTePaK]GYCU>Q:N7J3G/C,|A)z=&w;#u8!s6r4p2o1n0m/m.l.l.m0o3r8!w>'}E/M7WB`LkWubrFIM"P&U+Y0^6cP9M5I2F.~C+{?(y=%w:#u8 s6q3p2n1n0m/l/l.l.n1p4t:"y@)H1P:ZDcOmZyevGJM#R'U,Z2_8e=jDpKwR~YƒaNJȋpјx՞٤ݪⰕ嵛黢ŭʲͷѻӾнμ̹ɶƳñ⼪๦ݵٱ֮ҩХ̡ȝŘ{wrm~iydu_p[lVgQcM_H[EW@S'w<#v9!t7r5p3p2n0m0m.l.l.m/o2r7 w<&|D.L6U?_JiTt`nIL O%T*X/]4b;hAnHtO{V^ňeʎmΕtӛ{סۨ୑䳘踞뾥êǰ˴ϹҼоϼ̺ʸǵIJ侫Ứ޷۳ׯԫѧͣʟƚÕ}yuok{fvbr]mXiSdOaK\FXBT>Q:N7J2F/C+{@)z=&w;#u8!s6q5p3o1n/m/l.l.l/m0o3s8!x>(}F/O8XBaMlXvdsIM"Q&U+Z1^6d=jCoJvQ|Xƒ`ƉgːnЖvԜ}٣ݩᯓ嵚麠ĬɱͶкӾоμ̺ɷǴñ㼪๦ݶڲ֮ӪЦ̢ɝř•|wrn~izev`q\mWhSdN`I[EXBS=O9M6I2F.}C+{@(x<%w:"u7s5r4p2n1m0m/l.l.m/n1p5t:#zA*H2Q;ZEdOo[zgxJM#R(V,[2`8f>lEqKxS~[Äbȋj̑pїx֟ڥޫⰕ涛껢ƭʳηѻԾҿϽͻ˹ȶų°忭⼩߸ܴٱ֭ҩΤˠȝĘ{vqm}hyct_pZkVgQcM_HZDW@R]HgSr^l}ŸK O$S)W/\3b:gAmFsNzV\ņdȍkΓsљzנڦ߬㲖縞뽣ªǯ˴ϸѽѿϽͺʸȵij¯侬Ứ޸۳ذիҨΣʟǛ×yupk{gxbs]nYjTfPbK]GYCU>R;N7J3F0C-|A)z>&w<#u9!s6r4p3o1n0m/l.l.l.m0o3r8 w>'|D.M7VA`KjVuaqťL!P%T*Y0]6c;hBnIuPzW^ƈfʎnΕuӜ}עܧஒ䴙蹠쾥ëȰ˵Ϲӽоϼ͹ʷƴı㽪ຨ޶ڲخԫѦ͢ɟƙ•}xtojzfvaq\mWiSeO`J\FXBT>Q:M5I2F/~C+|@(y=&w;#u8 s5r4p2o1n/m/m.l.l.m0p4s9"x?)~G0O:XCcMmYxeuɩM"Q'U,Z1_7e=kDpKwR}YÃaNJhːoЖwԝ٣ݩⰔ嶛黡ŭɲͶѺӾҿнͻ˹ɷƴñ⽪๦ܶٱ֮Ҫϥ̢ɝř|wsm~iydu`p[lWhRcM_I[EW@S^IhTs`máϱO$S*X.]4b;h@nHtOzV]ŇdɍlΔtӚ{נۧ୐㲘縞뽤μ@62oYOͣʟƚÖue*fOaKQ$n0n/m.l.l.m0p4s8 w>'|E0N8VBaLkVvcrǦҵP&T+Y1^6c1dN`JlC3jA0g=-d;*b8(`6% Y-W+V)T(S%R%h.n0m/l.l.l/n0p5t:"y@)G1P:YEcOn[yfwʪչQ'U,[1`8e>jDqKwS}ZƒbNJȋpїx՞٤ݪⰕ涜鼢ŭɲͷѻӾC94ѿоͻ@61°⼩߸ݵٱ֭өХˡȜĘM;3l[m~hydt_pZkVhRcM^IZDW@S=P8K4H1" y<$w9"u7r5q3p1n0m/l/m.m.l/n2q6u;${B,J3S=]HfRq]~j|ͮؼS)W-\4a9g@mFrMyU\ĆcȌk͒rҙzןڥ߬㲖淝꼤©ƯʴϸҼԿC94ҾϽͻ@61¯俬ứ߸۴ٰխҨΣˠǛė%pl|gxbs^oYjUfPaL^HZDU?R;N7J3H0" x;$v9!s6r4q3o1o0m/m.l.l.m0o3r7 v=&|D-L6V@_KiUtaoģвT*Y/^5c;hBoHtOzW^ňeʎlΔtӛ|סۧ߮䳘蹟뾥ëȰ̵ϹҼC:4оϼ̺?61㾫໨ݶ۲׮ԫѧͣʟƚ–1%ojzfwar]nXiSeOaK\FYBU>Q:M6J2F/" w;#u8 s6r4p2o1n0m/m.l.l/m0p4s8!x?(}F0O8XCbNlXwctǧӶõU,Z0_7d]HgSs_l}ΰپ˻X/]4b:gAmGtNyV\ĆdɍlΓsҚ{נۦ߬䲗縞꽤©ǯ˴θѼԿC:5Ѿϼͺʸ?50俬⻨߷۴ذիѨͣʠǛ×~r% Z?4kXnYjTfOaL^GZBU>R;M7J3F/~D,! u8!t6r4q2o1n0n/l/l.l.m0o3r7 w='|E/M7WA`LkVubqťѴ³οY0^5c;iBoIuP{W_ňfʎnϕuӜ}آܨஒ崙躠쿥ëȱ̵йҽC:5оμ̹ʷ?50ɞƚ•}yl0# K3)aMdN`J\FXAT>Q:L6I2F/~B+! u8 s6q4p3o1n/m/m.l.m.n1p4t9#x?)~G1P:YDcNmYxevɩոŶ¥Z2_8e>jDpKwR}Y„`NJh̑pЗw՝٣ݪᰕ嵛黡ŭɲͷлӾC:5ҿнλ˹ɶ>50ȜŘ{wsmhL? \50⻩߸۴ذ֬ѨΤˠțėzvql}hxczTE+Y8+ZCV?R4/Ứ޷۳ׯԬѨΣʟƚ–~yupk|fwar]nY_@2}M:U>Q:N7J3G0~C,|@)! t6r4q2o1m0m/l/l.l.m0p3s8!w>'}E0N8WBbMlXvcrǦҶóʩ_6d4/๧ݶڲ׮ӪЦ̢ɝř}xsn~izev`q\lWiSR5*M/#S=P:M5I1F/~B+{@(  r6q4p2o1n/m/l.l.l.n1p5t:#yA*~H1Q;ZEdOo[yfwʫչƷ̩`8e>kEqKxR~Z„bNji̒qЗx՞٤ު᱕涜鼢ŭɲͷѻӿC:5ҿϾλ˸ȶŴ>4/߹ܴٱ֭ҩϥ̠ȝĘ{vqm}iyct_oZlVgQ\G&S'  r5q3p1o0m/l/l.l.m/n2r6u<%{C,J5R=\HfSq^~j|ͮؽɻͪa9g@mGsMxU\ĆdɌlΓrҚz֠ۦ߬㲖緝뽤ªƯ˴θѼԿC95ѿϼ̻ʸȵij>4/޷۴ذլѨΣʠǜ×zupk|gwcs^oYjUfPbK&Q;N8J4G0D,|@)z>&  r4p3o1n0m/m.l.l.m/o3r8 v=&|D.L7V@_KjUtaoģгͿͫb;iBoHuP{W^ƇfʎmΕuӛ|ءܨ୒䳙蹟쾥ëȰ̵ϹҽC:5Ѿϼ̺ʷǴIJ=3/޶۳ׯԫЧͣʞƚ•}xspj{evaq\mXiTeOxM;A(P:M6J2G/~C,{@(z=%  r4p2o1m/m/m/l.l.n1p4s9"x?(}F0O9XCbNmYwdtȨӶĵ̭e=jDpJwQ}Yƒ`ƉhːoϖwԜ~أݪᯔ嵚黡ŭɲͶкӽC95оμ̺ɷƴñ=3.ݶڲ׭ӪЦ̢ɝŘ|wrwWI~izdu`p[mVhR]IpB1P8L5H1E.}B+{?(y<% r4p2o0n0m.l.l.l/n1p5u:#yA*I2R<[FeQp\{hyˬֺȹͭf>kFrLwS[Åbȋj͒qљy՞ڥޫⱖ涜꼣ŮɳηѻӾC94ѿнͻ˸ȶų°=3.wtp{nxkugrdo`vf{v|i O8/dE9xQBuN>S7+ B(S'x;$ q3o1n0n/l/l.l.m/n2q7v<&{C-K6S?]HhSr^l~áϰٿ˼ͮhAmGtOzU]ĆdɍlΓsӚzנۦ߭㲗縞뽤©ǯ˴ϸҼԿB94ѿϼ̻ʸȵIJ¯=3.3'"yuaRD*U>Q:N6J3G/C,|@)y>&x;$ p2o1n0m/m.l.l.m0p3s8 w>'|E.N7WAaLjVvbrŤҴóοͰiBoIuP|W_ƈgˏnϖvԜ}آܩஒ䴙躠쿦ìȱ̵ϹҽC94оμ˺ʷƴñ=3.3&!xton\\A6- F-#vJ8XAT>P:L6I2F.~C+|@(y=%w;# p2n1m0m/l.l.l/m1p5t9"x@)~G1O:YDdNnYxevɪոƶͱkDpKwS}YƒaNJiˑpЗxԝ٤ުⰕ嵛껢ŭʲͷѻӾҿнͼ˹ɶŴð忭㼪߹ܵٱ֭ҩϥˡȜŘ{vrn}iydu_q[lVgQcM_IZEV@S=O8K5H1E.}A*{?'y=$v:!t7s5q3o2o1n0m/m.l.m/n2q5u;$zB+J4S=\GfQq]|i{ͮ׼ɺͲlFsMyT\ącȌk͒rљy֟ڦ߬㲖渝꼤¨ǮʴθѻԿѾнͺ˸ȵų°忬⻩߸ܴذլѨΤˠǛėzuql|hxcs^oYjUgQbK]GYCU?R;N7K4G0D-}@)z>&x;$u9!t6s5p3o2n0m/l/m.l.m/n2r6 v<&|D.L7U?^JiTt`oâϲڿ̽ͳnHtOzV]ŇeɍlΔtҚ|סۧ୑䳘繞쾥êǰ̵ϹҽѾϽͺʷǴIJ侬Ẩ޷۳װԫѧͣɞƚÖ~xtok{fvar]nYiSeOaK\FXBU>Q:N6J2F/~C,|@)y>%x;#v8!t6q4q2o1n0m/l/l.l/m0o3s8"x?(}F0N9WBaMlXwdrƧҶõʹoJvQ|Xƒ_ƈgʏoϖvԜ}أݩᯓ嵚軠쿧Ĭȱ̵кӾоμ̹ɶƴð㽪๦ݵڲ֮ӪЦ̢ȝř|xsn~jzeu`q\mWhScN`I\EXAS=P9M5I1E.~B+{?(y=%w:"t8 s5r3o2o1m/m.m/l.l.n1p5u:#yA*~H2Q;ZEdPo[zgxʫֺǸ͵qLxS~[ÅbNjȋpїx՞ڥޫⰕ巜꼢ŮʲͷлӾҿϽλ˸ɶƳð忭⼩߹ݴٱ֭ҩΥˠȜĘ{wrm}hyct_pZkUgQcL^HZDV@R'y<$v:!t7s5q4p1o1m/m/l.l.m/n2q6u<%zC,J4S>\HgSr^~k}ŸͯؾʻͶsNyU\Ćdȍk͓sљ{֠ۦ߬㲖縞뽤ªǯ˴θѼԿѿϽ̺ʸȵŲ¯侬Ứ߷۴ذլѨΣ˟ƛėzuql{gwcs]nYjTePbK]GYCV>R;N7J4G/D,|A)z=&x<#v9 s6r4q3o2n0m/m.l.l/m0o3s8 w=&|E.M7V@`JjVuapģѳͿ͸tP{W_ƈfʎnϕuӛ|עܨஒ䴙蹟쿦ëȱ̵ϹҽѾμ̹ʷƴIJ佫ຨݶ۳دԪѧ͢ɞƚ•}xtoj{fvar]mWiSeO`J\FXBU=Q:M6I3F.~B+{@)y=&w:#u8 s6r4p3o1n0l/m.l.l/m1p3s9"x?(}F0O9XCbNmXxeuȨԷŵ͹wQ|Yƒ`ljh̐oЗwԝ٣ݩᯔ嶚黡ŭɲͶлӾҿоμ̹ɶƳð㽪๦ݵڱ֭ӪХ̡ȝř|wrn~iyeu`p[lWgRcN_I[EW@S&x<$v9!t7r5q3p1n0m/m.l.l.l0n2q7 u=&{C-L5T?]IhTs_m~¡αڿ˼ͼzU]ĆdɎm͔tӚ{נۧ߭䲘縞뾤ªǰ˵ιҽտѿμͺʸǵŲ侬Ứ޷ڳׯիѨͣʟƛÖ~ytok{gvbs]nYiTeOaK]GYBU>Q;M7J3F0D,|A)z=&x;#v8!s6r4q3o1n0m/m/l.l.m0p3s8!w>'|E/M8WAaLkWvcrƦҵ³ͽ|X_ƈgʏnϕuԜ}أܨᯓ崙麟뾦īȱ͵йӽоμ̺ɷƴı㽫๧ݶڲ׮ӪЦ̢ɞƙ|xsn~jzeu`q\lWhRdO`I\EXBT>P:L5I2F/~C+|@(y=%w;#u8 s6q4p2o1n0m.m.l.m/n1p4t:#x?)~G1P:YEcOnZyfwɪոƷ;}YÄaNJiˑpИw՞٥ݪⱔ涛鼡ŭɳͷѺӾѿоλ̹ɶƴð忭⼩߹ܵٱ֭ҩХˡȝŘ|wrm}hydu_p[kVgQcM_H[EWAR=O8L5H1E.}B*{?'y<%v:"u7 s5q3o2n0n/m/l.l.l/n2q6u;$zB,I4S=\GgRq]}j{ͮؽɺͿ[ĆdȌk͒rљz֟ڦެ㱖緝꽣©Ʈ˴θѻԿҾϽͻʸǵų侬⻩߷۴ذլҨΤʠǛė~zvpl|gwcs^oYkUfPbK]GZCU?R;N8J4G0D,}A*z>&x<$v8!t6r5q2o2n0m/m/l.l.l/o2r7 w=&|D-L7V@_JiUtaoãв;^ŇeɎmΔtӛ|סܧ୑䳘蹞뾤ëȰ˵ϹҼѾϽ̺ɸǴIJ侫ຨ޶ڳدԫЦͣɟƚ•}xtok{fvar]mXiTdN`K]GYBT>P;M6J3G/~C,|@)y=&w;#u9 s6r4p2o1m0m/m.l.l.m0o4s9"x?(}F0N9XBbMlYwdtǦӶĵd2;Z:;`;h(S;pHHmail-2.6.4/spec/fixtures/attachments/test.zip000066400000000000000000000260141267453234600213050ustar00rootroot00000000000000PKC;test.pdfUX JJz <7#c CƖu%K2YƖe0 F!٢,CXD`LBB)ޞ=Μ\:\iLUI]oq{qޗ~v 4ӟ]O|Kj$[GOc @ C !<{=89LVz 3ll\ް}?乙m8[1>n暪PC+2Ͽ!@T/l1Aa!^P(/qP >o"(TUT*nom!A^vhbU;"~Al<1^* *T [ֿͩJva?)*;bCM1X_?pA!v^St(!$ XB |pPࡑgGڣ){ޟffp61dձzGW~bݟumXpֵF%crA Jfnwo_Ĺ9`PԞER y|Y~v_=rLYgo 9v2ll'0yr!;t&1 ͻ{3>C& Z>-ڕD: vƿEEBO6y>r7w~ܜh䯩OG_ Qp+ 1g1$eSǗ6˃{okCjD?wA>o;u?YP6+"4?mr#| ]ھhKr,&ޱq9h?fvS cؒQA}@ 82؋:e MuR[ݯAЎm]+(ŋ ջ%/?ˉZi\ 7iWW0jp rVkuAU!ö>oL.!V_uZYfƛ|gփ]rNKoW~t}Ck",8{0^Ai]:tqZ(չKK'W'x.\ vz(XBm2S تq"Ƶ db]jZ?7~泫XC_V µ*MIm\ Upi?c,:PXsIS5.*q5fe?tpEI x0Hk#ϙK Kv('J?:֞sϠ:uC"cs c'oZ9t ᾅhHMKŷl~&.nteG]zz%jA$CɌ{L 5MjL5W(4v} ?Y:oKRm3Hwt{Z⣵Ute'kE .eK&duH7ƭNlKrWRЕ֬5I*`E/v<De WisCYasNs6^gŐ01 u(t_n=οRҾ?sk-lXx;.8`mWYrcN4o b[>*`*x<}F&h>&&ZCB3^@ Xчj?}RAiY}@ C1NC?4-k?{Z%EgiٗVf5kbD wXDjE;\ZTfCKJ9P 5ﲦjN3,34ZT S~9˶bPUࠜiztbu++^,SB^?BMS=1ȪXJiePI-CG'y[YlxqժK:(^?KM|kǽuX\ +p%|ϲ8=?/'^:CCL, i0so!A$M=D?''M<M4Zpҏb@;B~¿(@36USO1gAB$|WOTuMeuAPжC:{f J=򬠶3 3qwbjШA"#SqD\M6}q֗dz\)ʔfFO5~-)/Cr e_@gpY4a0[KL.I&}Qk e-Sa͌MQ']}@RxV,KѵKܤ!MI_Ԛ&ȍu^oevEc^N%b-bU+82 ;De ::]q<NMej]>_Mo9>e2B;H,ҭ+bczd5S"Nb~0+"SdxF 2M/ߕpw1k[Yת(~z5ԬWu A7s/NsxT.F<#zam /w*:;m'[*!JC,5erw|&Nnexxv -gk:ЦoVh3a1F$l)lckkR fvr6R4 =)}؅v}n i_dlg4~S[D9N6S!*͵?K}ZnmZGhLvsfe|^%hx;3$n8%udMr/УFt Smv#H¦Cs"]o4tY}C_0W~!5қW+PmLy$'JÀ1/566GkV[p+r%:O}zay'#)ܣbЂ^7 k$ZR|ۏk߻$C\JE6z0~ik N+i?K͸5|_o8Yΰz1vZfBLQJτ~x+ZvϚ}UsʉM24bEЩ.x7tߠ# .WTVTaR#oGZRllZ0 Ň%zma\}'^{DzT$=t-Wgd  {* 9p^ۧ*|N,.Q ~!.iDhcPs\S.1N y.HOl.ZzuǧḏGRDxq<_Ĉ*ˆh&{3d QonY,7ID|\b]Xw"lPS`ʆ3]{oC,,cN|1kiv_ђ} {s }ȀCSrsK^`09Lo.Zkd _;}Wyg´'cJ2D9-/l9"qvsODW\n~OeI6qJ~}z3y~7CE 4vn6@SW %_9'SIQ-WNړkpD'}+iM44B,} "G`8) 6oֽ8q7Ng֦4 L .UPw}W[o/N,88;lQȪZ$}t[buN I{skM"ZK/ /n⣧UMy%6pv/9sv.hDjJ^ޭ;B4Z o',!ŭ_x/:$kM[+ .&y W9K 񷓅U]?peKj5^^u wȦ=)BϳV+'$⵩WbsH"O>՗h@/t)|j]=Q%h [ 6xa VA\> #IТ! `l_}-Z#k`,Sy59/ s$p5)a.O9{adKḞbQJo4XÛ<Ѵ9G&MMIpD| `oasm3vSA`r^Ts/=nBn-쮆P[C~Ga : UʟbQ!NjI7agz,x?<0ρ_(\-#:7%i(Wx-= f@y'6UK[=~CC;2D wʔΤKd v&xQ@?\ W.Bf9*VgiF\B xXD=TVHYj* 3VO7ؖ)7v D>ʂN][au {1cz9 ҏcyڵBf8D kD-O‡g 'kyo=J-Ho=ak`95 |?kmi*u͕yi3; Fw"yҞ $%:f~Y,͉zKF~POZ  -[|GB_LG3$ c9-6kE@s 5D5sr Y>TA*bɧyYy8"|r旮=`񖤺Uy'7 _Z8\I+ ݮN}<&O#=AމS D!ֆqQL; Qn;AO-,Fq|V1Kޜf(qDETrN^S%1(T/H a2 Zs:$m*hɕapHu@^)g0Oj9Q WAKeтҐ% D[d.FOjXr߈0ˊ0"ewWRo:b7R԰Xs l8oL ['}̯H.EpXcQVl36mНzoŹ.YOOPѡvސwo )Z8_=^C@Xd96Zs) KtjEqCc HRxas" E[vB^g W*kHzG⠳ޫLjNWR*+NiLzt!H#kk+}69M=)Ivx 2;ƥтAOEWXe$GЖ✢TQEDѬΙBθJψ.[,vp:<~en'n˶^zqD%vl.^MA$'Tw125Fu7H9Gv]o*njo`W^WҬ |8,y'Q9W!4T*Rz,=oN3PSB 6ߨa2qqV}yR48{^&TLVTH<]ꖟ./ IDorAO.="iOJNOVg~0q19n3%F]M:Tn3Ćl%*Z3_{ 3._ +9?*gc$2p8=Hdj2)\{I /^@B &_YcyoLTIaʯ}m eNV©[lV$5!w~Fe߶_ȕ}e%P &g)U"x5x%=ʎ`BX 輹I`B 'Z32}U~$NHN߃q>k'e; yD[ LAWtP-~WSk Y+r'tm칊]*~Y;jȗ[F8K\_9vB[|KOî pq&>dȒ`ȁZ<.88 1x쾈u^m˭]UBx$/F:dd3_=,yE|N$7"Jy'Mąld"T [ 'ϩkyT/VcBc|Ԝ1ZzlTgdas\yw7VEhݵt%V׶ɞX;PMOeIG9Tk 9̳w">&=XRw 8QbHjvtakusb.XVe ;f_Ɍjd3F!,FAߺ8UlBěKjȋs9Havtr֙ٞm7H]$|:dNOs)s|MR̜gzrp?n{77̛aD0[y'DV;c7=BKl!YIa 6р7p\" [%YnE7ZCAW$ Q$6 d/wt̳D]pO胕gdBŧoiʹXBx@y{Ygzӷ,a6tДfG[Ɂ,ҎLx[&)'sH[ϸf˨U <^wh`I{ktⓔގ$|˖yfpm:npHim% pO1b9D5W0؄9y8--NO& ,Sȁ#;; ?FN$g)Ђ$ wg8o!8[ok83>%~y]'^ǛZJy"9au [5|gG+Z)13& + 3>LH XDQr $ޚ&S^['6AoͷRsț[) 4oz/u Y ;tc"笮y'nc@f/ON`{d6a,@ d\Ifa(-돦$cYg2|[g⛛ϟ8 Z22stO\x<3JϺsǧd*+(u_' kP3WTn&a)yѯeƌT׷!2J3YUU\su ]k8(DĕcC>F.>[ͺ-gNknKU߃O,CO$N-)`.c0gRR1M /o=? ez`GL=Y^"{ T"caX$%ܻ2{:&Eai<,%(usyww_G 7lL5Ѓ^^J8}c䞆1ޭ ؁:5LG\.Ajȇ{1Pv!GCZcF\Źm.u|Ѿ.W]% 0SI/ezϕBvTsS zWGN<Eo!ꯌ}*R0`)]>prYks\S[T5Ӎ*Ͱпh _BSk7ڿTMSM /Ni{_u/|OUE[?F0!{lĀ?>Aп =-M'\E딪C\n?R:DUUE.-mjcPKMNG.*,PK C; __MACOSX/UX JJPKC;__MACOSX/._test.pdfUX JJc`cg`b`MLVVP'A @+PK%!(RPKC;MNG.*, @test.pdfUXJJPK C; @At*__MACOSX/UXJJPKC;%!(R @*__MACOSX/._test.pdfUXJJPK$+mail-2.6.4/spec/fixtures/attachments/てすと.txt000066400000000000000000000000411267453234600234350ustar00rootroot00000000000000this is a test これわてすとmail-2.6.4/spec/fixtures/emails/000077500000000000000000000000001267453234600165365ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/attachment_emails/000077500000000000000000000000001267453234600222205ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_content_disposition.eml000066400000000000000000000012261267453234600312260ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-13-196941151 Content-Type: text/x-ruby-script; name="hello.rb" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="api.rb" puts "Hello, world!" gets --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_content_location.eml000066400000000000000000000016701267453234600304750ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-13-196941151 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: Photo25.jpg Content-ID: Content-Disposition: inline jamisSqGSIb3DQEHAqCAMIjamisxCzAJBgUrDgMCGgUAMIAGCSqGSjamisEHAQAAoIIFSjCCBUYw ggQujamisQICBD++ukQwDQYJKojamisNAQEFBQAwMTELMAkGA1UEBhMCRjamisAKBgNVBAoTA1RE QzEUMBIGjamisxMLVERDIE9DRVMgQ0jamisNMDQwMjI5MTE1OTAxWhcNMDYwMjamisIyOTAxWjCB gDELMAkGA1UEjamisEsxKTAnBgNVBAoTIEjamisuIG9yZ2FuaXNhdG9yaXNrIHRpbjamisRuaW5= --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_message_rfc822.eml000066400000000000000000000102221267453234600276360ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-13-196941151 Content-Type: message/rfc822 From xxxx@xxxx.com Tue May 10 11:28:07 2005 Return-Path: X-Original-To: xxxx@xxxx.com Delivered-To: xxxx@xxxx.com Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT) Received: from xxx.xxxxx.com ([127.0.0.1]) by localhost (xxx.xxxxx.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 70060-03 for ; Tue, 10 May 2005 17:26:49 +0000 (GMT) Received: from xxx.xxxxx.com (xxx.xxxxx.com [69.36.39.150]) by xxx.xxxxx.com (Postfix) with ESMTP id 8B957A94B for ; Tue, 10 May 2005 17:26:48 +0000 (GMT) Received: from xxx.xxxxx.com (xxx.xxxxx.com [64.233.184.203]) by xxx.xxxxx.com (Postfix) with ESMTP id 9972514824C for ; Tue, 10 May 2005 12:26:40 -0500 (CDT) Received: by xxx.xxxxx.com with SMTP id 68so1694448wri for ; Tue, 10 May 2005 10:26:40 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=xxxxx.com; h=received:message-id:date:from:reply-to:to:subject:mime-version:content-type; b=g8ZO5ttS6GPEMAz9WxrRk9+9IXBUfQIYsZLL6T88+ECbsXqGIgfGtzJJFn6o9CE3/HMrrIGkN5AisxVFTGXWxWci5YA/7PTVWwPOhJff5BRYQDVNgRKqMl/SMttNrrRElsGJjnD1UyQ/5kQmcBxq2PuZI5Zc47u6CILcuoBcM+A= Received: by 10.54.96.19 with SMTP id t19mr621017wrb; Tue, 10 May 2005 10:26:39 -0700 (PDT) Received: by 10.54.110.5 with HTTP; Tue, 10 May 2005 10:26:39 -0700 (PDT) Message-ID: Date: Tue, 10 May 2005 11:26:39 -0600 From: Test Tester Reply-To: Test Tester To: xxxx@xxxx.com, xxxx@xxxx.com Subject: Another PDF Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2192_32400445.1115745999735" X-Virus-Scanned: amavisd-new at textdrive.com ------=_Part_2192_32400445.1115745999735 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Just attaching another PDF, here, to see what the message looks like, and to see if I can figure out what is going wrong here. ------=_Part_2192_32400445.1115745999735 Content-Type: application/pdf; name="broken.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="broken.pdf" JVBERi0xLjQNCiXk9tzfDQoxIDAgb2JqDQo8PCAvTGVuZ3RoIDIgMCBSDQogICAvRmlsdGVyIC9G bGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KeJy9Wt2KJbkNvm/od6jrhZxYln9hWEh2p+8HBvICySaE ycLuTV4/1ifJ9qnq09NpSBimu76yLUuy/qzqcPz7+em3Ixx/CDc6CsXxs3b5+fvfjr/8cPz6/BRu rbfAx/n3739/fuJylJ5u5fjX81OuDr4deK4Bz3z/aDP+8fz0yw8g0Ofq7ktr1Mn+u28rvhy/jVeD QSa+9YNKHP/pxjvDNfVAx/m3MFz54FhvTbaseaxiDoN2LeMVMw+yA7RbHSCDzxZuaYB2E1Yay7QU x89vz0+tyFDKMlAHK5yqLmnjF+c4RjEiQIUeKwblXMe+AsZjN1J5yGQL5DHpDHksurM81rF6PKab gK6zAarIDzIiUY23rJsN9iorAE816aIu6lsgAdQFsuhhkHOUFgVjp2GjMqSewITXNQ27jrMeamkg 1rPI3iLWG2CIaSBB+V1245YVRICGbbpYKHc2USFDl6M09acQVQYhlwIrkBNLISvXhGlF1wi5FHCw wxZkoGNJlVeJCEsqKA+3YAV5AMb6KkeaqEJQmFKKQU8T1pRi2ihE1Y4CDrqoYFFXYjJJOatsyzuI 8SIlykuxKTMibWK8H1PgEvqYgs4GmQSrEjJAalgGirIhik+p4ZQN9E3ETFPAHE1b8pp1l/0Rc1gl fQs0ABWvyoZZzU8VnPXwVVcO9BEsyjEJaO6eBoZRyKGlrKoYoOygA8BGIzgwN3RQ15ouigG5idZQ fx2U4Db2CqiLO0WHAZoylGiCAqhniNQjFjQPSkmjwfNTgQ6M1Ih+eWo36wFmjIxDJZiGUBiWsAyR xX3EekGOizkGI96Ol9zVZTAivikURhRsHh2E3JhWMpSTZCnnonrLhMCodgrNcgo4uyJUJc6qnVss nrGd1Ptr0YwisCOYyIbUwVjV4xBUNLbguSO2YHujonAMJkMdSI7bIw91Akq2AUlMUWGFTMAOamjU OvZQCxIkY2pCpMFo/IwLdVLHs6nddwTRrgoVbvLU9eB0G4EMndV0TNoxHbt3JBWwK6hhv3iHfDtF yokB302IpEBTnWICde4uYc/1khDbSIkQopO6lcqamGBu1OSE3N5IPSsZX00CkSHRiiyx6HQIShsS HSVNswdVsaOUSAWq9aYhDtGDaoG5a3lBGkYt/lFlBFt1UqrYnzVtUpUQnLiZeouKgf1KhRBViRRk ExepJCzTwEmFDalIRbLEGtw0gfpESOpIAF/NnpPzcVCG86s0g2DuSyd41uhNGbEgaSrWEXORErbw ------=_Part_2192_32400445.1115745999735-- --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_only_email.eml000066400000000000000000000014371267453234600272640ustar00rootroot00000000000000Subject: this message JUST contains an attachment From: Ryan Finnie To: bob@domain.dom Content-Disposition: attachment; filename=blah.gz Content-Transfer-Encoding: base64 Content-Description: Attachment has identical content to above foo.gz Message-Id: <1066974048.4264.62.camel@localhost> Mime-Version: 1.0 Date: 23 Oct 2003 22:40:49 -0700 Content-Type: application/x-gzip; NAME=blah.gz SubjectthismessageJUSTcontainsanattachmentFromRyanFinnierfinniedomaindomTobo bdomaindomContentDispositionattachmentfilenameAblahgzContentTypeapplication/ xgzipnameAblahgzContentTransferEncodingbase64ContentDescriptionAttachmenthas identicalcontenttoabovefoogzMessageId1066974048426462camellocalhostMimeVersi on10Date23Oct20032240490700H4sIAOHBmD8AA4vML1XPyVHISy1LLVJIy8xLUchNVeQCAHbe7 64WAmail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_pdf.eml000066400000000000000000000072021267453234600257010ustar00rootroot00000000000000From xxxx@xxxx.com Tue May 10 11:28:07 2005 Return-Path: X-Original-To: xxxx@xxxx.com Delivered-To: xxxx@xxxx.com Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT) Received: from xxx.xxxxx.com ([127.0.0.1]) by localhost (xxx.xxxxx.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 70060-03 for ; Tue, 10 May 2005 17:26:49 +0000 (GMT) Received: from xxx.xxxxx.com (xxx.xxxxx.com [69.36.39.150]) by xxx.xxxxx.com (Postfix) with ESMTP id 8B957A94B for ; Tue, 10 May 2005 17:26:48 +0000 (GMT) Received: from xxx.xxxxx.com (xxx.xxxxx.com [64.233.184.203]) by xxx.xxxxx.com (Postfix) with ESMTP id 9972514824C for ; Tue, 10 May 2005 12:26:40 -0500 (CDT) Received: by xxx.xxxxx.com with SMTP id 68so1694448wri for ; Tue, 10 May 2005 10:26:40 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=xxxxx.com; h=received:message-id:date:from:reply-to:to:subject:mime-version:content-type; b=g8ZO5ttS6GPEMAz9WxrRk9+9IXBUfQIYsZLL6T88+ECbsXqGIgfGtzJJFn6o9CE3/HMrrIGkN5AisxVFTGXWxWci5YA/7PTVWwPOhJff5BRYQDVNgRKqMl/SMttNrrRElsGJjnD1UyQ/5kQmcBxq2PuZI5Zc47u6CILcuoBcM+A= Received: by 10.54.96.19 with SMTP id t19mr621017wrb; Tue, 10 May 2005 10:26:39 -0700 (PDT) Received: by 10.54.110.5 with HTTP; Tue, 10 May 2005 10:26:39 -0700 (PDT) Message-ID: Date: Tue, 10 May 2005 11:26:39 -0600 From: Test Tester Reply-To: Test Tester To: xxxx@xxxx.com, xxxx@xxxx.com Subject: Another PDF Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2192_32400445.1115745999735" X-Virus-Scanned: amavisd-new at textdrive.com ------=_Part_2192_32400445.1115745999735 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Just attaching another PDF, here, to see what the message looks like, and to see if I can figure out what is going wrong here. ------=_Part_2192_32400445.1115745999735 Content-Type: application/pdf; name="broken.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="broken.pdf" JVBERi0xLjQNCiXk9tzfDQoxIDAgb2JqDQo8PCAvTGVuZ3RoIDIgMCBSDQogICAvRmlsdGVyIC9G bGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KeJy9Wt2KJbkNvm/od6jrhZxYln9hWEh2p+8HBvICySaE ycLuTV4/1ifJ9qnq09NpSBimu76yLUuy/qzqcPz7+em3Ixx/CDc6CsXxs3b5+fvfjr/8cPz6/BRu rbfAx/n3739/fuJylJ5u5fjX81OuDr4deK4Bz3z/aDP+8fz0yw8g0Ofq7ktr1Mn+u28rvhy/jVeD QSa+9YNKHP/pxjvDNfVAx/m3MFz54FhvTbaseaxiDoN2LeMVMw+yA7RbHSCDzxZuaYB2E1Yay7QU x89vz0+tyFDKMlAHK5yqLmnjF+c4RjEiQIUeKwblXMe+AsZjN1J5yGQL5DHpDHksurM81rF6PKab gK6zAarIDzIiUY23rJsN9iorAE816aIu6lsgAdQFsuhhkHOUFgVjp2GjMqSewITXNQ27jrMeamkg 1rPI3iLWG2CIaSBB+V1245YVRICGbbpYKHc2USFDl6M09acQVQYhlwIrkBNLISvXhGlF1wi5FHCw wxZkoGNJlVeJCEsqKA+3YAV5AMb6KkeaqEJQmFKKQU8T1pRi2ihE1Y4CDrqoYFFXYjJJOatsyzuI 8SIlykuxKTMibWK8H1PgEvqYgs4GmQSrEjJAalgGirIhik+p4ZQN9E3ETFPAHE1b8pp1l/0Rc1gl fQs0ABWvyoZZzU8VnPXwVVcO9BEsyjEJaO6eBoZRyKGlrKoYoOygA8BGIzgwN3RQ15ouigG5idZQ fx2U4Db2CqiLO0WHAZoylGiCAqhniNQjFjQPSkmjwfNTgQ6M1Ih+eWo36wFmjIxDJZiGUBiWsAyR xX3EekGOizkGI96Ol9zVZTAivikURhRsHh2E3JhWMpSTZCnnonrLhMCodgrNcgo4uyJUJc6qnVss nrGd1Ptr0YwisCOYyIbUwVjV4xBUNLbguSO2YHujonAMJkMdSI7bIw91Akq2AUlMUWGFTMAOamjU OvZQCxIkY2pCpMFo/IwLdVLHs6nddwTRrgoVbvLU9eB0G4EMndV0TNoxHbt3JBWwK6hhv3iHfDtF yokB302IpEBTnWICde4uYc/1khDbSIkQopO6lcqamGBu1OSE3N5IPSsZX00CkSHRiiyx6HQIShsS HSVNswdVsaOUSAWq9aYhDtGDaoG5a3lBGkYt/lFlBFt1UqrYnzVtUpUQnLiZeouKgf1KhRBViRRk ExepJCzTwEmFDalIRbLEGtw0gfpESOpIAF/NnpPzcVCG86s0g2DuSyd41uhNGbEgaSrWEXORErbw ------=_Part_2192_32400445.1115745999735-- mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_with_encoded_name.eml000066400000000000000000000035101267453234600305620ustar00rootroot00000000000000From xxxxxxxxx.xxxxxxx@gmail.com Sun May 8 19:07:09 2005 Return-Path: Message-ID: Date: Sun, 8 May 2005 14:09:11 -0500 From: xxxxxxxxx xxxxxxx Reply-To: xxxxxxxxx xxxxxxx To: xxxxx xxxx Subject: Fwd: Signed email causes file attachments In-Reply-To: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5028_7368284.1115579351471" References: ------=_Part_5028_7368284.1115579351471 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline We should not include these files or vcards as attachments. ---------- Forwarded message ---------- From: xxxxx xxxxxx Date: May 8, 2005 1:17 PM Subject: Signed email causes file attachments To: xxxxxxx@xxxxxxxxxx.com Hi, Test attachments oddly encoded with japanese charset. ------=_Part_5028_7368284.1115579351471 Content-Type: application/octet-stream; name*=iso-2022-jp'ja'01%20Quien%20Te%20Dij%8aat.%20Pitbull.mp3 Content-Transfer-Encoding: base64 Content-Disposition: attachment MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGFDCCAs0w ggI2oAMCAQICAw5c+TANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0EwHhcNMDUwMzI5MDkzOTEwWhcNMDYwMzI5MDkzOTEwWjBCMR8wHQYDVQQD ExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMR8wHQYJKoZIhvcNAQkBFhBzbWhhdW5jaEBtYWMuY29t MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn90dPsYS3LjfMY211OSYrDQLzwNYPlAL 7+/0XA+kdy8/rRnyEHFGwhNCDmg0B6pxC7z3xxJD/8GfCd+IYUUNUQV5m9MkxfP9pTVXZVIYLaBw ------=_Part_5028_7368284.1115579351471-- mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_with_quoted_filename.eml000066400000000000000000000067611267453234600313350ustar00rootroot00000000000000Return-Path: Received: from ?10.0.1.6? (d36-211-30.home1.cgocable.net [24.36.211.30]) by mx.google.com with ESMTPS id g14sm267889rvb.22.2009.05.13.08.42.03 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 13 May 2009 08:42:04 -0700 (PDT) Message-Id: From: Jeffrey Hardy To: Jeffrey Hardy Content-Type: multipart/mixed; boundary=Apple-Mail-6--218366681 Mime-Version: 1.0 (Apple Message framework v935.3) Subject: =?ISO-8859-1?Q?Eelanal=FC=FCsi_p=E4ring?= Date: Wed, 13 May 2009 11:42:01 -0400 X-Mailer: Apple Mail (2.935.3) --Apple-Mail-6--218366681 Content-Disposition: inline; filename*=ISO-8859-1''Eelanal%FC%FCsi%20p%E4ring.jpg Content-Type: image/jpeg; x-unix-mode=0700; name="=?ISO-8859-1?Q?Eelanal=FC=FCsi_p=E4ring.jpg?=" Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/b AIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwM DAwMDAwMDAwMDAEDAwMFBAUJBgYJDQsJCw0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAMgAyAwERAAIRAQMRAf/EAHsAAAIDAQEAAAAAAAAAAAAA AAgJBgcKBQQBAQAAAAAAAAAAAAAAAAAAAAAQAAEDAwEEBgYIAwkAAAAAAAIBAwQRBQYSADETByEi MjMUCFFhUmM0NUFxYlMVFjYJoUNz8EKSw1SEVRc3EQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIR AxEAPwB9e9aJ0+r17AuTzM/uI4TyUvFzwnCcf/P2a29pwJs2Q8Ua0QpAlw0BSESdlEBouoQ4Yf3U d1V0gsud+5p5lJDs2427Oo0R1uQzwrA3ZreUdGiLrNDxIZuJvoiq4q+hV2C17J+4/wAz7zItFoyh m031ua45IYakW9toyVpdTjJSIjzFDFoTFCFrrKqdRdygY/LXzV8r88uVttplKxpzIHGIlknSyGTb 5ciSStCwMloQNouLRurzQDrXTVF2Bi9hkLJs8Bw6o4jeh1F3oQdUkX11TYOvsArecDn4XIPlU5dL YBHl2YSTsWIkiUCPIdYMilG4qog8FKKO9VLSlKVVAyh5JkF3vkiYXipMlySRuFGZbNwiJXNRF1VJ V+lfpVd9KbgjEt97XJiOG84E6S0kNGV4jchTTiM6g1Ei6x3KNVqlE9GwGd5eeU6czckxgn7zNZnt tlCh2u2SI0QpL0cUZ1q8+yTKqjbqK4yogZaS0qtVoBjT/IP5hsStF+sdgt0O8Qbt4h8bjb58dXzN 4xdIDBxGCbIjTrKiLQk1V6KqDm+RsrL3+WmLs8woTluzyJAZZzCI4bbq/iDdW33EcaqBo6o8TUPQ ur012C3dgU/+7DAu44DygyWI6X4TYchuLMyGSKrT0yVEA42tK0qLTD9K+n69gzzzxt0lGGWXH7U/ NuTXiUQnAKC4BusvtgKUEkIlbLUq1SnoXYJfG/LRsDEkutK6Nkdgybi2BK3IBJBSHHozKFp4zNOJ 7aqpLqQ2y1AyX9v3mfBtPOeFIOYTQZDab45eYchR0NOaWTbfhm32RM20URJVVEMxqqqmwPS/FRlA Jx3ENpymlU3eqmwdfH5Oi6eGqpeKZMiVNycNUXp+utNgnewDJz8xblt5ieVmV8qb3fSsq3ptHbBk bsUlG33OOuqJKoVEIELquAqgptEYagUtSBlP5u4Dk/KjPcrwnOI7MXI8YmAzdoqGbkbiIyhDNhvK gk5GmR+E80ZCimKiqohj1QjN95a8xsZs8TLskwrLcHxDIJCSrFkF9s8+Ha5quNq42sWXIabbeVxs i0aSqooqotOjYCn8neA5ZzB5h24sNnRcZg2/hyFyGY04Qm1GopqDAoiuF0oNEVEXcS/SoaDLDOXE bUxARy4ZBKZBBF15tEekGiL1yRtNI1ovQKL6ERV6NgsHCxu9uUr9fmmhyGc8L94RCTw0FhQVItvF 1VoKABKRovSTpEXsigWp+boH+kkd1xe03v8AZ3/x2AFcozqz4ZFWZklwGC8SCsOztqhTXVcWgEba KvBbVV6TNN1VQV3bACXPnFHPMdZbZnVou9ut+e8vrqdmxmxXditsessCQkngTFADkKb0kifAiVRF lzhIA1I1AyCi2XIrLKzFrMhW1Pw5X/avKq5XF0mpwuI9J4gNynXWzkMPEHhyWPw3QbFsSaIyDYFX 8osrDlbz7Vuyk/dLW7cX4bUZvUjMNE4jjjLaLQT6+pB6dgcVhHMhmcATRVBBAXizVcRGxEOk1Mqo iCCLVVXoTYPTiFwczzmBLz6Qy3Bs9ktXgrHirg1kXBLmqiF5ubSkSMq4xH0w2yEXdFXDoiihBdf4 l70t3C7P8n2vr9e/YFMcxMNy/GbxJZyyM65cJSk+U8H+MkgXSIVdF6q8USVVQtVFqlFRKU2Cvoty uVlkm7BkAZnRp9t8TFt0W+yjoVQxIEKiGNVpVKKnV2CRLcLfn1vlYzPSVZryLSu+ERUF4mFXQT0O QIqD4aqIWmhjVNYgqpsA+XPlZEtV1NuxZLPyJ+xOpGkxZAaWGHWq1jFMaFENxtKK6giSglUMhLo2 A4PLVyizvJguuQlf7HYo0KR+HMyJdtnXQJD7raOSiYjjKhsF4dV0Khkqa1Wu5UUD3x3BYOLtybHa nJMl3IXPGzb1I0JLuF3RSQzkm2AACuNqgtg2Ig2IiAJQUXYKw/Osv/lE+F4vfJ2vvd/e/wAfs7BX vml+a2T5P8Ez2PnneO9r3Hs+vVsAhPfpbJfl/wAVbfivm3874D3f33r4ewRIfhh7zvQ7z+mvw3vP R6tg7y9/D7Hdsd38F3i919j777WwNy5e/o7B/lPy9P058p7R/D/5nvNWwS0OxH3/ABcTd/VXs/b9 GwB9/g/9S/t/s9g//9k= --Apple-Mail-6--218366681--mail-2.6.4/spec/fixtures/emails/attachment_emails/attachment_with_unquoted_name.eml000066400000000000000000000012201267453234600310210ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-13-196941151 Content-Type: text/plain; name=This is a test.txt Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=This is a test.txt Hi there. --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/error_emails/000077500000000000000000000000001267453234600212215ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/error_emails/bad_date_header.eml000066400000000000000000000046041267453234600247570ustar00rootroot00000000000000X-YMAIL-UMID: 1_28022_AGnHtEQAAW9xTQLt8wZPlyfni5U X-Apparently-To: someone@yahoo.com via 68.180.199.105; Fri, 10 Dec 2010 19:20:19 -0800 Received-SPF: pass (mta1007.mail.sp2.yahoo.com: domain of return@reactive-outpost.com designates 74.206.28.55 as permitted sender) X-YMailISG: EfAmUiocZAp0Gt06jFhMyq.RIPUVX9lzgOtsRqYzqYiHPTr1 0fU8Vw4OuGrVz8pSoGW6xDId01O9G9v_HqarLXv8V_3Z9ut5fddpRwyrVOpc 1NYVLhP.FzTcsd9snLKon1z0xEKDX0aWVgu6rOeJ3niXPtE3ubgKne3SWhrc 9Jh34ln.bbeJ52jQ7ToV0m5oC1_T47MCsj._NgxOknVeA1lAJbbtNAEclmXl SQvHnQENVjs9FKYmFsB8d1dSX61CsJq0OMSpC5aqnGFAV2DBPOggUD217rpT n.5Pe5NXv16E0mXO2gNKgtho5W72qSE.1nWBGc5Vl0h8XrXUj._O9Nkajzg2 .klfTThF3zT2ThdTWgFl4lwkNjPKrc1EvlDcd1IPDQYwvMc1SEUpP_lddKwd aQiDt9G9Bu_Nf9vS5T97ZrS6pJJde4U0vrV872UEF.Mj2kpocFr_ba3fC6wP kUO.gj3xw2YQmo3I56NV66VndTOrSya2qAGpkCjkWtT6irAxwXakWlts.EFC iCRmdqsx7CN4UdCJw3vtDc7ASdV5Ty.kKy2GvIrHOFW.gFYGCXM7V0YnXBD1 ho5ePgvP6hGNkrHA9MQzUKq7s6uikRvVPBR7ojjcxqpKOgilKuobsYeuEKZ. kOvWe6P3uZJxV4KVnGfBxCe9SU27RdVpdlWmI3cJc7ut2OfMUoTnI_dVBbK8 1O0tXTco9FYvL8IJfS4RzSnQOw7HDcqF4oNAeghagmlKAuvSCYk19XkqIdDd tzQO1K3DxMIdvS5ut39WQ.LoDu0b6BmFB.YDgUMF6zM3PtgzoJuVumOg1fvh jGf.3v5mgno63PiAoKoBSQkdCdf0GD_jPX1RX_Us405EVLsTjzyjiEno99Vq pxps1ab0rNal.g4Nep2ik_W7TgX6GCxUtZVFoHRbl4rA7gMPIPuF0MF5SkTN jd6vOu6eYRCyCBo_afBI_FkaG6J4gxis8FtAOpUFmXLW7Iwh2uVr4aoiv7ag Ee2U3XYQovYoYtzCsg.iAe97SjJcqINnps0DoC5ky9ijX9WSz4tJj_HgXWAo 2e8gh.25kkMg70QTFOdPONgQe3dF2g9wI7ELcIcMYSyMbvqqAY3OMTigxh9O _7PpaK_qHQ270JbYhnK53ZrNrIIwM1lhBjdjLfNjSaotnLT5.t1BobGskqhz 90CGlOIrzeI2xo_3c8Q.K8hceK_9oxsMP7TyML6J9KaEbV3lW0vHFUxXb21u 4bdKY3KBsxOPCA-- X-Originating-IP: [74.206.28.55] Authentication-Results: mta1007.mail.sp2.yahoo.com from=reactive-outpost.com; domainkeys=neutral (no sig); from=reactive-outpost.com; dkim=neutral (no sig) Received: from 127.0.0.1 (EHLO reactive-outpost.com) (74.206.28.55) by mta1007.mail.sp2.yahoo.com with SMTP; Fri, 10 Dec 2010 19:20:19 -0800 Received: from localhost (127.0.0.1) by reactive-outpost.com id h0calo0n7lgf for ; Fri, 10 Dec 2010 22:08:27 -0800 (envelope-from ) From: "Grants-Notification" Subject: You may_be Eligible for Legitimate_Cash from_GovAgencies! To: someone@yahoo.com Precedence: junk In-Reply-To: someone@yahoo.com Content-Type: text/html ; charest="us-ascii" Content-Transfer-Encoding: 7bit Date:
mail-2.6.4/spec/fixtures/emails/error_emails/bad_date_header2.eml000066400000000000000000000021521267453234600250350ustar00rootroot00000000000000X-Message-Delivery: Vj0xLjE7dXM9MDtsPTA7YT0xO0Q9MTtTQ0w9MA== X-Message-Status: n X-SID-PRA: enews@Free-Quilting.com X-AUTH-Result: NONE X-Message-Info: JGTYoYF78jHCcITVD+zs6u3ahcolNfp0m61kNO2SBMwKZtwdSoGZLR+eV3xtqv3QU2mvP3b1AtESP6eCYbaI4dABkTSkMMCjZGPGH3Q01dsRSddQ0kCWDw== Received: from drg.drgnetwork.com ([63.76.155.39]) by col0-mc2-f14.Col0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 14 Dec 2010 22:59:10 -0800 Received: from SFGAS1.DRGNETWORK.COM (sfgas1.drgnetwork.com [63.76.155.11]) by drg.drgnetwork.com (8.13.8/8.13.8) with ESMTP id oBF6xAuc018214 for ; Wed, 15 Dec 2010 00:59:10 -0600 Message-Id: <201012150659.oBF6xAuc018214@drg.drgnetwork.com> Sender: enews@Free-Quilting.com Date: Wed, 15 Dec 2010 59:10 -0500 From: "Free-Quilting.com" MIME-Version: 1.0 To: cc: Subject: 40% OFF holiday patterns and fabric! Content-Type: multipart/alternative; boundary="--PART.BOUNDARY.0001" Return-Path: bounces@strategicfulfillment.com X-OriginalArrivalTime: 15 Dec 2010 06:59:10.0647 (UTC) FILETIME=[93232C70:01CB9C25] mail-2.6.4/spec/fixtures/emails/error_emails/bad_subject.eml000066400000000000000000000052531267453234600241720ustar00rootroot00000000000000Received: from survey1usmta.mysurvey.com (survey1usmta.mysurvey.com [198.178.238.149]) by mtain-dh02.r1000.mx.aol.com (Internet Inbound) with ESMTP id 35AF9380001BD for ; Wed, 15 Dec 2010 12:22:13 -0500 (EST) Received: from 172.30.44.41 (172.30.44.57) by survey1usmta.mysurvey.com (PowerMTA(TM) v3.5r15) id h13ska0ko6cn for ; Wed, 15 Dec 2010 12:21:20 -0500 (envelope-from ) From: =?UTF-8?B?TXlTdXJ2ZXk=?= =?UTF-8?B?LmNvbSAmIEM=?= =?UTF-8?B?YXJvbCBBZGE=?= =?UTF-8?B?bXM=?= REPLY-TO: carol@reply.mysurvey.com To: someone@aol.com Date: Wed, 15 Dec 2010 12:21:20 -0500 Subject: =?UTF-8?B?TXlTdXJ2ZXk=?= =?UTF-8?B?LmNvbTogIFk=?= =?UTF-8?B?b3UgaGF2ZSA=?= =?UTF-8?B?YSBzdXJ2ZXk=?= =?UTF-8?B?IHdhaXRpbmc=?= =?UTF-8?B?ISAg?= =?UTF-8?Q?91123105?= =?UTF-8?B??= MIME-Version: 1.0 Content-Type: multipart/alternative;boundary="----=_Layout_Part_DC7E1BB5_1105_4DB3_BAE3_2A6208EB099A" x-aol-global-disposition: G X-AOL-SCOLL-SCORE: 1:2:376293952:93952408 X-AOL-SCOLL-URL_COUNT: 5 x-aol-sid: 3039ac1d41164d08f9453480 X-AOL-IP: 198.178.238.149 X-AOL-SPF: domain : mysurvey.com SPF : pass ------=_Layout_Part_DC7E1BB5_1105_4DB3_BAE3_2A6208EB099A Content-type: text/plain;charset="UTF-8" CONTENT-TRANSFER-ENCODING: 8bit You have a survey waiting! To take the survey: ================================================================== Please do not reply to this email, as we do not process emails sent to this address. To view FAQ's or to contact us, please go to our http://www.mysurvey.com/index.cfm?action=Main.lobbyGeneral&MyContent=contact page. ================================================================== You received this email because you (or someone in your household) registered to be a MySurvey.com member. Being a MySurvey.com member means receiving periodic email invitations to give your opinions via e-surveys as well as being eligible for special projects and product tests. If you wish to be removed from the MySurvey.com panel, please click here to http://www.mysurvey.com/index.cfm?action=Main.lobbyGeneral&myContent=unsubscribes. ================================================================== ------=_Layout_Part_DC7E1BB5_1105_4DB3_BAE3_2A6208EB099A Content-type: text/html;charset="UTF-8" CONTENT-TRANSFER-ENCODING: 8bit
hello world
------=_Layout_Part_DC7E1BB5_1105_4DB3_BAE3_2A6208EB099A-- mail-2.6.4/spec/fixtures/emails/error_emails/cant_parse_from.eml000066400000000000000000000020641267453234600250640ustar00rootroot00000000000000Date: Thu, 11 Jun 2009 23:25:02 -0700 From: Apple To: karl.baum@gmail.com Message-Id: <7oh6b1$1clhrjk@badger-vip.apple.com> Subject: Meet the new MacBook Pro family. Now includes 13-inch. Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=mimepart_4b0c353551675_3d1c15b79ea5e70c1783 --mimepart_4b0c353551675_3d1c15b79ea5e70c1783 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline From one solid piece of aluminum comes a MacBook Pro that's thin and light,= beautifully streamlined, and durable. --mimepart_4b0c353551675_3d1c15b79ea5e70c1783 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline From one solid piece of aluminum comes a MacBook Pro that's thin and light,= beautifully streamlined, and durable.
--mimepart_4b0c353551675_3d1c15b79ea5e70c1783-- mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_7-bit.eml000066400000000000000000000434731267453234600301610ustar00rootroot00000000000000Received: from nahou-mscnx06p.corp.enron.com ([192.168.110.237]) by NAHOU-MSMBX03V.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Thu, 10 Jan 2002 16:10:15 -0600 Received: from NAHOU-MSMSW06P.corp.enron.com ([192.168.110.228]) by nahou-mscnx06p.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Thu, 10 Jan 2002 16:10:14 -0600 Received: from mailman.enron.com (unverified) by NAHOU-MSMSW06P.corp.enron.com (Content Technologies SMTPRS 4.2.5) with ESMTP id for ; Thu, 10 Jan 2002 16:10:13 -0600 Received: from email11.quris.net (email11.quris.net [208.169.17.235]) by mailman.enron.com (8.11.4/8.11.4/corp-1.06) with ESMTP id g0AMAB920109 for ; Thu, 10 Jan 2002 16:10:11 -0600 (CST) Received: from localhost.quris.net (localhost [127.0.0.1]) by email11.quris.net (8.12.1/8.12.1) with SMTP id g0AM9nNk021044 for emclaug@enron.com; Thu, 10 Jan 2002 15:10:08 -0700 (MST) Message-Id: <101BN3c3ce68600277550d@bounce.quris.net> Errors-To: 101BN3c3ce68600277550d@bounce.quris.net From: Discover Card Reply-To: discovercard_newsflash@discover.qrs1.net To: emclaug@enron.com Subject: Discover(R) Card News Online - January 2002 Date: Wed, 9 Jan 2002 19:47:50 MST X-Quris: 8:EC:1440:0:101BN3c3ce68600277550d MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="-----=aaaaaaaaaa0" Return-Path: 101BN3c3ce68600277550d@bounce.quris.net -------=aaaaaaaaaa0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7-bit DISCOVERÆ CARD News Online January 2002 DISCOVER log in to the Account Center Internet ShopCenter(SM) In This Edition: Be Charitable Get Organized Manage Your Finances Better Protect Yourself Save More Money DISCOVERÆ It's a new year and time for new beginnings. Let us help you out with some possible resolutions. Be sure to read on! Be Charitable $1 Million Donated to the Families of Freedom Scholarship Fundô We're happy to announce that the second $1 million for the Discover Card Relief Efforts program, has been donated to the Families of Freedom Scholarship Fund*. Families of Freedom Scholarship Fund(TM) The Fund will benefit children and spouses of airplane crew and passengers, World Trade Center and Pentagon employees and visitors, as well as firefighters, emergency medical and law enforcement personnel affected by the attacks of September 11th. Thanks to you, we're making quick progress toward our goal of $5 million to help America's relief efforts by doing what you do everyday -- using your Discover Card. Learn more about the Discover Card Donation Program. To make a personal donation to the Families of Freedom Scholarship Fund, visit www.familiesoffreedom.org . Return to TOP Get Organized Four More Ways to Manage your Account... Discover Interactive With the Discover Inter@ctive e-mail reminders, it's easier than ever to manage your DiscoverÆ Card Account. In addition to the Discover Inter@ctive e-mail reminders already offered -- there are now four new convenient options that will notify you when: A Balance Transfer has Posted A Merchant Refund or Credit has Posted A Purchase Exceeds a Specified Amount (set by you) The Account Balance Exceeds a Specified Amount (set by you) To view a sample e-mail or to sign up for these new Discover Inter@ctive e-mails, click here today, and start enjoying the benefits right away. Return to TOP Manage Your Finances Better TRANSFER A BALANCE ONLINE Consolidate Your Holiday Balances and Save! Are all those holiday credit balances too much to keep up with? We can make it easier and help you save money! Just transfer those high-rate holiday balances to your Discover Card and get a special balance transfer rate! We can even send you an e-mail when your Balance Transfer has posted to your Discover Card account. Transfer a Balance or Learn more . Return to TOP Protect Yourself KNOW FRAUD(TM) Know Fraud and Keep Your Identity Safe Discover Card is a proud participant in the Know Fraudô campaign, a national initiative led by the Federal Government to prevent identity theft. Learn easy ways to protect your identity, how identity thieves work and more. Get informed! Return to TOP Save More Money Strunk and White Get a special Cashback Bonus award Barnes & Noble.com Get a 7% Cashback BonusÆ award** when you use your Discover Card to buy anything from Barnes & Noble.com. Plus, get FREE SHIPPING when you purchase two or more items in a single order. Hurry and stock up on all books, textbooks, movies, posters, music and more, only at Barnes & Noble.com . Return to TOP IMPORTANT INFORMATION PLEASE DO NOT REPLY TO THIS E-MAIL This e-mail was sent to: emclaug@enron.com You are receiving this e-mail because you are a registered Discover Card Account Center user and have subscribed to receive e-mail newsletters from Discover Card. To unsubscribe click here , log in to the Account Center, and change your settings. To update your e-mail address, or change your Account Center preferences, click here and log in. If you have questions about your Account, please e-mail us through Secure Messages and we will be happy to assist you. Discover Card takes your online security seriously. Enjoy 100% Fraud Protection against unauthorized transactions whenever you use your Discover Card, online or off. So, you can rest easy when you use your Discover Card. We respect your privacy. To view our privacy policy online, visit Discovercard.com * Discover Financial Services is not associated with CSFA. Citizens' Scholarship Foundation of America, Families of Freedom Scholarship Fund and all associated logos are trademarks of Citizens' Scholarship Foundation of America. ** Special Cashback Bonus award Terms and Conditions: For Cardmembers who participate in the Cashback Bonus program. This special Cashback Bonus award is separate from your annual Cashback Bonus award you may receive from Discover Card, and is not part of the Discover Card Cashback Bonus award calculation method. If, as of the date we determine whether you meet the terms of this offer, your Account is closed or delinquent, you will not receive this special Cashback Bonus award. Please allow 6 to 8 weeks for your special Cashback Bonus award to be credited to your Discover Card Account. Offer not transferable. ©2002 Discover Bank. Member FDIC. -------=aaaaaaaaaa0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: 7-bit DISCOVERÆ CARD News Online January 2002 DISCOVER log in to the Account Center Internet ShopCenter(SM) In This Edition: Be Charitable Get Organized Manage Your Finances Better Protect Yourself Save More Money DISCOVERÆ It's a new year and time for new beginnings. Let us help you out with some possible resolutions. Be sure to read on! Be Charitable $1 Million Donated to the Families of Freedom Scholarship Fundô We're happy to announce that the second $1 million for the Discover Card Relief Efforts program, has been donated to the Families of Freedom Scholarship Fund*. Families of Freedom Scholarship Fund(TM) The Fund will benefit children and spouses of airplane crew and passengers, World Trade Center and Pentagon employees and visitors, as well as firefighters, emergency medical and law enforcement personnel affected by the attacks of September 11th. Thanks to you, we're making quick progress toward our goal of $5 million to help America's relief efforts by doing what you do everyday -- using your Discover Card. Learn more about the Discover Card Donation Program. To make a personal donation to the Families of Freedom Scholarship Fund, visit www.familiesoffreedom.org . Return to TOP Get Organized Four More Ways to Manage your Account... Discover Interactive With the Discover Inter@ctive e-mail reminders, it's easier than ever to manage your DiscoverÆ Card Account. In addition to the Discover Inter@ctive e-mail reminders already offered -- there are now four new convenient options that will notify you when: A Balance Transfer has Posted A Merchant Refund or Credit has Posted A Purchase Exceeds a Specified Amount (set by you) The Account Balance Exceeds a Specified Amount (set by you) To view a sample e-mail or to sign up for these new Discover Inter@ctive e-mails, click here today, and start enjoying the benefits right away. Return to TOP Manage Your Finances Better TRANSFER A BALANCE ONLINE Consolidate Your Holiday Balances and Save! Are all those holiday credit balances too much to keep up with? We can make it easier and help you save money! Just transfer those high-rate holiday balances to your Discover Card and get a special balance transfer rate! We can even send you an e-mail when your Balance Transfer has posted to your Discover Card account. Transfer a Balance or Learn more . Return to TOP Protect Yourself KNOW FRAUD(TM) Know Fraud and Keep Your Identity Safe Discover Card is a proud participant in the Know Fraudô campaign, a national initiative led by the Federal Government to prevent identity theft. Learn easy ways to protect your identity, how identity thieves work and more. Get informed! Return to TOP Save More Money Strunk and White Get a special Cashback Bonus award Barnes & Noble.com Get a 7% Cashback BonusÆ award** when you use your Discover Card to buy anything from Barnes & Noble.com. Plus, get FREE SHIPPING when you purchase two or more items in a single order. Hurry and stock up on all books, textbooks, movies, posters, music and more, only at Barnes & Noble.com . Return to TOP IMPORTANT INFORMATION PLEASE DO NOT REPLY TO THIS E-MAIL This e-mail was sent to: emclaug@enron.com You are receiving this e-mail because you are a registered Discover Card Account Center user and have subscribed to receive e-mail newsletters from Discover Card. To unsubscribe click here , log in to the Account Center, and change your settings. To update your e-mail address, or change your Account Center preferences, click here and log in. If you have questions about your Account, please e-mail us through Secure Messages and we will be happy to assist you. Discover Card takes your online security seriously. Enjoy 100% Fraud Protection against unauthorized transactions whenever you use your Discover Card, online or off. So, you can rest easy when you use your Discover Card. We respect your privacy. To view our privacy policy online, visit Discovercard.com * Discover Financial Services is not associated with CSFA. Citizens' Scholarship Foundation of America, Families of Freedom Scholarship Fund and all associated logos are trademarks of Citizens' Scholarship Foundation of America. ** Special Cashback Bonus award Terms and Conditions: For Cardmembers who participate in the Cashback Bonus program. This special Cashback Bonus award is separate from your annual Cashback Bonus award you may receive from Discover Card, and is not part of the Discover Card Cashback Bonus award calculation method. If, as of the date we determine whether you meet the terms of this offer, your Account is closed or delinquent, you will not receive this special Cashback Bonus award. Please allow 6 to 8 weeks for your special Cashback Bonus award to be credited to your Discover Card Account. Offer not transferable. ©2002 Discover Bank. Member FDIC. -------=aaaaaaaaaa0-- mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_empty.eml000066400000000000000000000043321267453234600303640ustar00rootroot00000000000000Recieved: from nahou-mscnx06p.corp.enron.com ([192.168.110.237]) by NAHOU-MSMBX03V.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Tue, 13 Nov 2001 19:08:16 -0800 Received: from corp.enron.com ([192.168.110.228]) by nahou-mscnx06p.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Tue, 13 Nov 2001 21:07:21 -0600 Received: from mailman.enron.com (unverified) by corp.enron.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Tue, 13 Nov 2001 21:07:19 -0600 Received: from smtp011.mail.yahoo.com (smtp011.mail.yahoo.com [216.136.173.31]) by mailman.enron.com (8.11.4/8.11.4/corp-1.06) with ESMTP id g343Bbl58584 for ; Tue, 13 Nov 2001 21:07:07 -0600 (CST) Received: from unknown (HELO localhost) (youdd5o2o449465@219.133.84.88 with login) by smtp011.mail.yahoo.com with SMTP; Wed, 14 Nov 2001 03:13:54 -0000 MIME-Version: 1.0 From: 3712f2@msa.hinet.net To: brucegemini@yahoo.com.tw Subject: 4d8119¡@(¤j¸ÉªwÄѱM½æ) ¤j®a»¡­^»y ¨C¤éÅ¥MP3 (2004¦~6¤ë¥÷) ÁcÅ餤¤å¥úºÐª© (­^»y±Ð¾Ç)¡@8afb90 BCc: Array Content-Type: text/html; charset="big5" Content-Transfer-Encoding: Message-ID: <11107978796724623> 9bbf38a544f990e73cd12f3c56c60e6180edebd31d752d3997fa4c0650d6aaa338f73f155d5d382832b195b33cbbaa243830c981e12db0c9aac12db9a39836caab5058c0f5efbf326331103f9e1008c106f630fe4d33575efa5d362a28ece62c3fd2a034df2dab92e1f0f664b6179889f4f98a962e2287e336ec652475ccdf7fcdd85f8e025161d8f10c3bd9cc5701c0c7ed1ed84b5b2c01a05eee9e641da8b0

³nÅé«Ò°ê§ó·s¨³³t 06f630fe4d33575efa5d362a28ece62c3fd2a034df2dab92e1f0f664b6179889f4f98a962e2287e336ec652475ccdf7fcdd85f8e025161d8f10c3bd9cc5701c0c7ed1ed84b5b2c01a05eee9e641da8b09bbf38a544f990e73cd12f3c56c60e6180edebd31d752d3997fa4c0650d6aaa338f73f155d5d382832b195b33cbbaa243830c981e12db0c9aac12db9a39836caab5058c0f5efbf326331103f9e1008c1 _______________________________________________________________________ Yahoo! ¤u¨ã¦C - ¤º¸m¨¾¤î¼u¥Xµøµ¡¤u¯à¡I http://toolbar.yahoo.com.hk mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_plain.eml000066400000000000000000000141021267453234600303250ustar00rootroot00000000000000Return-Path: Delivered-To: em-ca-bruceg-spam@em.ca Received: (qmail 32184 invoked by uid 700); 28 Mar 2005 01:14:54 -0000 Delivered-To: em-ca-em-ca-bruceg@em.ca Received: (qmail 32179 invoked by uid 115); 28 Mar 2005 01:14:54 -0000 Received: from baocqccyw@hq.lindsayelec.com by churchill by uid 64011 with qmail-scanner-1.22 (clamdscan: 0.75-1. spamassassin: 2.63. Clear:RC:0(200.141.184.56):. Processed in 10.454045 secs); 28 Mar 2005 01:14:54 -0000 Received: from dial.suednet.com.br (HELO hq.lindsayelec.com) (200.141.184.56) by churchill.factcomp.com with SMTP; 28 Mar 2005 01:14:42 -0000 Return-path: From: shavonda Cabral To: Subject: bookkeeping Get in on IGTS asap. Date: Sun, 27 Mar 2005 19:11:59 -0600 Reply-To: MIME-Version: 1.0 X-Virus-Status: Scanned by norton Message-ID: <41314357824.13240873.93296@oxygen-k19.hq.lindsayelec.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: plain Content-Length: 5102 Lines: 125 acidness Exciting Easter Investor Alert Ticker:IGTS Current:0.01 Rating:Big Mover Next Week This st0ck receives our top rating - 10 out of 10 Breaking NEWS (released last night): Intelligent Sports, Inc. Offers Affordable Alternative This is the first news release the company put out since November - this is going to be exciting stock play Jump on board while you can - Don't regret It later About the Company: Youth And Amateur Sports Company Poised For Growth Intelligent Sports, Inc. is a publicly held company trading on the OTC markets under the ticker symbol ìIGTSî. Intelligent Sports will be the holding company for several sports related businesses. Intelligent Sports provides business units with strategic guidance and support in the areas of marketing, sales, sponsorships, partnerships, policy & procedures, finance and expansion. Their initial business launch is to develop youth and amateur sports centers throughout the country that offers a year-round sports calendar with emphasis on youth and amateur sports programs and skill development. Their plan is to expand this concept into membership-based, multi-purpose sports facilities that will promote a diverse range of sports programs, leagues, tournaments, clinics, individual sports skill development and nutritional training. Fresh News: UPLAND, Calif., Mar 22, 2005 (PRIMEZONE via COMTEX) Participation fees for school sports programs continues to escalate, at the same time record obesity levels in children are being reported by the Center for Disease Control. Intelligent Sports, Inc. (Pink Sheets:IGTS) is working to do their part to curb this alarming trend of by offering affordable fitness centers to kids. "The time when school sports programs had enrollment fees of $10 is fading," said former NBA star and Intelligent Sports, Inc. board member, Reggie Theus. "Not every parent is willing to pay $300 enrollment fees for a sport their child is only casually interested in; some parents can't afford to pay that much for a sport their child excels at." According to the President's Council on Physical Fitness and Sports, only 17 percent of middle and junior high schools and 2 percent of senior high schools require daily physical activity for all students. Hoping to fill the gap, The Sports Zone by Intelligent Sports will support a wide range of membership-based after-school sports programs, weekend leagues and tournaments promoting individual athletic skill development, the concepts of teamwork and discipline, and a love of the game. The Sports Zone opened in early October in Upland, California. It encompasses a 10,000 square foot facility featuring two basketball courts and caters to court sports including basketball, volleyball, cheerleading, and wrestling, and also has the ability to host soccer, football and other field-related athletic activity within the complex arena. +++++++++++++++++++++++++++ IGTS is expected to Explode All Next Week Be Sure To Get It Immediately, and profit big! ++++++++++++++++++++++++++++ Disclaimer This publication is not registered investment advisor, The information presented above is not an offer to buy or sell securities it contains "forward looking statements" within the meaning of Section 27A of the Securities Act of 1933 and Section 21B of the Securities Exchange Act of 1934. Any statements that express or involve discussions with respect to predictions, goals, expectations, beliefs, plans, projections, objectives, assumptions or future events or performance are not statements of historical fact and may be "forward looking statements." In compliance with Section 17(b), the publishers of this report disclose the holding of IGTS shares prior to the publication of this report. Be aware of an inherent conflict of interest resulting from such holdings due to our intent to profit from the liquidation of these shares. Shares may be sold at any time, even after positive statements have been made regarding the above company. Since we own shares, there is an inherent conflict of interest in our statements and opinions. Readers of this publication are cautioned not to place undue reliance on forward looking statements, which are based on certain assumptions and expectations involving various risks and uncertainties, that could cause results to differ materially from those set forth in the forward- looking statements. Please be advised that nothing within this email shall constitute a solicitation or an offer to buy or sell any security mentioned herein. This newsletter is neither a registered investment advisor nor affiliated with any broker or dealer. All statements made are our express opinion only and should be treated as such. We may own, buy and sell any securities mentioned at any time. This report includes forward-looking statements within the meaning of The Private Securities Litigation Reform Act of 1995. This newsletter was paid 41 500, from third party to send this report. Please do your own diligence before investing in any profiled company. You may lose money from investing. caddis worktable mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_qp_with_space.eml000066400000000000000000000035101267453234600320510ustar00rootroot00000000000000Return-Path: Delivered-To: em-ca-bait-precedes@em.ca Received: (qmail 7622 invoked by uid 115); 7 Nov 2004 21:30:59 -0000 Received: from fyouizjnp@swissonline.ch by churchill by uid 64011 with qmail-scanner-1.22 (clamdscan: 0.75-1. spamassassin: 2.63. Clear:RC:0(222.47.112.31):. Processed in 1.163709 secs); 07 Nov 2004 21:30:59 -0000 Received: from unknown (HELO 209.5.178.248) (222.47.112.31) by churchill.factcomp.com with SMTP; 7 Nov 2004 21:30:57 -0000 Message-ID: From: "Wilmer Capps" To: bait-passover@em.ca Subject: Low or High Blood Pressure? We can help. Date: Sun, 07 Nov 2004 18:23:56 -0300 X-Mailer: gene annulus pneumococcus-polyhedral: belgrade hanoverian lima MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_003A_5008K66J.3Z4LC80J" This is a multi-part message in MIME format. ------=_NextPart_000_003A_5008K66J.3Z4LC80J Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted printable If you're in need of a good RX site for online purchases, we are your answer. With Tens of Thousands of happy customers who saved huge, you can't go wrong. http://magyar8stator.com/26 Lots More Info Here Above URL is for more info & if you are interested. ------=_NextPart_000_003A_5008K66J.3Z4LC80J Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable If you're in need of a good RX site for online purchases, we are your answ= er.

With Tens of Thousands of happy customers who saved huge, you can't go wro= ng.

Lots More Info Here


Above URL is for more info & if you are interested.
------=_NextPart_000_003A_5008K66J.3Z4LC80J-- mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_spam.eml000066400000000000000000000036761267453234600302000ustar00rootroot00000000000000Received: from nahou-mscnx06p.corp.enron.com ([192.168.110.237]) by napdx-msmbx01v.corp.enron.com with Microsoft SMTPSVC(5.0.2195.1600); Sun, 19 Aug 2001 04:06:57 -0800 Received: from corp.enron.com ([192.168.110.226]) by nahou-mscnx06p.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Sun, 19 Aug 2001 06:06:02 -0600 Received: from mailman.enron.com (unverified) by corp.enron.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Sun, 19 Aug 2001 06:04:08 -0600 Received: from poetrix.com ([61.146.170.133]) by mailman.enron.com (8.11.4/8.11.4/corp-1.06) with ESMTP id g343Bbl38716 for ; Sun, 19 Aug 2001 07:03:27 -0500 (CDT) Message-ID: <35FDF82F.D000339@poetrix.com> Date: Sun, 19 Aug 2001 06:31:03 -0700 From: "neal ragland" User-Agent: AspMail 3.06 X-Accept-Language: en-us MIME-Version: 1.0 To: "palmer vladi.Pimenovraud" Suvladi.Pimenovject: For a vladi.Pimenovetter and more promising future just check eke Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7vladi.Pimenovit middagh oldusercompare othermachine one-twist natascha mz05 ntsoft netvladi.Pimenovr We supply high quality medications vladi.Pimenovy mail order at very competitive prices and provide a professional, convenient and affordavladi.Pimenovle means of purchasing your presc_ription medicines online Depresion-an"xiety, Antivladi.Pimenoviotic, Wt Loss, Women's Health, Mus-cle Relaxants, Sleeping Aids, Allergies and Paain Relief. Your tastes will vladi.Pimenove met here with 600 medications Hscearpomh http://fi.com.adherentgood.com/?2NX1q/vladi.Pimenoviayimh more people are using it for quicker rx refill When you're not with me?Well darling Im telling you now Im no good without you anyhowAnd have I told you lately that I love you Or you and I, If I only had wings of a little angel mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_text-html.eml000066400000000000000000000035141267453234600311550ustar00rootroot00000000000000Return-Path: Delivered-To: rait@bruce-guenter.dyndns.org Received: (qmail 12977 invoked from network); 6 May 2005 10:58:40 -0000 Received: from localhost (localhost [127.0.0.1]) by bruce-guenter.dyndns.org ([192.168.1.3]); 06 May 2005 10:58:40 -0000 Received: from zak.futurequest.net ([127.0.0.1]) by localhost ([127.0.0.1]) with SMTP via TCP; 06 May 2005 10:58:40 -0000 Received: (qmail 2252 invoked from network); 6 May 2005 10:58:39 -0000 Received: from lsne-catv-dhcp-29-115.urbanet.ch (unknown [80.238.29.115]) by zak.futurequest.net ([69.5.6.152]) with SMTP via TCP; 06 May 2005 10:58:29 -0000 Received: from mail.datavalet.com (80.238.29.115) by 80.238.29.115 (fairwayv.4) with SMTP id <09166i58p> (Authid: 3811297); Fri, 06 May 2005 10:52:01 -0100 Reply-To: "chianfong cuthbert" From: "chianfong cuthbert" To: cvs@bruce-guenter.dyndns.org Cc: rait@bruce-guenter.dyndns.org Subject: RE: We will help you refinance your home. Date: Fri, 06 May 2005 15:55:01 +0400 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="--651790_269334.01570" Content-Length: 636 Lines: 22 ----651790_269334.01570 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: text/html Hello,

You have qualified for the lowest rate in years.
You could get over $400,000 for as little as $500 a month.
Low rates are fixed no matter what.

Please visit the link below to verify your information:
Approval Form

Best Regards,
chianfong cuthbert, Account Manager
Reynolds Associates, LLC

--------------------
if you received this in error: re-m0-ve ----651790_269334.01570-- mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_with_8bits.eml000066400000000000000000001054251267453234600313170ustar00rootroot00000000000000Recieved: from nahou-mscnx06p.corp.enron.com ([192.168.110.237]) by NAHOU-MSMBX07V.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Wed, 5 Dec 2001 02:00:07 -0600 Received: from corp.enron.com ([192.168.110.226]) by nahou-mscnx06p.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Wed, 5 Dec 2001 02:00:19 -0600 Received: from mailman.enron.com (unverified) by corp.enron.com (Content Technologies SMTPRS 4.2.1) with ESMTP id for ; Wed, 5 Dec 2001 02:00:03 -0600 Received: from mail2.provantage.com (adsl-64-108-84-28.dsl.akrnoh.ameritech.net [64.108.84.28]) by mailman.enron.com (8.11.4/8.11.4/corp-1.06) with ESMTP id fB57xSl15666 for ; Wed, 5 Dec 2001 01:59:29 -0600 (CST) Message-Id: <200112050759.fB57xSl15666@mailman.enron.com> Received: from aaa (W3NEW [65.192.161.22]) by mail2.provantage.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id XBHNSC17; Tue, 4 Dec 2001 19:27:33 -0500 Date: Tue, 04 Dec 2001 17:11:25 -0459 MIME-Version: 1.0 X-Mailer: J4L-GFIMailer X-Expid: jajenardmeremesyi To: jeff_dasovich@enron.com Subject: The Original Advantage #e13011 Reply-To: announcements@provantage.com X-Priority: 3 X-JMSavedFile: D:\HTML Mailer\Outbound 29457673512957792\mail43379.eml Sender: "announcements@provantage.com" From: "announcements@provantage.com" Content-Transfer-Encoding: 8bits Content-Type: text/html; charset="ISO-8859-1" Return-Path: announcements@provantage.com PROVANTAGE.COM : The Original Advantage


December 04, 2001

Can't read this email? Click here

Issue#: e13011

To unsubscribe from the 
Original Advantage Click here
(Do Not Reply to this email)

PROVANTAGE Customer: jeff_dasovich@enron.com

Holiday Gift Ideas for the Computer Professional!
11Mbps Wireless Cable/DSL Router
By Belkin
The Belkin Wireless Cable/DSL Gateway Router lets you share files and a broadband Internet connection among all your computers-without using cables. It's ...More
  $201.42

Nostromo n45 Dual Analog USB Gamepad
By Belkin
The Nostromo n45 USB game pad's advanced ergonomic design, dual analog and USB-compatibility make the n45 innovative PC game pad to hit the market in years. ...More
  $12.31

New!

Plus! for Windows XP
By Microsoft
Personalize your computer experience like never before.
Built exclusively to take advantage of the power of Windows XP, MS Plus! delivers exciting ...More
  $33.47

iPAQ H3670 Color Pocket PC
By Compaq
You want to do more with life? The iPAQ Pocket PC H3670 is designed to ride along on the voyage of life-in your pocket or mounted to your mountain bike. ...More
  $465.50

FireWire Hub 6-Port
By IOGEAR
IOGEAR's FireWire hubs provide 1394a compliant ports that support data transfer rates of 100, 200 and 400 Mbps (megabits per second), and automatically ...More
  $60.09

HomeConnect 10/100 Mbps Dual Speed Ethernet 5-Port
By 3Com
Share an Internet connection among several computers (Your Internet service provider may charge additional fees.). Surf Web sites, send e-mail, download ...More
  $41.76

New!

Links 2001 Expansion Pack Volume 1
By Microsoft
Join PGA Tour pros Mike Weir & Keith Clearwater on 4 new courses designed for Links 2001:
  • The Canyons Course at Bighorn, Thanksgiving Point ...More
  •   $20.93

    Mavica CD1000 Digital Cam 12Bit 2.1 Pixel 3" CD-R
    By Sony
    Start with a high capacity, 156 MB 3" CD-R plus a high resolution, 2.1 megapixel image sensor. Attach it to a high-powered 52mm 10x optical zoom lens and ...More
      $908.56

    Wireless Bluetooth PC Card
    By 3Com
    Personal Connections - Instantly
    For spontaneous connections between your notebook PC and other Bluetooth devices, as well as "light" network ...More
      $109.31

    MultiSync LCD1830 18in LCD Flat Panel Display
    By NEC/Mitsubishi
    For users who need superior image quality in a small space, the MultiSync LCD Series monitors deliver bright, sharp screen performance in a slim, lightweight ...More
      $833.05

    New!

    MechCommander 2
    By Microsoft
    Take control of an entire company of the most fearsome military machines in history - BattleMechs!
    As a MechCommander, you command a unit of ...More
      $24.02

    DSP-500 Digitally-Enhanced USB Gaming/Multimedia
    By Plantronics
    Plantronics' DSP-500 digitally-enhanced gaming/multimedia headset with full-range stereo sound. Perfect for multimedia applications such as games, CDs ...More
      $78.99

    RipGo! Handheld 4X6 Mini USB CD Burner/MP3 Player
    By Imation
    Whether you're a music enthusiast or a mobile business professional, the Imation RipGO! device will satisfy the creative urges of your imagination. Designed ...More
      $369.96

    CD-RW Drive 16X/10X/40X USB 2.0 Drive w/USB 2.0
    By IOGEAR
    Drive. Unlock the power of the new Hi-Speed USB 2.0. IOGEAR's IMPULSE Drive. Burns at a blazing 16x speed, allowing you to create CDs faster than ever ...More
      $188.54

    Spressa CRX175A-A1 Drive 24x/10x/40x Int EIDE
    By Sony
    Receive a $30 rebate direct from Sony on SNYC97M purchases between 10/01/01 and 12/31/01. ... More
      $145.46

    Digital Voice Recorder w/No Software
    By Sony
    Features Include
  • World's first memory stick Digital voice recorder
  • Uses removable MS (memory stick)
  • Recording time: 63 min (SP)/131 min ...More
  •   $195.68

     
     

    Web Address: www.PROVANTAGE.com 
     Toll Free: 800-336-1166     Fax: 330-494-5260     email: sales@provantage.com


    Privacy Policy
    | Terms & Conditions | FREE Catalog

    ©2001 PROVANTAGE Corporation, 7249 Whipple Ave. NW, North Canton, OH 44720

    Products, prices, terms, conditions, or offers may change at any time. Company and/or product names are generally trademarks, or registered trademarks of their respective companies. Some promotional text may be copyrighted by the product's manufacturer. 
    The Original Advantage promotional email is delivered only to customers of PROVANTAGE Corporation. PROVANTAGE customers have purchased products in the past and submitted their email address as part of the checkout process. Or, customers have entered their name in the "Add to Email List" box on the PROVANTAGE.com home page. Any customer may unsubscribe from the list at any time by going to http://www.provantage.com/unsubscribe.htm. The email address is permanently removed from additional promotional electronic mailings, and will not be reactivated unless requested by the customer.  

    BizRate Customer Certified (GOLD) Site

    mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_with_semi_colon.eml000066400000000000000000000176201267453234600324140ustar00rootroot00000000000000Return-Path: Delivered-To: cvs@bruce-guenter.dyndns.org Received: (qmail 25055 invoked from network); 30 Jun 2005 03:57:11 -0000 Received: from localhost (localhost [127.0.0.1]) by bruce-guenter.dyndns.org ([192.168.1.3]); 30 Jun 2005 03:57:11 -0000 Received: from zak.futurequest.net ([127.0.0.1]) by localhost ([127.0.0.1]) with SMTP via TCP; 30 Jun 2005 03:57:11 -0000 Received: (qmail 20286 invoked from network); 30 Jun 2005 03:57:10 -0000 Received: from mx-host.dot.tk (unknown [220.173.239.48]) by zak.futurequest.net ([69.5.6.152]) with ESMTP via TCP; 30 Jun 2005 03:57:08 -0000 from: "Shelby" To: Subject: Attention Date: Wed, 29 Jun 2005 22:57:10 -0600 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----26473166335893217" X-Mailer: Microsoft Office Outlook, Build 11.0.5510 Thread-Index: AcT9+CUlRgRKMiKZSj+BjT+PHEf8rQ== X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Content-Length: 7044 Lines: 244 This is a multi-part message in MIME format. ------26473166335893217 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Dear Homeowner, You have been pre-approved for a $402,000 Home Loan at a 3.45% Fixed Rate. This offer is being extended to you unconditionally and your credit is in no way a factor. To take Advantage of this Limited Time opportunity all we ask is that you visit our Website and complete the 1 minute post Approval Form. Enter Here Sincerely, Esteban Tanner Regional CEO Tuuuuurn oooooff notiiificatiiiiions heeeeeeere. ------26473166335893217 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable;

    Dear Homeowner,

     

    You have been pre-approved for a $402,000 Home Loan at a 3.45% Fixed Rate.

    This offer is being extended to you unconditionally and your credit is in no way a factor.

     

    To take Advantage of this Limited Time opportunity all

    we ask is that you visit our Website and complete

    the 1 minute post Approval Form.

     

    Enter Here

     

    Sincerely,

     

    Esteban Tanner

    Regional CEO

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Tuuuuurn oooooff notiiificatiiiiions heeeeeeere.

    ------26473166335893217-- mail-2.6.4/spec/fixtures/emails/error_emails/content_transfer_encoding_x_uuencode.eml000066400000000000000000000077141267453234600313730ustar00rootroot00000000000000Received: from nahou-mscnx06p.corp.enron.com ([192.168.110.237]) by napdx-msmbx01v.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Thu, 10 Jan 2002 14:12:53 -0800 Received: from NAHOU-MSMSW06P.corp.enron.com ([192.168.110.228]) by nahou-mscnx06p.corp.enron.com with Microsoft SMTPSVC(5.0.2195.2966); Thu, 10 Jan 2002 16:12:52 -0600 Received: from mailman.enron.com (unverified) by NAHOU-MSMSW06P.corp.enron.com (Content Technologies SMTPRS 4.2.5) with ESMTP id ; Thu, 10 Jan 2002 16:12:47 -0600 Received: from tblexch01.transmission.bpa.gov (int.transmission.bpa.gov [206.137.58.133] (may be forged)) by mailman.enron.com (8.11.4/8.11.4/corp-1.06) with ESMTP id g0AMCB920856; Thu, 10 Jan 2002 16:12:11 -0600 (CST) Received: from TBLLIST1 ([206.137.58.134]) by tblexch01.transmission.bpa.gov with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id CRWWC3K1; Thu, 10 Jan 2002 14:11:55 -0800 Received: from LIST.TRANSMISSION.BPA.GOV by LIST.TRANSMISSION.BPA.GOV (LISTSERV-TCP/IP release 1.8c) with spool id 2458 for RRGA-L@LIST.TRANSMISSION.BPA.GOV; Thu, 10 Jan 2002 14:13:50 -0800 Received: from [207.202.136.216] (ip136.r2.d.pdx.nwlink.com [207.202.136.136]) by comet.pacifier.com (8.11.2/8.11.1) with ESMTP id g0ALxLX06696; Thu, 10 Jan 2002 13:59:21 -0800 (PST) Mime-Version: 1.0 X-Sender: lpeters@mail.pacifier.com References: <1168BAF252B7D41194810001028D743108913C@SERVER> Content-Type: multipart/mixed; boundary="============_-1201422494==_============" Message-ID: Date: Thu, 10 Jan 2002 13:59:53 -0800 Sender: RTO West Regional Representatives Group From: "Lon L. Peters" Subject: PGP Comments on RTO West Release of Dec. 14 Comments: cc: ltopaz@gcpud.org, gary.zarker@ci.seattle.wa.us, dgodard@gcpud.org, wdobbins@dcpud.org, drobinson@cowlitzpud.org, bgeddes@popud.com, "Culbertson, Tim" , kknitte@gcpud.org, paula.green@ci.seattle.wa.us, jim.harding@ci.seattle.wa.us, ghuhta@cowlitzpud.org, dosborn@gcpud.org, jscheel@popud.com, jim.todd@ci.seattle.wa.us, CWAGERS@dcpud.org, ali.rodol@ci.seattle.wa.us, kevin.clark@ci.seattle.wa.us, bessex@cowlitzpud.org, Cindy.Wright@ci.seattle.wa.us, "Juj, Hardev" , "Conger, Kurt" , "Kindley, Ray" To: RRGA-L@LIST.RTOWEST.ORG In-Reply-To: <1168BAF252B7D41194810001028D743108913C@SERVER> Return-Path: owner-rrga-l@list.rtowest.org --============_-1201422494==_============ Content-Type: text/plain; charset="us-ascii" ; format="flowed" Attached are the comments of the Public Generating Pool. -- _________________________________ Lon L. Peters Northwest Economic Research, Inc. 6765 S.W. Preslynn Drive Portland, Oregon 97225-2668 503-203-1539 (voice) 503-203-1569 (fax) 503-709-5942 (mobile) lpeters@pacifier.com NOTICE: This communication and its attachments, if any, may contain sensitive, privileged, or other confidential information. If you are not the intended recipient or believe that you have received this communication in error, please notify the sender of this communication and delete the copy you received from all storage devices. In addition, please do not print, copy, retransmit, forward, disseminate, or otherwise use this communication or its attachments, if any. Thank you. --============_-1201422494==_============ Content-Id: Content-Type: application/msword; name="PGP_Cmts_on_12-14-01_Pkg.doc" ; x-mac-type="5738424E" ; x-mac-creator="4D535744" Content-Disposition: attachment; filename="PGP_Cmts_on_12-14-01_Pkg.doc" ; modification-date="Thu, 10 Jan 2002 13:58:10 -0800" Content-Transfer-Encoding: x-uuencode --============_-1201422494==_============-- mail-2.6.4/spec/fixtures/emails/error_emails/empty_group_lists.eml000066400000000000000000000254661267453234600255250ustar00rootroot00000000000000Return-Path: Received: from murder ([unix socket]) by i.aaa.net (Cyrus v2.2.12-Invoca-RPM-2.2.12-6.fc4) with LMTPA; Thu, 03 Dec 2009 10:50:45 -0800 X-Sieve: CMU Sieve 2.2 Received: from smtp.aaa.org (unknown [10.1.1.254]) by i.aaa.net (Postfix) with ESMTP id B789577FFC for ; Thu, 3 Dec 2009 10:50:44 -0800 (PST) Received: from imr-f9b5566049f9cb01.prolexic.com (unknown [10.2.2.254]) by smtp.aaa.org (Postfix) with ESMTP id 6B026D64546 for ; Thu, 3 Dec 2009 12:08:32 -0800 (PST) Received: from web82107.mail.mud.yahoo.com (web82107.mail.mud.yahoo.com [209.191.84.220]) by imr-f9b5566049f9cb01.prolexic.com (Postfix) with SMTP id 6B5392BA0459 for ; Thu, 3 Dec 2009 10:50:23 -0800 (PST) Received: (qmail 85490 invoked by uid 60001); 3 Dec 2009 18:50:22 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sbcglobal.net; s=s1024; t=1259866222; bh=aBaCpZTcwSmyoRxhnNZNc5KV/Eb3zHvR3BG0svTu0C0=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type; b=cREZCCsrtGfOYR9ckj97DV792GZUX/4Hktzlm5+WBuxdD8Q4XpjRz7dZ1Rei9JOKH8gseoE6KqujBA7EulWGx/XPX5TlDxgO8c2Vk3ae/Qeh38bDJ8MZXRc3dU1w+IMykQyU+qfFKHjkS1sTE7qcmheL1JsTs+BAXtyyqJL+J+4= DomainKey-Signature:a=rsa-sha1; q=dns; c=nofws; s=s1024; d=sbcglobal.net; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type; b=nvmIZcXhl5ZMIwmDabz/TSUlgtHH5VdCGrTn1U6/zkGM1pZvwJgq/BMbY+5o+mwlMz78DrUT9TJwfx48JDz8j4swqWh1dlEfztr4S18hgoVt7RqeuIxGOfOEpa6jlzbgE04EQcKy9ePZsSgOv97IH1Oh8HU7MxPUj1KO9NaKsTA=; Message-ID: <203751.85280.qm@web82107.mail.mud.yahoo.com> X-YMail-OSG: M3VWGGoVM1mRrN0VVqOo_OuQD_g7jcvHWnqhUlpmVpXhEVZvd0t2zfR8Zvl5BY34dERYPAO_SdtSjPrdGHXgu8LQ7s1z74yCasGWj5jLvgVb.l8helkzU2RuUVfjxzO5AxztzNz1gt0nMG0iY4LrYoHWj1fvC6iduhm_H7LRUzBa5MezeY8soTyY1i0ugmXCgsAYu3etOBvYfwqnNmJmRBBgrgu7LB5aXqiQFTWhxKirD7cQrygLK3QPv7r4utOXt2viJDLFBgITADv.ZMOV5HL7VexNpvTIgDDxfYhDLy8F.h8nTquqIYSUUv5eMZUSbEml.QvSrtj5tjuryeWcIFTL6bHTwDBKNq_0gcEZWWbF_g6XiTjcGPVNDlVXVzni3DMOlt8_cscWGy95q_y2ArbGRrJLO5.0OQPdi6uxNIN.qXGwlijACJTlnpd1_k._CkT5_ivRiof0WAcmszBifAA8PLImnre40_vLQfGQN3cN0QfyYgv_dgVaXBhwkeuBfnthQugsAUbBcifuS7ymi37vSSTYpJ.nuHinkBsm8fVBr3FXNGZXB.YtpcxSSbvhimTtoZviodhD7zG2a1oE.X0GUT6FmsnUwVZPZkw0n_17m9.SSe8Qok8YXc9xfTKJyQAtn2yoMrS5.zMMhoQ8h26dmiXyv2N7V5SjOBYCc7ynqi7H6yPWe7FHQls_arY8vzF8xiC1THpiXJkiN4JHScNPk8aVxwY8L278d3RwSdTKa6CjDw1eIxu9XanW.eB0x3t6_VmuNcDRjhTG022kURXkA6x.UuCrKdP0eiVnSXFI0KiI9Xzhg1AMoiMPZRYDQneEPkgtMw.PJePhfVrOo.svKrGzuk5dG6PDHIqTSmd8MwlhZ56eTsDrakeo3ooVoRW_4oi9vyc7LVaJ32shn5mD5RwNyKhPHvzCAVCc3tc_AwkNqoEehTKOaxWuZc_jVuVB4bjJZsXPGeDqh FuKqBNQHUzr8v6AeX3grpz3M_0jE2qPES2GbJEItyat4WrVzA4SerkByWZHS9xNj.j_xbqdnVznbAdftUA4GFjQMZZql1KgFqrOHnhNkp6Z1QO7IQjCDaVwTATJ5h5uEFbKdmr1QPmmFNbFQub.HwmfikVgWNBn90wUKS2CsJf2IEOHSOicDzIMoC6PWzjCXGGZHZMRcSmtaIXkZ4UYELtiQQCBRgZWh7mhV6wjjbxLE0xv5.lKPSsLzql8COylkhrnoVF2jckLWroGXHsFtEQ5qD2nhDmN.ZlJJ01c1BdE2rGCKbKNfh9qvqXYA0kt9TsfO.H_sp7NWKZmFVnVrGbszkg6xXs4Bo1ITBjxzITVenK_WwO_YPXUV2cHNAXFP88bhiRvKSS31GxaT12QR4RHrWqe0ZjkgfoO.jK9ysUx3NnVSmiDzmnENJAoYbO1Sf8JDVj5yDSCyMxvL4iI7xUBHIzq.lpr6yk1IRkE5074pxlITkHejyzljPbzIUF6OWg95Edlro_QjIQHGeEE1EzNE_JrscrjDYX6mW40CCLFu7ImZVuFmwxC11sC5MIj4KUp8TYSNj2n0WVcTt4jXzSOB4eOlRxtE9dDo3wACeEXc_dzD2BjIOpfUYnIUw2xgRN7wFpd4z6EQ2g3eEv6ny7x9sd0SEh36xG0ZC0juI7Qp0Rj6_1A_YBiIY0AODUdtV1vVuWLTq82Fj0xOhH7I5c03ZYRcJoQBpuc4GDnU.wCi3n.eb1_oHaocDz0E6b6UkpGBB.2d1SXx6BOVu1DEdm6KSg3BUeDld.GzUOUKtWbzyOYdPdedcTa4gljnujUb5tCkjpgEmz_iP0GCs7SYbTcj6AIQxAliexrcdQeNxqxS7hlNOwQmsSGyjufJ7Xrq_NnTp8cWCNUhgmtb4r_gcUjOnPJoz.YpZ8asjZ.uZOgHXpmPIsZL1gozfp_rqYzkx3NYJ8S47IMD84Fa3iVco5SWXVlUx pF_rRHgvkNQtdMaVU5YZdEGr6OlG.CTrAlZa0IoZ0HgFtB_Lg_ Received: from [41.222.192.69] by web82107.mail.mud.yahoo.com via HTTP; Thu, 03 Dec 2009 10:50:22 PST X-Mailer: YahooMailClassic/8.1.6 YahooMailWebService/0.8.100.260964 Date: Thu, 3 Dec 2009 10:50:22 -0800 (PST) From: Cecil Edwards Reply-To: western.uniontransfer1@hotmail.fr Subject: Western Union Swift Money Transfer To: undisclosed recipients: ; MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="0-2052022825-1259866222=:85280" X-CSI-MailScanner-Information: Please contact the ISP for more information X-CSI-MailScanner: Found to be clean X-CSI-MailScanner-SpamCheck: spam, ORDB-RBL X-CSI-MailScanner-From: ceciledwards@sbcglobal.net X-Spam-Status: Yes --0-2052022825-1259866222=:85280 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Attention Beneficiary: =A0 This is to officially informed you that we have concluded arrangements to e= ffect your payment of $1,500,000.00 United States Dollars through WESTERN U= NION Swift Money transfer services today, but the maximum amount you will b= e receiving every day starting from tomorrow is $5,000.00 as reflected in o= ur transfer system daily until the funds is completely transferred. =A0 This special arrangement is being used to avoid all scrupulous demands by b= oth the states and federal authorities that have previously delayed your pa= yment till date; we shall need your maximum co-operation to ensure that str= ictness and confidence is maintained to avoid any further delays.You are to= discard any request asking you to send money to any agency such as courier= company,Bank and Security Agency as there are no such and any money commit= ted their will be regret, so be wise.=20 =A0 Please contact the Accredited WESTERN UNION Agent for the details of your f= irst payment of $5,000 United States Dollars and reconfirm your correct det= ails that you will like the first transfer to be program with such as Recei= vers Name, destination where you will like the transfer to be send to and y= our cell phone number for urgent communication if the need arise. Fill your details below for reference purposes: *NAME OF CUSTOMER: ......... *ADDRESS: .......... *COUNTRY: ................. *TEL: ..................... *OCCUPATION: .............. =A0 Remember your obligation to secure an International Remittance Form as stat= ed in United Nation act of (FRT209) that will help build and renew your tra= nsfer file for record keeping as a way of checkmating the present Economics= crisis situations. Contact the below Electronic Transfer unit of WESTERN UNION for immediate p= rograming of your first transfer: =A0 Name: Rev.John Ntepe Mobile:+229 97292685 Email: (western.union1891@live.fr) or (westerrnunion_2@sify.com) =A0 Regards. Thanks and God Bless. Mrs.Cecil Edward --=20 Filter4: This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. --0-2052022825-1259866222=:85280 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable
    Attention = Beneficiary:
     
    This is to officially informed you that we have concluded= arrangements to effect your payment of $1,500,000.00 United States Dollars= through WESTERN UNION Swift Money transfer services today, but the maximum= amount you will be receiving every day starting from tomorrow is $5,000.00= as reflected in our transfer system daily until the funds is completely tr= ansferred.
     
    This special arrangement is being used to avoid all scrupul= ous demands by both the states and federal authorities that have previously= delayed your payment till date; we shall need your maximum co-operation to ensure that strictne= ss and confidence is maintained to avoid any further delays.You are to disc= ard any request asking you to send money to any agency such as courier comp= any,Bank and Security Agency as there are no such and any money committed t= heir will be regret, so be wise.
     
    Please contact the Accredited WESTER= N UNION Agent for the details of your first payment of $5,000 United States= Dollars and reconfirm your correct details that you will like the first tr= ansfer to be program with such as Receivers Name, destination where you wil= l like the transfer to be send to and your cell phone number for urgent com= munication if the need arise.
    Fill your details below for reference purposes:
    *NAME OF CUSTOMER: .........
    *ADDRESS: ..........
    *COUNTRY: ......= ............
    *TEL: .....................
    *OCCUPATION: .............. 
    Reme= mber your obligation to secure an International Remittance Form as stated i= n United Nation act of (FRT209) that will help build and renew your transfe= r file for record keeping as a way of checkmating the present Economics cri= sis situations.
    Contact the below Electronic Transfer unit of WESTERN UNION for immediate programing o= f your first transfer:
     
    Name: Rev.John Ntepe

    Mobile:+229 97292685
    Email= : (western.union1891@live.fr) or (westerrnunion_2@sify.com)

     
    Regards.
    Thanks and God Bless.

    Mrs.Cecil Edward


    --=20
    This message has been scanned for viruses and
    dangerous content by MailScanner, and is
    believed to be clean. --0-2052022825-1259866222=:85280-- mail-2.6.4/spec/fixtures/emails/error_emails/empty_in_reply_to.eml000066400000000000000000000044361267453234600254700ustar00rootroot00000000000000Return-path: Envelope-to: abuser@r.ru Delivery-date: Sat, 19 Sep 2009 21:41:40 +0400 Received: from mail-fx0-f215.google.com ([209.85.220.215]:39047) by mail.rg.com with esmtp id 1Mp3wA-0007kA-Ic for ; Sat, 19 Sep 2009 21:41:30 +0400 Received: by fxm11 with SMTP id 11so1412272fxm.15 for ; Sat, 19 Sep 2009 10:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date :message-id:mime-version:content-type:x-priority:x-msmail-priority :x-mailer:importance:x-mimeole:in-reply-to; bh=U4LmZ2XrYxpE2gzziKYLSJXvmTsl0JSdrp4OYcIw2xw=; b=N4ZFNsnhqgG0qILwgjv0Sh0qKgSR+A5hMn60yxtSlACUDq/xQ/52pJkCuMChX0Pzxo HaRYdiAsxyzlzmSStwtM/fAHZSNrXD0pLpeQOCi1r8ZSyQ6mKb4WgO56FFNOjCA0rLl8 NOelymNmCIYTwuYz5Dd0PthnWL0YZPU+YUEHU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:message-id:mime-version:content-type :x-priority:x-msmail-priority:x-mailer:importance:x-mimeole :in-reply-to; b=ZTs05s6OpCmZp0GWYqGIv8xGM+AmM7+QL6SdaR45KgwCcN8sJH0SB4PI4QMFSW3+ZX IdYVUGjqer/bEz7POPS8FOTCZW1QTkRcTHqVEFezAmotlc0VfLVSnnW9oRpzJ/UFQUWM +Wn0vcObiGmrUPUJWWiNgBvuRnrJHk+nICCQI= Received: by 10.86.240.9 with SMTP id n9mr2799028fgh.70.1253375382709; Sat, 19 Sep 2009 08:49:42 -0700 (PDT) Return-Path: Received: from articondell (ppp85-140-104-88.pppoe.mtu-net.ru [85.140.104.88]) by mx.google.com with ESMTPS id e11sm2485072fga.21.2009.09.19.08.49.39 (version=SSLv3 cipher=RC4-MD5); Sat, 19 Sep 2009 08:49:40 -0700 (PDT) From: "Andrey Kuznetsov" To: Subject: illegal copy of our patient education software Date: Sat, 19 Sep 2009 19:49:36 +0400 Message-ID: MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_000A_01CA3962.51E52370" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.4024 Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 In-Reply-To: Recivied-SPF: (invalid) RSpam-Score: 40 List-Id: abuser@rg.com Mailing List Reply-To: ak@g.com mail-2.6.4/spec/fixtures/emails/error_emails/encoding_madness.eml000066400000000000000000000033511267453234600252220ustar00rootroot00000000000000Delivered-To: e-f5f4@app.ar-example.com Received: by 10.2.1.1 with SMTP id p21cs62610wem; Wed, 22 Sep 2010 00:30:55 -0700 (PDT) Received: by 10.15.2.1 with SMTP id p24mr499372ybh.380.1285140655013; Wed, 22 Sep 2010 00:30:55 -0700 (PDT) Return-Path: Received: from aquila.el-example.org ([174.1.8.2]) by mx.google.com with ESMTP id a6si11272839ybo.18.2010.09.22.00.30.54; Wed, 22 Sep 2010 00:30:54 -0700 (PDT) Received-SPF: neutral (google.com: 174.1.8.2 is neither permitted nor denied by best guess record for domain of production@aquila.el-example.org) client-ip=174.1.8.2; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.1.8.2 is neither permitted nor denied by best guess record for domain of production@aquila.el-example.org) smtp.mail=production@aquila.el-example.org Received: from aquila.el-example.org (localhost [127.0.0.1]) by aquila.el-example.org (8.14.2/8.14.2) with ESMTP id o8M7UrfD018673 for ; Wed, 22 Sep 2010 02:30:54 -0500 (CDT) (envelope-from production@aquila.el-example.org) Received: (from production@localhost) by aquila.el-example.org (8.14.2/8.14.2/Submit) id o8M7Urh3018672; Wed, 22 Sep 2010 02:30:53 -0500 (CDT) (envelope-from production) Message-Id: <201009220730.o8M7Urh3018672@aquila.el-example.org> MIME-Version: 1.0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-Mailer: MIME::Lite 3.027 (F2.74; T1.28; A2.04; B3.07; Q3.07) Date: Wed, 22 Sep 2010 02:30:53 -0500 From: no-reply@crm.el-example.org To: e-f5f4@app.ar-example.com Reply-To: "KLAUS- HÄNSCHEL" <> Subject: eBay Bid - 2008 Ford Super Duty F-350 DRW King Ranch Crew Cab 4x4 (156) - Stock# XXXX Body Textmail-2.6.4/spec/fixtures/emails/error_emails/header_fields_with_empty_values.eml000066400000000000000000000025301267453234600303260ustar00rootroot00000000000000Received: from mx01.medieveven.no (192.168.42.42) by epost.vartland.no (192.168.73.7) with Microsoft SMTP Server id 8.1.393.1; Fri, 30 Oct 2009 20:08:07 +0100 Received: from woodward.joyent.us ([8.12.42.230]) by mx01.medieveven.no with ESMTP; 30 Oct 2009 20:11:23 +0100 Received: from [10.0.0.5] (ti0083a340-0282.bb.online.no [88.89.59.28]) by woodward.joyent.us (Postfix) with ESMTPSA id EC35240C85 for ; Fri, 30 Oct 2009 19:07:44 +0000 (GMT) From: =?iso-8859-1?Q?J=F8rn_St=F8ylen?= To: AF Test Date: Fri, 30 Oct 2009 20:07:42 +0100 Subject: Testmail Thread-Topic: Testmail Thread-Index: AcpZlFLF/Y9EfcC0QZKKEuUFm2Snqw== Message-ID: <4FDC124A-1FC4-4B29-8502-E459BD9AB397@prikkprikkprikk.no> Accept-Language: nb-NO X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Exchange-Organization-AuthSource: epost.vartland.no X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ironport-anti-spam-filtered: true x-ironport-av: E=Sophos;i="4.44,655,1249250400"; d="scan'208";a="2439461" x-ironport-anti-spam-result: AvMBAPfV6koIDCrmhWdsb2JhbACbVgEBAQoLChoDxH2EPQQ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 -- J=F8rn St=F8ylen -- http://www.prikkprikkprikk.no 924 38 051 -- jorn@prikkprikkprikk.no mail-2.6.4/spec/fixtures/emails/error_emails/missing_body.eml000066400000000000000000000007431267453234600244120ustar00rootroot00000000000000Message-ID: <001301c17797$9cd0ef30$a3ab620c@vaio> From: "SCS_2" To: Subject: REDACTED Date: Tue, 27 Nov 2001 15:02:35 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_000F_01C17754.8C3CAF30" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2919.6700 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700 Return-Path: redacted@attglobal.net mail-2.6.4/spec/fixtures/emails/error_emails/missing_content_disposition.eml000066400000000000000000000043671267453234600275610ustar00rootroot00000000000000Message-Id: <200201221435.g0MEZP927213@mailman.enron.com> Content-Type: multipart/related; boundary="_----------=_10117101281980" MIME-Version: 1.0 Date: Tue, 22 Jan 2002 14:35:28 UT Subject: Redacted To: redacted@example.com From: redacted@example.com Return-Path: redacted@example.com --_----------=_10117101281980 Content-Location: somefile.jpg Content-Transfer-Encoding: base64 Content-Type: image/jpg Content-Disposition: Date: Tue, 22 Jan 2002 14:35:28 UT X-Mailer: MIME-Version: ICAKIApUaGFuayB5b3UgZm9yIHVzaW5nIG91ciBhdXRvbWF0ZWQgc2VsZiBzZXJ2aWNlIHBhc3N3 b3JkIHJlc2V0IG9wdGlvbi4gICAgCiAKVGhlIHVzZXIgaWQgYW5kIHBhc3N3b3JkIGluIFNBUCAo QXBvbGxvIFByb2R1Y3Rpb24gYW5kIEhSIFByb2R1Y3Rpb24pLCBlSFJvbmxpbmUsIGlCdXlpdCBh bmQgaVBheWl0IGFyZSBhbGwgc3luY2hyb25pemVkLiAgV2hlbiB5b3UgcmVzZXQgeW91ciBwYXNz d29yZCBpbiBlSFJvbmxpbmUsIGl0IGF1dG9tYXRpY2FsbHkgc3luY2hyb25pemVzIHRoZSBwYXNz d29yZCBpbiB0aGUgb3RoZXIgc3lzdGVtcy4gIAogClBsZWFzZSBmb2xsb3cgdGhlIHN0ZXBzIHRv IHJlc2V0IGFuZCBzeW5jaHJvbml6ZSB5b3VyIHBhc3N3b3Jkcy4KIAoxLiAgICAgICAgR28gdG8g ZWhyb25saW5lLmVucm9uLmNvbQoyLiAgICAgICBDbGljayBvbiB0aGUgICBidXR0b24KMy4gICAg ICAgRW50ZXIgeW91ciBVc2VyIElkIChTQVAgUGVyc29ubmVsIE51bWJlcikgYW5kIHRlbXBvcmFy eSBwYXNzd29yZCAobG9jYXRlZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZW1haWwpCjQuICAgICAg IFlvdSB3aWxsIHRoZW4gYmUgYXNrZWQgdG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQKNS4gICAgICAg RW50ZXIgeW91ciBuZXcgcGFzc3dvcmQgdHdpY2UKNi4gICAgICAgT25jZSB5b3UgaGF2ZSBzdWNj ZXNzZnVsbHkgY2hhbmdlZCB5b3VyIHBhc3N3b3JkIGluIGVIUm9ubGluZSwgeW91IGhhdmUgc3lu Y2hyb25pemVkIHlvdXIgcGFzc3dvcmQgZm9yIFNBUCAoQXBvbGxvIFByb2R1Y3Rpb24gYW5kIEhS IFByb2R1Y3Rpb24pLCBlSFJvbmxpbmUsIGlCdXlpdCBhbmQgaVBheWl0CjcuICAgICAgIElmIHlv dSB3ZXJlIHRyeWluZyB0byBhY2Nlc3MgYW4gYXBwbGljYXRpb24gb3RoZXIgdGhhbiBlSFJvbmxp bmUsIGNsb3NlIGVIUm9ubGluZSBhbmQgcHJvY2VlZCB0byB0aGUgZGVzaXJlZCBhcHBsaWNhdGlv bi4gIFlvdSB3aWxsIG5vdyBiZSBhYmxlIHRvIGxvZyBpbiB3aXRoIHlvdXIgTkVXIHBhc3N3b3Jk LgogCiBUSElTIElTIEEgR0VORVJBVEVEIEVNQUlMIC0gRE8gTk9UIFJFUExZIQogCklGIFlPVSBO RUVEIEZVUlRIRVIgQVNTSVNUQU5DRSwgQ09OVEFDVCBUSEUgSVNDIEhFTFAgREVTSyBBVDogIDcx My0zNDUtNDcyNwogClRoZSBwYXNzd29yZCBmb3IgeW91ciBhY2NvdW50OiBQMDA1MDA1NTMgICBo YXMgYmVlbiByZXNldCB0bzogMTIyODIyNjYgIAogCkdvIHRvIGVIUm9ubGluZSBub3c6IGh0dHA6 Ly9laHJvbmxpbmUuZW5yb24uY29tIDxodHRwczovL2Vocm9ubGluZS5lbnJvbi5jb20vPiAgIAoK --_----------=_10117101281980-- mail-2.6.4/spec/fixtures/emails/error_emails/multiple_content_types.eml000066400000000000000000000010611267453234600265270ustar00rootroot00000000000000From: Subject: Redacted To: Message-ID: <105647271315.NCV17523@x263.net> MIME-version: 1.0 Content-Type: multipart/alternative; boundary="----_001_5973_47T00ZN9.15SY2428" Content-type: text/plain This is a multi-part message in MIME format. ------_001_5973_47T00ZN9.15SY2428 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7Bit foo ------_001_5973_47T00ZN9.15SY2428 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 7Bit

    foo

    ------_001_5973_47T00ZN9.15SY2428-- mail-2.6.4/spec/fixtures/emails/error_emails/must_supply_encoding.eml000066400000000000000000000013631267453234600261750ustar00rootroot00000000000000X-YMAIL-UMID: 1_132725_AEe3iGIAAGS4TOAfWQ3foSiBC54 X-Apparently-To: anyone@yahoo.com via 98.136.183.71; Sun, 14 Nov 2010 09:41:45 -0800 Message-Id: <201011141741.oAEHfiKs020181@app9.msg2u.net> MIME-Version: 1.0 Content-Transfer-Encoding: binary Content-Type: multipart/alternative; boundary="_----------=_128975650412616235" X-Mailer: MIME::Lite 3.020 (F2.73; T1.21; A1.77; B3.01; Q3.01) Date: Sun, 14 Nov 2010 17:41:44 +0000 From: Biz Phone Systems from EclipseMediaOnline�� To: anyone@YAHOO.COM Subject: Impress your clients with a business phone��� Reply-To: Biz Phone Systems from EclipseMediaOnline�� <44.41.17.14.11.2010.1139.1.328.1477949.614@reply.here2there-travelers-msgs.net> mail-2.6.4/spec/fixtures/emails/error_emails/new_line_in_to_header.eml000066400000000000000000000027101267453234600262200ustar00rootroot00000000000000Delivered-To: e-s-a-g-8718@app.ar.com Received: by 10.2.1.1 with SMTP id c60cs12954wel; Wed, 13 Oct 2010 07:44:39 -0700 (PDT) Received: by 10.15.1.1 with SMTP id f12mr1139775ybe.360.1286981078364; Wed, 13 Oct 2010 07:44:38 -0700 (PDT) Return-Path: Received: from services.travidiabamboo.com (services.travidiabamboo.com [72.21.1.1]) by mx.google.com with ESMTP id v33si16714378yba.88.2010.10.13.07.44.37; Wed, 13 Oct 2010 07:44:38 -0700 (PDT) Received-SPF: pass (google.com: domain of l@gcn-example.com designates 72.21.1.1 as permitted sender) client-ip=72.21.1.1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of l@gcn-example.com designates 72.21.1.1 as permitted sender) smtp.mail=l@gcn-example.com Received: from travidiabamboo.com (services [10.0.0.2]) by services.travidiabamboo.com (Postfix) with ESMTP id A532170702; Wed, 13 Oct 2010 07:53:04 -0700 (PDT) Date: Wed, 13 Oct 2010 07:53:04 -0700 From: l@gcn-example.com To: leads@sg.dc.com, sag@leads.gs.ry.com, sn@example-hotmail.com, e-s-a-g-8718@app.ar.com, jp@t-exmaple.com, cc@c-l-example.com Message-Id: <4cb5c7d0a3cce_120e..fdbed2b861958562@s.t-example.com.tmail> Subject: [Online Lead] Online Lead #1111111 Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 2010-10-13T07:53:04-09:00 ... (not important) ...mail-2.6.4/spec/fixtures/emails/error_emails/trademark_character_in_subject.eml000066400000000000000000000035351267453234600301210ustar00rootroot00000000000000Delivered-To: e-r-w-a-4462@app.ar.com Received: by 10.1.1.1 with SMTP id w10cs10896muo; Tue, 12 Oct 2010 13:20:24 -0700 (PDT) Received: by 10.2.1.5 with SMTP id bk15mr6105827qab.89.1286914824124; Tue, 12 Oct 2010 13:20:24 -0700 (PDT) Return-Path: Received: from mail.ga-example.com (mail.ga-example.com [64.1.2.3]) by mx.google.com with ESMTP id 13si112341247qcd.23.2010.10.12.13.20.23; Tue, 12 Oct 2010 13:20:24 -0700 (PDT) Received-SPF: neutral (google.com: 64.1.2.3 is neither permitted nor denied by best guess record for domain of j@yahoo-example.com) client-ip=64.1.2.3; Authentication-Results: mx.google.com; spf=neutral (google.com: 64.1.2.3 is neither permitted nor denied by best guess record for domain of j@yahoo-example.com) smtp.mail=j@yahoo-example.com X-MDAV-Processed: mail.ga-example.com, Tue, 12 Oct 2010 16:21:07 -0400 X-Spam-Processed: mail.ga-example.com, Tue, 12 Oct 2010 16:21:06 -0400 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on MAIL02.VD-example.com X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DATE_IN_PAST_03_06, FORGED_YAHOO_RCVD,INVALID_DATE,NO_RELAYS,SUBJECT_NEEDS_ENCODING shortcircuit=no autolearn=no version=3.2.5 Received: from GAWWW03 by ga-example.com (MDaemon PRO v11.0.3) with ESMTP id md50004804310.msg for ; Tue, 12 Oct 2010 16:21:05 -0400 X-MDRemoteIP: 192.168.254.73 X-Return-Path: j@yahoo-example.com X-Envelope-From: j@yahoo-example.com X-MDaemon-Deliver-To: e-r-w-a-4462@app.ar.com Date: Tue, 12 Oct 2010 16:21:05 H0500 Subject: GA.comô has a lead for you To: c@ra-example.com,e-r-w-a-4462@app.ar.com,leads@ga-example.com MIME-Version: 1.0 Content-type: text/plain; charset=iso-8859-1 From: j@yahoo-example.com Message-ID: Body Text - not importantmail-2.6.4/spec/fixtures/emails/error_emails/weird_to_header.eml000066400000000000000000000020731267453234600250460ustar00rootroot00000000000000Delivered-To: e-s-a-s-2200@app.ar.com Received: by 10.103.1.1 with SMTP id w10cs50835muo; Thu, 14 Oct 2010 20:25:16 -0700 (PDT) Received: by 10.150.205.4 with SMTP id c4mr736200ybg.26.1287113115711; Thu, 14 Oct 2010 20:25:15 -0700 (PDT) Return-Path: Received: from i.tp.host ([172.1.1.1]) by mx.google.com with ESMTP id s21si2123456.90.2010.10.14.20.25.15; Thu, 14 Oct 2010 20:25:15 -0700 (PDT) Received-SPF: neutral (google.com: 172.1.1.1 is neither permitted nor denied by best guess record for domain of anonymous@i.tp.host) client-ip=172.1.1.1; Authentication-Results: mx.google.com; spf=neutral (google.com: 172.1.1.1 is neither permitted nor denied by best guess record for domain of anonymous@i.tp.host) smtp.mail=anonymous@i.tp.host Received: (qmail 28454 invoked by uid 48); 14 Oct 2010 23:25:06 -0400 Date: 14 Oct 2010 23:25:06 -0400 Message-ID: <20101015032506.28448.qmail@i.tp.host> From: anonymous@i.tp.host To: , user-example@aol.com, e-s-a-s-2200@app.ar.com Subject: CONTACT: COMMENT: PAGE THEY WERE ON: mail-2.6.4/spec/fixtures/emails/mime_emails/000077500000000000000000000000001267453234600210175ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/mime_emails/email_with_similar_boundaries.eml000066400000000000000000000026101267453234600275720ustar00rootroot00000000000000Received: from xxxx.xxxxxxx.xxx (127.0.0.1) by xxxx.xxxxxxxx.xxx (127.0.01) with Microsoft SMTP Server id 11.1.111.1; Thu, 5 Apr 2012 01:01:01 -0700 Message-ID: To: Subject: Xxxxxx Date: Fri, 6 Apr 2012 01:01:01 +0000 From: Xxxxx X-Mailer: PHP/5.2.6 Content-Type: multipart/mixed; boundary="----=_NextPart_476c4fde88e507bb8028170e8cf47c73" MIME-Version: 1.0 ------=_NextPart_476c4fde88e507bb8028170e8cf47c73 Content-Type: multipart/alternative; boundary="----=_NextPart_476c4fde88e507bb8028170e8cf47c73_alt" ------=_NextPart_476c4fde88e507bb8028170e8cf47c73_alt Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Test ------=_NextPart_476c4fde88e507bb8028170e8cf47c73_alt Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit Test

    Test

    ------=_NextPart_476c4fde88e507bb8028170e8cf47c73_alt-- ------=_NextPart_476c4fde88e507bb8028170e8cf47c73 Content-Type: application/octetstream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="LOGO.png" Content-ID: SNIP ------=_NextPart_476c4fde88e507bb8028170e8cf47c73-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email11.eml000066400000000000000000000012511267453234600236170ustar00rootroot00000000000000From xxx@xxxx.com Wed Apr 27 14:15:31 2005 Mime-Version: 1.0 (Apple Message framework v619.2) To: "xxxxx@xxxxx" Message-Id: <416eaebec6d333ec6939eaf8a7d80724@xxxxx> Content-Type: multipart/alternative; boundary=Apple-Mail-5-1037861608 From: "xxxxx@xxxxx" Subject: worse when you use them. Date: Wed, 27 Apr 2005 14:15:31 -0700 --Apple-Mail-5-1037861608 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed XXXXX Xxxxx --Apple-Mail-5-1037861608 Content-Transfer-Encoding: 7bit Content-Type: text/enriched; charset=US-ASCII XXXXX Xxxxx --Apple-Mail-5-1037861608-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email12.eml000066400000000000000000000016701267453234600236250ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-13-196941151 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: Photo25.jpg Content-ID: Content-Disposition: inline jamisSqGSIb3DQEHAqCAMIjamisxCzAJBgUrDgMCGgUAMIAGCSqGSjamisEHAQAAoIIFSjCCBUYw ggQujamisQICBD++ukQwDQYJKojamisNAQEFBQAwMTELMAkGA1UEBhMCRjamisAKBgNVBAoTA1RE QzEUMBIGjamisxMLVERDIE9DRVMgQ0jamisNMDQwMjI5MTE1OTAxWhcNMDYwMjamisIyOTAxWjCB gDELMAkGA1UEjamisEsxKTAnBgNVBAoTIEjamisuIG9yZ2FuaXNhdG9yaXNrIHRpbjamisRuaW5= --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email2.eml000066400000000000000000000144041267453234600235430ustar00rootroot00000000000000From xxxxxxxxx.xxxxxxx@gmail.com Sun May 8 19:07:09 2005 Return-Path: X-Original-To: xxxxx@xxxxx.xxxxxxxxx.com Delivered-To: xxxxx@xxxxx.xxxxxxxxx.com Received: from localhost (localhost [127.0.0.1]) by xxxxx.xxxxxxxxx.com (Postfix) with ESMTP id 06C9DA98D for ; Sun, 8 May 2005 19:09:13 +0000 (GMT) Received: from xxxxx.xxxxxxxxx.com ([127.0.0.1]) by localhost (xxxxx.xxxxxxxxx.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 88783-08 for ; Sun, 8 May 2005 19:09:12 +0000 (GMT) Received: from xxxxxxx.xxxxxxxxx.com (xxxxxxx.xxxxxxxxx.com [69.36.39.150]) by xxxxx.xxxxxxxxx.com (Postfix) with ESMTP id 10D8BA960 for ; Sun, 8 May 2005 19:09:12 +0000 (GMT) Received: from zproxy.gmail.com (zproxy.gmail.com [64.233.162.199]) by xxxxxxx.xxxxxxxxx.com (Postfix) with ESMTP id 9EBC4148EAB for ; Sun, 8 May 2005 14:09:11 -0500 (CDT) Received: by zproxy.gmail.com with SMTP id 13so1233405nzp for ; Sun, 08 May 2005 12:09:11 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:references; b=cid1mzGEFa3gtRa06oSrrEYfKca2CTKu9sLMkWxjbvCsWMtp9RGEILjUz0L5RySdH5iO661LyNUoHRFQIa57bylAbXM3g2DTEIIKmuASDG3x3rIQ4sHAKpNxP7Pul+mgTaOKBv+spcH7af++QEJ36gHFXD2O/kx9RePs3JNf/K8= Received: by 10.36.10.16 with SMTP id 16mr1012493nzj; Sun, 08 May 2005 12:09:11 -0700 (PDT) Received: by 10.36.5.10 with HTTP; Sun, 8 May 2005 12:09:11 -0700 (PDT) Message-ID: Date: Sun, 8 May 2005 14:09:11 -0500 From: xxxxxxxxx xxxxxxx Reply-To: xxxxxxxxx xxxxxxx To: xxxxx xxxx Subject: Fwd: Signed email causes file attachments In-Reply-To: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5028_7368284.1115579351471" References: ------=_Part_5028_7368284.1115579351471 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline We should not include these files or vcards as attachments. ---------- Forwarded message ---------- From: xxxxx xxxxxx Date: May 8, 2005 1:17 PM Subject: Signed email causes file attachments To: xxxxxxx@xxxxxxxxxx.com Hi, Just started to use my xxxxxxxx account (to set-up a GTD system, natch) and noticed that when I send content via email the signature/ certificate from my email account gets added as a file (e.g. "smime.p7s"). Obviously I can uncheck the signature option in the Mail compose window but how often will I remember to do that? Is there any way these kind of files could be ignored, e.g. via some sort of exclusions list? ------=_Part_5028_7368284.1115579351471 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGFDCCAs0w ggI2oAMCAQICAw5c+TANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0EwHhcNMDUwMzI5MDkzOTEwWhcNMDYwMzI5MDkzOTEwWjBCMR8wHQYDVQQD ExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMR8wHQYJKoZIhvcNAQkBFhBzbWhhdW5jaEBtYWMuY29t MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn90dPsYS3LjfMY211OSYrDQLzwNYPlAL 7+/0XA+kdy8/rRnyEHFGwhNCDmg0B6pxC7z3xxJD/8GfCd+IYUUNUQV5m9MkxfP9pTVXZVIYLaBw o8xS3A0a1LXealcmlEbJibmKkEaoXci3MhryLgpaa+Kk/sH02SNatDO1vS28bPsibZpcc6deFrla hSYnL+PW54mDTGHIcCN2fbx/Y6qspzqmtKaXrv75NBtuy9cB6KzU4j2xXbTkAwz3pRSghJJaAwdp +yIivAD3vr0kJE3p+Ez34HMh33EXEpFoWcN+MCEQZD9WnmFViMrvfvMXLGVFQfAAcC060eGFSRJ1 ZQ9UVQIDAQABoy0wKzAbBgNVHREEFDASgRBzbWhhdW5jaEBtYWMuY29tMAwGA1UdEwEB/wQCMAAw DQYJKoZIhvcNAQEEBQADgYEAQMrg1n2pXVWteP7BBj+Pk3UfYtbuHb42uHcLJjfjnRlH7AxnSwrd L3HED205w3Cq8T7tzVxIjRRLO/ljq0GedSCFBky7eYo1PrXhztGHCTSBhsiWdiyLWxKlOxGAwJc/ lMMnwqLOdrQcoF/YgbjeaUFOQbUh94w9VDNpWZYCZwcwggM/MIICqKADAgECAgENMA0GCSqGSIb3 DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlD YXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0 aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwg Q0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMwNzE3 MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENv bnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElz c3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUEcJ3f 6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/EfkTYk KhPPK9Xzgnc9A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMBAAGj gZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnRo YXd0ZS5jb20vVGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYDVR0R BCIwIKQeMBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GBAEiM 0VCD6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+hLGZ GwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC3CEZ Nd4ksdMdRv9dX2VPMYIC5zCCAuMCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3Rl IENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWls IElzc3VpbmcgQ0ECAw5c+TAJBgUrDgMCGgUAoIIBUzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB MBwGCSqGSIb3DQEJBTEPFw0wNTA1MDgxODE3NDZaMCMGCSqGSIb3DQEJBDEWBBQSkG9j6+hB0pKp fV9tCi/iP59sNTB4BgkrBgEEAYI3EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3 dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1h aWwgSXNzdWluZyBDQQIDDlz5MHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYDVQQGEwJaQTElMCMG A1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNv bmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAw5c+TANBgkqhkiG9w0BAQEFAASCAQAm1GeF7dWfMvrW 8yMPjkhE+R8D1DsiCoWSCp+5gAQm7lcK7V3KrZh5howfpI3TmCZUbbaMxOH+7aKRKpFemxoBY5Q8 rnCkbpg/++/+MI01T69hF/rgMmrGcrv2fIYy8EaARLG0xUVFSZHSP+NQSYz0TTmh4cAESHMzY3JA nHOoUkuPyl8RXrimY1zn0lceMXlweZRouiPGuPNl1hQKw8P+GhOC5oLlM71UtStnrlk3P9gqX5v7 Tj7Hx057oVfY8FMevjxGwU3EK5TczHezHbWWgTyum9l2ZQbUQsDJxSniD3BM46C1VcbDLPaotAZ0 fTYLZizQfm5hcWEbfYVzkSzLAAAAAAAA ------=_Part_5028_7368284.1115579351471-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email4.eml000066400000000000000000000036511267453234600235470ustar00rootroot00000000000000Return-Path: Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500 Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id j48HUC213279 for ; Sun, 8 May 2005 12:30:13 -0500 Received: from conversion-xxx.xxxx.xxx.net by xxx.xxxx.xxx id <0IG600901LQ64I@xxx.xxxx.xxx> for ; Sun, 8 May 2005 12:30:12 -0500 Received: from agw1 by xxx.xxxx.xxx with ESMTP id <0IG600JFYLYCAxxx@xxxx.xxx> for ; Sun, 8 May 2005 12:30:12 -0500 Date: Sun, 8 May 2005 12:30:08 -0500 From: xxx@xxxx.xxx To: xxx@xxxx.xxx Message-Id: <7864245.1115573412626.JavaMxxx@xxxx.xxx> Subject: Filth Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=mimepart_427e4cb4ca329_133ae40413c81ef X-Mms-Priority: 1 X-Mms-Transaction-Id: 3198421808-0 X-Mms-Message-Type: 0 X-Mms-Sender-Visibility: 1 X-Mms-Read-Reply: 1 X-Original-To: xxx@xxxx.xxx X-Mms-Message-Class: 0 X-Mms-Delivery-Report: 0 X-Mms-Mms-Version: 16 Delivered-To: xxx@xxxx.xxx X-Nokia-Ag-Version: 2.0 This is a multi-part message in MIME format. --mimepart_427e4cb4ca329_133ae40413c81ef Content-Type: multipart/mixed; boundary=mimepart_427e4cb4cbd97_133ae40413c8217 --mimepart_427e4cb4cbd97_133ae40413c8217 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-Location: text.txt Some text --mimepart_427e4cb4cbd97_133ae40413c8217-- --mimepart_427e4cb4ca329_133ae40413c81ef Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit -- This Orange Multi Media Message was sent wirefree from an Orange MMS phone. If you would like to reply, please text or phone the sender directly by using the phone number listed in the sender's address. To learn more about Orange's Multi Media Messaging Service, find us on the Web at xxx.xxxx.xxx.uk/mms --mimepart_427e4cb4ca329_133ae40413c81ef --mimepart_427e4cb4ca329_133ae40413c81ef- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email7.eml000066400000000000000000000031001267453234600235370ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151 Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com --Apple-Mail-13-196941151 Content-Type: multipart/mixed; boundary=Apple-Mail-12-196940926 --Apple-Mail-12-196940926 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed This is the first part. --Apple-Mail-12-196940926 Content-Transfer-Encoding: 7bit Content-Type: text/x-ruby-script; x-unix-mode=0666; name="test.rb" Content-Disposition: attachment; filename=test.rb puts "testing, testing" --Apple-Mail-12-196940926 Content-Transfer-Encoding: base64 Content-Type: application/pdf; x-unix-mode=0666; name="test.pdf" Content-Disposition: inline; filename=test.pdf YmxhaCBibGFoIGJsYWg= --Apple-Mail-12-196940926 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed --Apple-Mail-12-196940926-- --Apple-Mail-13-196941151 Content-Transfer-Encoding: base64 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Disposition: attachment; filename=smime.p7s jamisSqGSIb3DQEHAqCAMIjamisxCzAJBgUrDgMCGgUAMIAGCSqGSjamisEHAQAAoIIFSjCCBUYw ggQujamisQICBD++ukQwDQYJKojamisNAQEFBQAwMTELMAkGA1UEBhMCRjamisAKBgNVBAoTA1RE QzEUMBIGjamisxMLVERDIE9DRVMgQ0jamisNMDQwMjI5MTE1OTAxWhcNMDYwMjamisIyOTAxWjCB gDELMAkGA1UEjamisEsxKTAnBgNVBAoTIEjamisuIG9yZ2FuaXNhdG9yaXNrIHRpbjamisRuaW5= --Apple-Mail-13-196941151-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_encoded_stack_level_too_deep.eml000066400000000000000000000032631267453234600313750ustar00rootroot00000000000000X-Gmail-Received: 220984aec4c4885e060987be043c9363cbef8551 Received: by 10.36.47.16; Tue, 28 Jun 2005 01:02:11 -0700 (PDT) Message-ID: <89d7557c0506280102495d555f@mail.gmail.com> Date: Tue, 28 Jun 2005 01:02:11 -0700 From: Gmail Team Reply-To: x.y@gmail.com To: =?ISO-8859-1?Q?Nicolas_Fouch=E9?= Subject: =?ISO-8859-1?Q?Nicolas_Fouch=E9_has_accepted_your_invitation_to_Gmail?= Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_976_15222032.1119945731186" ------=_Part_976_15222032.1119945731186 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Nicolas Fouch=E9 has accepted your invitation to Gmail and has chosen the= =20 brand new address x.y@gmail.com. Be one of the first to email Nicolas= =20 at this new Gmail address--just hit reply and send Nicolas a message.=20 x.y@gmail.com has also been automatically added to your contact list= =20 so you can stay in touch with Gmail.=20 Thanks,=20 The Gmail Team ------=_Part_976_15222032.1119945731186 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline

    Nicolas Fouch=E9 has accepted your invitation to Gmail and has chosen the brand new address x.y@gmail.com. Be one of the first to = email=20 Nicolas at this new Gmail address--just hit reply and send=20 Nicolas a message. x.y@gmail.com has also been automatically added = to your contact list so you can stay in touch with Gmail.


    Thanks,

    The Gmail Team

    ------=_Part_976_15222032.1119945731186--mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_with_illegal_boundary.eml000066400000000000000000000043561267453234600301150ustar00rootroot00000000000000From email_test@me.nowhere Return-Path: Received: from omta05sl.mx.bigpond.com by me.nowhere.else with ESMTP id 632BD5758 for ; Sun, 21 Oct 2007 19:38:21 +1000 Received: from oaamta05sl.mx.bigpond.com by omta05sl.mx.bigpond.com with ESMTP id <20071021093820.HSPC16667.omta05sl.mx.bigpond.com@oaamta05sl.mx.bigpond.com> for ; Sun, 21 Oct 2007 19:38:20 +1000 Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id <20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for ; Sun, 21 Oct 2007 19:38:20 +1000 Date: Sun, 21 Oct 2007 19:38:13 +1000 From: Mikel Lindsaar Reply-To: Mikel Lindsaar To: mikel@me.nowhere Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a> Subject: Testing outlook Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=----=_NextPart_000_0093_01C81419.EB75E850 X-Get_mail_default: mikel@me.nowhere.else X-Priority: 3 X-Original-To: mikel@me.nowhere X-Mailer: Microsoft Outlook Express 6.00.2900.3138 Delivered-To: mikel@me.nowhere X-Mimeole: Produced By Microsoft MimeOLE V6.00.2900.3138 X-Msmail-Priority: Normal This is a multi-part message in MIME format. ------=_NextPart_000_0093_01C81419.EB75E850 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: Quoted-printable Hello This is an outlook test So there. Me. ------=_NextPart_000_0093_01C81419.EB75E850 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: Quoted-printable
    Hello
    This is an outlook=20 test
     
    So there.
     
    Me.
    ------=_NextPart_000_0093_01C81419.EB75E850-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_with_mimepart_without_content_type.eml000066400000000000000000000101751267453234600327710ustar00rootroot00000000000000X-Gmail-Received: b2c98353cc39d93e4204831226f778c200d28109 Delivered-To: roor32@gmail.com Received: by 10.64.10.4 with SMTP id 4cs594808qbj; Fri, 20 Oct 2006 01:53:34 -0700 (PDT) Received: by 10.65.224.11 with SMTP id b11mr149813qbr; Fri, 20 Oct 2006 01:53:34 -0700 (PDT) Return-Path: <> Received: from anis.telecom.uqam.ca (anis.telecom.uqam.ca [132.208.250.6]) by mx.google.com with ESMTP id e13si1575402qbe.2006.10.20.01.53.34; Fri, 20 Oct 2006 01:53:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of anis.telecom.uqam.ca designates 132.208.250.6 as permitted sender) Received: from anis4.telecom.uqam.ca (anis4.telecom.uqam.ca [132.208.250.236]) by sortant.uqam.ca (8.13.6/8.12.1) with SMTP id k9K8SIwA023763 for ; Fri, 20 Oct 2006 04:28:33 -0400 (EDT) Received: from antivirus.uqam.ca ([127.0.0.1]) by anis4.telecom.uqam.ca (SAVSMTP 3.1.1.32) with SMTP id M2006102004283404041 for ; Fri, 20 Oct 2006 04:28:34 -0400 Received: from localhost (localhost) by antivirus.uqam.ca (8.13.6/8.12.1) id k9JMDbg4005560; Fri, 20 Oct 2006 04:28:33 -0400 (EDT) Date: Fri, 20 Oct 2006 04:28:33 -0400 (EDT) From: Mail Delivery Subsystem Message-Id: <200610200828.k9JMDbg4005560@antivirus.uqam.ca> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="k9JMDbg4005560.1161332913/antivirus.uqam.ca" Subject: Warning: could not send message for past 1 day Auto-Submitted: auto-generated (warning-timeout) This is a MIME-encapsulated message --k9JMDbg4005560.1161332913/antivirus.uqam.ca ********************************************** ** THIS IS A WARNING MESSAGE ONLY ** ** YOU DO NOT NEED TO RESEND YOUR MESSAGE ** ********************************************** The original message was received at Thu, 19 Oct 2006 01:23:47 -0400 (EDT) from py-out-1112.google.com [64.233.166.178] ----- Transcript of session follows ----- ... Deferred Warning: message still undelivered after 1 day Will keep trying until message is 5 days old --k9JMDbg4005560.1161332913/antivirus.uqam.ca Content-Type: message/delivery-status Reporting-MTA: dns; antivirus.uqam.ca Arrival-Date: Thu, 19 Oct 2006 01:23:47 -0400 (EDT) Final-Recipient: RFC822; larose.julie@courrier.uqam.ca Action: delayed Status: 4.5.0 Diagnostic-Code: SMTP; Last-Attempt-Date: Fri, 20 Oct 2006 04:28:33 -0400 (EDT) Will-Retry-Until: Tue, 24 Oct 2006 01:23:47 -0400 (EDT) --k9JMDbg4005560.1161332913/antivirus.uqam.ca Content-Type: message/rfc822 Return-Path: Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.178]) by intrant.uqam.ca (8.13.6/8.12.2/uqam-filtres) with SMTP id k9J5Ni8o007263 for ; Thu, 19 Oct 2006 01:23:47 -0400 (EDT) X-UQAM-Spam-Filter: Filtre-Uqam re: abuse@uqam.ca Received: by py-out-1112.google.com with SMTP id t32so610221pyc for ; Wed, 18 Oct 2006 22:23:33 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=Fwt0k1kaMU+1kM1iTG0q4Xf94p9alSohgM7QQN0CSjfBYUUhT+J4Y6+ZWotaaSffV3gX86RE/n97n0yQ/33EgYKIifuEpa0hi2mg3KTmcDqlCjiDfih58Z998GEFfbhu0he2jsoB+k6AgVRFPwP6LMRi6T66vr2f7IOAmX2IHiU= Received: by 10.65.241.20 with SMTP id t20mr15391984qbr; Wed, 18 Oct 2006 15:10:03 -0700 (PDT) Received: by 10.64.10.4 with HTTP; Wed, 18 Oct 2006 15:10:03 -0700 (PDT) Message-ID: <89d7557c0610181510r6fa5ebd8n66a7deec71ade118@mail.gmail.com> Date: Wed, 18 Oct 2006 18:10:03 -0400 From: "=?ISO-8859-1?Q?RogE9?=" To: larose.julie@courrier.uqam.ca Subject: Est-ce toi ? MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Salut, je ne suis pas sur de m'adresser a la bonne personne. Mais si jamais tu me reconnais :p, peux-tu repondre a ce mail ? Merci. Roger --k9JMDbg4005560.1161332913/antivirus.uqam.ca-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_with_multipart_mixed_quoted_boundary.eml000066400000000000000000000055451267453234600332750ustar00rootroot00000000000000From email_test@me.nowhere Return-Path: Received: from omta05sl.mx.bigpond.com by me.nowhere.else with ESMTP id 632BD5758 for ; Sun, 21 Oct 2007 19:38:21 +1000 Received: from oaamta05sl.mx.bigpond.com by omta05sl.mx.bigpond.com with ESMTP id <20071021093820.HSPC16667.omta05sl.mx.bigpond.com@oaamta05sl.mx.bigpond.com> for ; Sun, 21 Oct 2007 19:38:20 +1000 Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id <20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for ; Sun, 21 Oct 2007 19:38:20 +1000 Date: Sun, 21 Oct 2007 19:38:13 +1000 From: Mikel Lindsaar Reply-To: Mikel Lindsaar To: mikel@me.nowhere Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a> Subject: Testing outlook Subject: Another PDF Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2192_32400445.1115745999735" X-Virus-Scanned: amavisd-new at textdrive.com ------=_Part_2192_32400445.1115745999735 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Just attaching another PDF, here, to see what the message looks like, and to see if I can figure out what is going wrong here. ------=_Part_2192_32400445.1115745999735 Content-Type: application/pdf; name="broken.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="broken.pdf" JVBERi0xLjQNCiXk9tzfDQoxIDAgb2JqDQo8PCAvTGVuZ3RoIDIgMCBSDQogICAvRmlsdGVyIC9G bGF0ZURlY29kZQ0KPj4NCnN0cmVhbQ0KeJy9Wt2KJbkNvm/od6jrhZxYln9hWEh2p+8HBvICySaE ycLuTV4/1ifJ9qnq09NpSBimu76yLUuy/qzqcPz7+em3Ixx/CDc6CsXxs3b5+fvfjr/8cPz6/BRu rbfAx/n3739/fuJylJ5u5fjX81OuDr4deK4Bz3z/aDP+8fz0yw8g0Ofq7ktr1Mn+u28rvhy/jVeD QSa+9YNKHP/pxjvDNfVAx/m3MFz54FhvTbaseaxiDoN2LeMVMw+yA7RbHSCDzxZuaYB2E1Yay7QU x89vz0+tyFDKMlAHK5yqLmnjF+c4RjEiQIUeKwblXMe+AsZjN1J5yGQL5DHpDHksurM81rF6PKab gK6zAarIDzIiUY23rJsN9iorAE816aIu6lsgAdQFsuhhkHOUFgVjp2GjMqSewITXNQ27jrMeamkg 1rPI3iLWG2CIaSBB+V1245YVRICGbbpYKHc2USFDl6M09acQVQYhlwIrkBNLISvXhGlF1wi5FHCw wxZkoGNJlVeJCEsqKA+3YAV5AMb6KkeaqEJQmFKKQU8T1pRi2ihE1Y4CDrqoYFFXYjJJOatsyzuI 8SIlykuxKTMibWK8H1PgEvqYgs4GmQSrEjJAalgGirIhik+p4ZQN9E3ETFPAHE1b8pp1l/0Rc1gl fQs0ABWvyoZZzU8VnPXwVVcO9BEsyjEJaO6eBoZRyKGlrKoYoOygA8BGIzgwN3RQ15ouigG5idZQ fx2U4Db2CqiLO0WHAZoylGiCAqhniNQjFjQPSkmjwfNTgQ6M1Ih+eWo36wFmjIxDJZiGUBiWsAyR xX3EekGOizkGI96Ol9zVZTAivikURhRsHh2E3JhWMpSTZCnnonrLhMCodgrNcgo4uyJUJc6qnVss nrGd1Ptr0YwisCOYyIbUwVjV4xBUNLbguSO2YHujonAMJkMdSI7bIw91Akq2AUlMUWGFTMAOamjU OvZQCxIkY2pCpMFo/IwLdVLHs6nddwTRrgoVbvLU9eB0G4EMndV0TNoxHbt3JBWwK6hhv3iHfDtF yokB302IpEBTnWICde4uYc/1khDbSIkQopO6lcqamGBu1OSE3N5IPSsZX00CkSHRiiyx6HQIShsS HSVNswdVsaOUSAWq9aYhDtGDaoG5a3lBGkYt/lFlBFt1UqrYnzVtUpUQnLiZeouKgf1KhRBViRRk ExepJCzTwEmFDalIRbLEGtw0gfpESOpIAF/NnpPzcVCG86s0g2DuSyd41uhNGbEgaSrWEXORErbw ------=_Part_2192_32400445.1115745999735-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_with_nested_attachment.eml000066400000000000000000000115271267453234600302710ustar00rootroot00000000000000From jamis@37signals.com Thu Feb 22 11:20:31 2007 Mime-Version: 1.0 (Apple Message framework v752.3) Message-Id: <2CCE0408-10C7-4045-9B16-A1C11C31469B@37signals.com> Content-Type: multipart/signed; micalg=sha1; boundary=Apple-Mail-42-587703407; protocol="application/pkcs7-signature" To: Jamis Buck Subject: Testing attachments From: Jamis Buck Date: Thu, 22 Feb 2007 11:20:31 -0700 --Apple-Mail-42-587703407 Content-Type: multipart/mixed; boundary=Apple-Mail-41-587703287 --Apple-Mail-41-587703287 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Here is a test of an attachment via email. - Jamis --Apple-Mail-41-587703287 Content-Transfer-Encoding: base64 Content-Type: image/png; x-unix-mode=0644; name=byo-ror-cover.png Content-Disposition: inline; filename=truncated.png iVBORw0KGgoAAAANSUhEUgAAAKUAAADXCAYAAAB7wZEQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAALEgAACxIB0t1+/AAAABd0RVh0Q3JlYXRpb24gVGltZQAxLzI1LzIwMDeD9CJVAAAAGHRFWHRT b2Z0d2FyZQBBZG9iZSBGaXJld29ya3NPsx9OAAAyBWlUWHRYTUw6Y29tLmFkb2JlLnhtcDw/eHBh Y2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1l dGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMS1j MDIwIDEuMjU1NzE2LCBUdWUgT2N0IDEwIDIwMDYgMjM6MTY6MzQiPgogICA8cmRmOlJERiB4bWxu czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAg ICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0 dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0b3JUb29sPkFk b2JlIEZpcmV3b3JrcyBDUzM8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhhcDpDcmVhdGVE YXRlPjIwMDctMDEtMjVUMDU6Mjg6MjFaPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhhcDpN b2RpZnlEYXRlPjIwMDctMDEtMjVUMDU6Mjg6MjFaPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgPC9y ZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAg ICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAg ICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0 hhojpmnJMfaYFmSkXWg5PGCmHXVj/c9At0hSK2xGdd8F3muk0VFjb4f5Ue0ksQ8qAcq0delaXhdb DjKNnF+3B3t9kObZYmk7AZgWYqO9anpR3wpM9sQ5XslB9a+kWyTtNb0fOmudzGHfPFBQDKesyycm DBL7Cw5bXjIEuci+SSOm/LYnXDZu6iuPEj8lYBb+OU8xx1f9m+e5rhJiYKqjo5vHfiZp+VUkW9xc Ufd6JHNWc47PkQqb9ie3SLEZB/ZqyAssiqURY+G35iOMZUrHbasHnb80QAPv9FHtAbJIyro7bi5b ai2TEAKen5+LJNWrglZjm3UbZvt7KryA2J5b5J1jZF8kL6GzvG1Zqx54Y1y7J7n20wMOt9frG2sW uwGP07kNz3732vf6bfvAvLldfS+9fts2euXY37D+R29FGZdlnhzV4TTFmPJduBP2RbNNua4rTqcT Qt7Xy1KUB0AHSdP5AZQYvHZg7WD1XvYeMO1A9HhZPqMX5KXbMBrn2efxns/ee21674efxz4Tp/fq 2HZ648dgYaC1i3Vq1IbNPq3PvDTPezY9FaRISjvnzWqdgcWN8EJgjnNq+Z7ktOm9l2Nfth28EZi4 bG/we5JwxM+Tql47/D/X6b38I8/RyxvxPJrX6zvQbo3h9jyJx+C0ALX327QETHl5eYlaYCT5rPTb +5/rAq26t3lKIxV/p88hq6ptngdgCzoPjJqndiLfc/6y5A14WeDFGNPct4iUsJBV2bYzLEV7m83s 6Rp63VPhHKC/g/LzaU9qexJRr56043JWinqAtfZqsSm1sjoznthl54dtCqv+uL4nIY+oYWuc3+nH kGfn8b0HQpvOYLQAZUDanbJs3jQhITZEgdarZK+cO6ySlL13rut5nFaN23s7u3Snz6eRPTkCoc2/ Vp1zHfZVFpZ87FiMVLV1iqyK5rlzfji2GzjfDsodlD+Weo5UD4h6PwKqzQMqID0tq2VjjFVSMpis ZLRAs7sePZBZAHI+gIanB8I7MD+femAceeUe2Kxa5jS950kZ1p5eNEdeX1+jFmSpZ+1EdWCsDcne NPNgUHNw3aYpnzv9PGTX0uo94EtN9qq1rOdxe3kc79T8ukeHJJ8Fnxej6qlylbLLsjQLOy6Xy2a1 kefs/N+nM7+S7IG5/E5Yc7F003pWErLjbH0O5cGadiMptSB/DZ5U5DI9yeg5MFYyMj8lC/Y7/Xjq OZlWcnpg9aQfXz2HRq+Wn5xOp6gN8tWq8R44e2pfyzLYemEgprst+XXk2Zj2nXlbsG05BprndTMv C3QRaXczshhVsHnMgfYn80Y2g5JureA6wBasPeP7LkE/jvZMJAaf/g/U2RelHsisvan5FqweIAHg Pwc7L68GxvVDAAAAAElFTkSuQmCC --Apple-Mail-41-587703287-- --Apple-Mail-42-587703407 Content-Transfer-Encoding: base64 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Disposition: attachment; filename=smime.p7s MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGJzCCAuAw ggJJoAMCAQICEFjnFNYXwDEZRWY5EkfzopUwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkEx JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA2MDkxMjE3MDExMloXDTA3MDkxMjE3MDEx MlowRTEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEiMCAGCSqGSIb3DQEJARYTamFt aXNAMzdzaWduYWxzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO2A9JeOFIFJ G6z8pTcAldrZ2nMe+Xb1tNrbHgoVzN/QhHXM4qst2Ml93cmFLjMmwG7P9RJeU4oNx+jTqVoBB7NV Ne1/o56Do0KhfMZ9iUDQdPLbkZMq4EEpFMdm6PyM3muRKwPhj66iAWe/osCb8DowUK2f66vaRx0Z Y0MQHIIrXE02Ta4IfAhIfPqBLkZ4WgTYBHN9vMdYea1jF0GO4gqGk1wqwb3yxv2QMYMbwJ6SI+k/ ZjkSR/OilTCBhwYLKoZIhvcNAQkQAgsxeKB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3 dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1h aWwgSXNzdWluZyBDQQIQWOcU1hfAMRlFZjkSR/OilTANBgkqhkiG9w0BAQEFAASCAQCfwQiC3v6/ yleRDGv3bJ4nQYQ+c3mz3+mn3Xi6uU35n3piwxZZaWRdmLyiXPvU+QReHpSf3l2qsEZM3sdE0XF9 eRul/+QTFJcDNXOEAxG1zC2Gpz+6c6RrX4Ou12Pwkp+pNrZWTSY/mZgdqcArupOBcZi7qBjoWcy5 wb54dfvSSjrjmqLbkH/E8ww/6gGQuU/xXpAUZgUrTmQHrNKeIdSh5oDkOxFaFWvnmb8Z/2ixKqW/ Ux6WqamyvBtTs/5YBEtnpZOk+uVoscYEUBhU+DVJ2OSvTdXSivMtBdXmGTsG22k+P1NGUHi/A7ev xPaO0uk4V8xyjNlN4HPuGpkrlXwPAAAAAAAA --Apple-Mail-42-587703407-- mail-2.6.4/spec/fixtures/emails/mime_emails/raw_email_with_quoted_illegal_boundary.eml000066400000000000000000000043601267453234600314710ustar00rootroot00000000000000From email_test@me.nowhere Return-Path: Received: from omta05sl.mx.bigpond.com by me.nowhere.else with ESMTP id 632BD5758 for ; Sun, 21 Oct 2007 19:38:21 +1000 Received: from oaamta05sl.mx.bigpond.com by omta05sl.mx.bigpond.com with ESMTP id <20071021093820.HSPC16667.omta05sl.mx.bigpond.com@oaamta05sl.mx.bigpond.com> for ; Sun, 21 Oct 2007 19:38:20 +1000 Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id <20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for ; Sun, 21 Oct 2007 19:38:20 +1000 Date: Sun, 21 Oct 2007 19:38:13 +1000 From: Mikel Lindsaar Reply-To: Mikel Lindsaar To: mikel@me.nowhere Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a> Subject: Testing outlook Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0093_01C81419.EB75E850" X-Get_mail_default: mikel@me.nowhere.else X-Priority: 3 X-Original-To: mikel@me.nowhere X-Mailer: Microsoft Outlook Express 6.00.2900.3138 Delivered-To: mikel@me.nowhere X-Mimeole: Produced By Microsoft MimeOLE V6.00.2900.3138 X-Msmail-Priority: Normal This is a multi-part message in MIME format. ------=_NextPart_000_0093_01C81419.EB75E850 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: Quoted-printable Hello This is an outlook test So there. Me. ------=_NextPart_000_0093_01C81419.EB75E850 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: Quoted-printable
    Hello
    This is an outlook=20 test
     
    So there.
     
    Me.
    ------=_NextPart_000_0093_01C81419.EB75E850-- mail-2.6.4/spec/fixtures/emails/mime_emails/sig_only_email.eml000066400000000000000000000016421267453234600245130ustar00rootroot00000000000000Date: Mon, 4 Jun 2007 15:01:31 -0700 From: Test To: Mikel Subject: Re: Testing multipart/signed Message-ID: <20070604150131.40d4fa1e@reforged> Mime-Version: 1.0 Content-Type: multipart/signed; boundary=Sig_2GIY2xfzqSADMmu9sKGJqWm; protocol="application/pgp-signature"; micalg=PGP-SHA1 --Sig_2GIY2xfzqSADMmu9sKGJqWm Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable This is random text, not what has been signed below, ie, this sig email is not signed correctly. --Sig_2GIY2xfzqSADMmu9sKGJqWm Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DB1111Iu7dfRchrkBInkRArniAKCue17JOxXBiAZHwLy3uFacU+pmhwCgwzhf V5YSPv2xmYOA6mJ6oVaasseQ= =T7p9 -----END PGP SIGNATURE----- --Sig_2GIY2xfzqSADMmu9sKGJqWm-- mail-2.6.4/spec/fixtures/emails/mime_emails/two_from_in_message.eml000066400000000000000000000033071267453234600255470ustar00rootroot00000000000000Return-Path: Received: from mail-xxx.google.com (mail-xxx.google.com [0.0.0.0]) by smtp.test.com (Postfix) with ESMTP id xxxx for ; Wed, 2 Dec 2009 09:39:57 +0000 (UTC) Received: by qyk6 with SMTP id 6so3112qyk.3 for ; Wed, 02 Dec 2009 01:39:53 -0800 (PST) MIME-Version: 1.0 Received: by 0.0.0.0 with SMTP id xxx.000.0000000000000; Wed, 02 Dec 2009 01:39:53 -0800 (PST) In-Reply-To: <8fc5086d0912020131y377ba0ccpf8f14783cfc3014a@test.com> References: <8fc5086d0912020131y377ba0ccpf8f14783cfc3014a@test.com> From: Tester 1 Date: Wed, 2 Dec 2009 22:39:33 +1300 Message-ID: <8fc5086d0912020139y1564ad32jb4f4209fa464f4a6@test.com> Subject: Sending messages include last little bit To: tester2@test.com Content-Type: multipart/alternative; boundary=00c09fa216eb1bfc0a0479bba823 --00c09fa216eb1bfc0a0479bba823 Content-Type: text/plain; charset=ISO-8859-1 When sending email: * From Hotmail you get the ads as well. * From GMail you also get the person's signature. I'm curious, and I might do some digging tomorrow as well, to see if its possible to strip the last little bit (signature/ads) from email messages. --00c09fa216eb1bfc0a0479bba823 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
    When sending ema= il:
    * From Hotmail you get the ads as well.
    * Fr= om GMail you also get the person's signature.

    = I'm curious, and I might do some digging tomorrow as well, to see if it= s possible to strip the last little bit (signature/ads) from email messages= .
    --00c09fa216eb1bfc0a0479bba823--mail-2.6.4/spec/fixtures/emails/multi_charset/000077500000000000000000000000001267453234600214015ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/multi_charset/japanese.eml000066400000000000000000000005101267453234600236620ustar00rootroot00000000000000MIME-Version: 1.0 Subject: =?UTF-8?B?44G+44G/44KA44KB44KC?= From: Mikel Lindsaar To: =?UTF-8?B?44G/44GR44KL?= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 44GL44GN44GP44GI44GTCgotLSAKaHR0cDovL2xpbmRzYWFyLm5ldC8KUmFpbHMsIFJTcGVjIGFu ZCBMaWZlIGJsb2cuLi4uCg==mail-2.6.4/spec/fixtures/emails/multi_charset/japanese_attachment.eml000066400000000000000000000015531267453234600261020ustar00rootroot00000000000000MIME-Version: 1.0 Received: by 10.231.35.72 with HTTP; Fri, 16 Oct 2009 05:39:34 -0700 (PDT) Date: Fri, 16 Oct 2009 23:39:34 +1100 Delivered-To: raasdnil@gmail.com Message-ID: <57a815bf0910160539m64240421gb35ea52e101aedbc@mail.gmail.com> Subject: testing From: Mikel Lindsaar To: Mikel Lindsaar Content-Type: multipart/mixed; boundary=00032557395e3572cf04760cb060 --00032557395e3572cf04760cb060 Content-Type: text/plain; charset=UTF-8 testing -- http://lindsaar.net/ Rails, RSpec and Life blog.... --00032557395e3572cf04760cb060 Content-Type: text/plain; charset=UTF-8; name="=?UTF-8?B?44Gm44GZ44GoLnR4dA==?=" Content-Disposition: attachment; filename="=?UTF-8?B?44Gm44GZ44GoLnR4dA==?=" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0uxfl510 dGhpcyBpcyBhIHRlc3QK44GT44KM44KP44Gm44GZ44Go --00032557395e3572cf04760cb060--mail-2.6.4/spec/fixtures/emails/multi_charset/japanese_attachment_long_name.eml000066400000000000000000000045011267453234600301150ustar00rootroot00000000000000Delivered-To: raasdnil@gmail.com Received: by 10.231.12.67 with SMTP id w3cs164325ibw; Fri, 30 Oct 2009 01:11:12 -0700 (PDT) Received: by 10.150.44.2 with SMTP id r2mr2367210ybr.77.1256890271939; Fri, 30 Oct 2009 01:11:11 -0700 (PDT) Return-Path: Received: from mx1.test.lindsaar.net.au (mx1.test.lindsaar.net.au [210.14.110.240]) by mx.google.com with ESMTP id 25si7923673gxk.34.2009.10.30.01.11.11; Fri, 30 Oct 2009 01:11:11 -0700 (PDT) Received-SPF: neutral (google.com: 210.14.110.240 is neither permitted nor denied by domain of mikel@test.lindsaar.net) client-ip=210.14.110.240; Authentication-Results: mx.google.com; spf=neutral (google.com: 210.14.110.240 is neither permitted nor denied by domain of mikel@test.lindsaar.net) smtp.mail=mikel@test.lindsaar.net Received: from [192.168.4.253] (60-241-138-146.static.tpgi.com.au [60.241.138.146]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: mikel) by mx1.test.lindsaar.net.au (Postfix) with ESMTPSA id 5C0186DD4CD for ; Fri, 30 Oct 2009 19:11:08 +1100 (EST) Subject: =?utf-8?B?44G+44G/44KA44KB44KC44G+44G/44KA44KB44KC44G+44G/44KA?= =?utf-8?B?44KB44KC44G+44G/44KA44KB44KC44G+44G/44KA44KB44KC44G+?= =?utf-8?B?44G/44KA44KB44KC44G+44G/44KA44KB44KC44G+44G/44KA44KB?= =?utf-8?B?44KC44G+44G/44KA44KB44KC44G+44G/44KA44KB44KC?= From: Mikel Lindsaar Content-Type: multipart/mixed; boundary=Apple-Mail-6--589811753 Message-Id: <60A112A8-F26C-4E23-95B8-4EB9F139D6A0@test.lindsaar.net> Date: Fri, 30 Oct 2009 19:11:02 +1100 To: Mikel Lindsaar Mime-Version: 1.0 (Apple Message framework v1076) X-Mailer: Apple Mail (2.1076) --Apple-Mail-6--589811753 Content-Disposition: attachment; filename*0*=utf-8''%E3%81%8B%E3%81%8D%E3%81%8F%E3%81%91%E3%81%93%E3%81%8B%E3%81%8D%E3%81%8F%E3%81%91%E3%81%93%E3%81%8B%E3%81%8D%E3%81%8F%E3%81%91%E3%81%93%E3%81%8B%E3%81%8D%E3%81%8F%E3%81%91%E3%81%93%E3%81%8B; filename*1*=%E3%81%8D%E3%81%8F%E3%81%91%E3%81%93.txt Content-Type: text/plain; x-unix-mode=0644; name="=?utf-8?B?44GL44GN44GP44GR44GT44GL44GN44GP44GR44GT44GL44GN44GP?= =?utf-8?B?44GR44GT44GL44GN44GP44GR44GT44GL44GN44GP44GR44GTLnR4?= =?utf-8?B?dA==?=" Content-Transfer-Encoding: 7bit this is the data --Apple-Mail-6--589811753--mail-2.6.4/spec/fixtures/emails/multi_charset/japanese_iso_2022.eml000066400000000000000000000003741267453234600252110ustar00rootroot00000000000000MIME-Version: 1.0 Subject: =?UTF-8?B?44G+44G/44KA44KB44KC?= From: Mikel Lindsaar To: =?UTF-8?B?44G/44GR44KL?= Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit $B$9$_$^$;$s!#(B mail-2.6.4/spec/fixtures/emails/multi_charset/japanese_shift_jis.eml000066400000000000000000000005461267453234600257350ustar00rootroot00000000000000Delivered-To: unknown@example.com Date: Wed, 28 May 2014 17:18:19 +0900 (JST) From: xxxxxxx@docomo.ne.jp To: unknown@example.com Subject: test Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="Shift_JIS" Content-Transfer-Encoding: 8bit ̃[̓eXgp̃[łB Ƃ낵肢\グ܂I mail-2.6.4/spec/fixtures/emails/multi_charset/ks_c_5601-1987.eml000066400000000000000000000004271267453234600241030ustar00rootroot00000000000000Delivered-To: unknown@example.com Date: Wed, 28 May 2014 17:18:19 +0900 (JST) From: from@example.com To: unknown@example.com Subject: test Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="ks_c_5601-1987" Content-Transfer-Encoding: 8bit Ƽ mail-2.6.4/spec/fixtures/emails/multipart_report_emails/000077500000000000000000000000001267453234600235045ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/multipart_report_emails/multi_address_bounce1.eml000066400000000000000000000171121267453234600304600ustar00rootroot00000000000000Received: from lvmail01.LL.com (LHLO lvmail01.LL.com) (10.60.6.3) by lvmail01.LL.com with LMTP; Tue, 23 Feb 2010 22:16:41 -0800 (PST) Received: by lvmail01.LL.com (Postfix) id 3E47A1BC025; Tue, 23 Feb 2010 22:16:41 -0800 (PST) Date: Tue, 23 Feb 2010 22:16:41 -0800 (PST) From: MAILER-DAEMON@lvmail01.LL.com (Mail Delivery System) Subject: Undelivered Mail Returned to Sender To: rahul.chaudhari@LL.com Auto-Submitted: auto-replied MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B7841BC027.1266992201/lvmail01.LL.com" Content-Transfer-Encoding: 7bit Message-Id: <20100224061641.3E47A1BC025@lvmail01.LL.com> This is a MIME-encapsulated message. --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Notification Content-Type: text/plain; charset=us-ascii This is the mail system at host lvmail01.LL.com. I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below. For further assistance, please send mail to postmaster. If you do so, please include this problem report. You can delete your own text from the attached returned message. The mail system : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Delivery report Content-Type: message/delivery-status Reporting-MTA: dns; lvmail01.LL.com X-Postfix-Queue-ID: 9B7841BC027 X-Postfix-Sender: rfc822; rahul.chaudhari@LL.com Arrival-Date: Tue, 23 Feb 2010 22:16:15 -0800 (PST) Final-Recipient: rfc822; bbbbvhvbbvkjbhfbvbvjhb@gmail.com Original-Recipient: rfc822;bbbbvhvbbvkjbhfbvbvjhb@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Original-Recipient: rfc822;bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; egyfefsdvsfvvhjsd@gmail.com Original-Recipient: rfc822;egyfefsdvsfvvhjsd@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; kfhejkfbsjkjsbhds@gmail.com Original-Recipient: rfc822;kfhejkfbsjkjsbhds@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com Original-Recipient: rfc822;qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Undelivered Message Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit Return-Path: Received: from localhost (localhost [127.0.0.1]) by lvmail01.LL.com (Postfix) with ESMTP id 9B7841BC027; Tue, 23 Feb 2010 22:16:15 -0800 (PST) X-Virus-Scanned: amavisd-new at LL.com Received: from lvmail01.LL.com ([127.0.0.1]) by localhost (lvmail01.LL.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HXMOLJWXGcFK; Tue, 23 Feb 2010 22:16:15 -0800 (PST) Received: from lvmail01.LL.com (lvmail01.LL.com [10.60.6.3]) by lvmail01.LL.com (Postfix) with ESMTP id 12D311BC025; Tue, 23 Feb 2010 22:16:15 -0800 (PST) Date: Tue, 23 Feb 2010 22:16:14 -0800 (PST) From: Rahul Chaudhari To: egyfefsdvsfvvhjsd@gmail.com, kfhejkfbsjkjsbhds@gmail.com, bbbbvhvbbvkjbhfbvbvjhb@gmail.com, qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com, bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Message-ID: <118707422.15521266992174819.JavaMail.root@lvmail01> Subject: Test of bounce email MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.50.4.44] X-Mailer: Zimbra 6.0.1_GA_1816.UBUNTU8_64 (ZimbraWebClient - FF3.0 (Linux)/6.0.1_GA_1816.UBUNTU8_64) This is just testing. Thanks & Regards, Rahul P. Chaudhari Software Developer LIVIA India Private Limited Board Line - +91.22.6725 5100 Hand Phone - +91.809 783 3437 Web URL: www.LL.com --9B7841BC027.1266992201/lvmail01.LL.com-- mail-2.6.4/spec/fixtures/emails/multipart_report_emails/multi_address_bounce2.eml000066400000000000000000000171121267453234600304610ustar00rootroot00000000000000Received: from lvmail01.LL.com (LHLO lvmail01.LL.com) (10.60.6.3) by lvmail01.LL.com with LMTP; Tue, 23 Feb 2010 22:16:41 -0800 (PST) Received: by lvmail01.LL.com (Postfix) id 3E47A1BC025; Tue, 23 Feb 2010 22:16:41 -0800 (PST) Date: Tue, 23 Feb 2010 22:16:41 -0800 (PST) From: MAILER-DAEMON@lvmail01.LL.com (Mail Delivery System) Subject: Undelivered Mail Returned to Sender To: rahul.chaudhari@LL.com Auto-Submitted: auto-replied MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B7841BC027.1266992201/lvmail01.LL.com" Content-Transfer-Encoding: 7bit Message-Id: <20100224061641.3E47A1BC025@lvmail01.LL.com> This is a MIME-encapsulated message. --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Notification Content-Type: text/plain; charset=us-ascii This is the mail system at host lvmail01.LL.com. I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below. For further assistance, please send mail to postmaster. If you do so, please include this problem report. You can delete your own text from the attached returned message. The mail system : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) : host gmail-smtp-in.l.google.com[209.85.223.33] said: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 (in reply to RCPT TO command) --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Delivery report Content-Type: message/delivery-status Reporting-MTA: dns; lvmail01.LL.com X-Postfix-Queue-ID: 9B7841BC027 X-Postfix-Sender: rfc822; rahul.chaudhari@LL.com Arrival-Date: Tue, 23 Feb 2010 22:16:15 -0800 (PST) Final-Recipient: rfc822; bbbbvhvbbvkjbhfbvbvjhb@gmail.com Original-Recipient: rfc822;bbbbvhvbbvkjbhfbvbvjhb@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Original-Recipient: rfc822;bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; egyfefsdvsfvvhjsd@gmail.com Original-Recipient: rfc822;egyfefsdvsfvvhjsd@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; kfhejkfbsjkjsbhds@gmail.com Original-Recipient: rfc822;kfhejkfbsjkjsbhds@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 Final-Recipient: rfc822; qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com Original-Recipient: rfc822;qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com Action: failed Status: 5.1.1 Remote-MTA: dns; gmail-smtp-in.l.google.com Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 41si5422799iwn.27 --9B7841BC027.1266992201/lvmail01.LL.com Content-Description: Undelivered Message Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit Return-Path: Received: from localhost (localhost [127.0.0.1]) by lvmail01.LL.com (Postfix) with ESMTP id 9B7841BC027; Tue, 23 Feb 2010 22:16:15 -0800 (PST) X-Virus-Scanned: amavisd-new at LL.com Received: from lvmail01.LL.com ([127.0.0.1]) by localhost (lvmail01.LL.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HXMOLJWXGcFK; Tue, 23 Feb 2010 22:16:15 -0800 (PST) Received: from lvmail01.LL.com (lvmail01.LL.com [10.60.6.3]) by lvmail01.LL.com (Postfix) with ESMTP id 12D311BC025; Tue, 23 Feb 2010 22:16:15 -0800 (PST) Date: Tue, 23 Feb 2010 22:16:14 -0800 (PST) From: Rahul Chaudhari To: egyfefsdvsfvvhjsd@gmail.com, kfhejkfbsjkjsbhds@gmail.com, bbbbvhvbbvkjbhfbvbvjhb@gmail.com, qfvhgsvhgsduiohncdhcvhsdfvsfygusd@gmail.com, bscdbcjhasbcjhbdscbhbsdhcbj@gmail.com Message-ID: <118707422.15521266992174819.JavaMail.root@lvmail01> Subject: Test of bounce email MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.50.4.44] X-Mailer: Zimbra 6.0.1_GA_1816.UBUNTU8_64 (ZimbraWebClient - FF3.0 (Linux)/6.0.1_GA_1816.UBUNTU8_64) This is just testing. Thanks & Regards, Rahul P. Chaudhari Software Developer LIVIA India Private Limited Board Line - +91.22.6725 5100 Hand Phone - +91.809 783 3437 Web URL: www.LL.com --9B7841BC027.1266992201/lvmail01.LL.com-- mail-2.6.4/spec/fixtures/emails/multipart_report_emails/multipart_report_multiple_status.eml000066400000000000000000000106731267453234600331440ustar00rootroot00000000000000Return-Path: <> X-Original-To: notification+promo@blah.com Delivered-To: notification+promo@blah.com Received: from schemailmta04.ci.com (schemailmta04.ci.com [209.183.37.58]) by blah.com (Postfix) with ESMTP id 24EF419F546 for ; Tue, 29 Jun 2010 15:42:46 +0000 (UTC) To: notification+promo@blah.com From: Mail Administrator Reply-To: Subject: Mail System Error - Returned Mail Date: Tue, 29 Jun 2010 10:42:44 -0500 Message-ID: <20100629154244.OZPA15102.schemailmta04.ci.com@schemailmta04> MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; Boundary="===========================_ _= 6078796(15102)1277826164" X-Cloudmark-Analysis: v=1.0 c=1 a=q8OS1GolVHwA:10 a=ev1gGZlfZ-EA:10 a=HQ-Cukr2AAAA:8 a=qihIh-XuXL65y3o_mUgA:9 a=mUL5bUDOV_-gjcCZylcY5Lz4jjsA:4 a=iQvSWfByulMA:10 a=ni8l3qMSI1sA:10 a=WHDNLAQ519cA:10 a=Fry9e7MVxuJdODrS104A:9 a=JYo4OF_E9TqbHrUN2TvLdggtx2cA:4 a=S0jCPnXDAAAA:8 a=pXkHMj1YAAAA:8 a=5ErcFzC0N3E7OloTRA8A:9 a=cC0RL7HlXt3RrKfnpEbxHCeM-zQA:4 a=cHEBK1Z0Lu8A:10 a=p9ZeupWRHUwA:10 a=7sPVfr_AX1EA:10 --===========================_ _= 6078796(15102)1277826164 Content-Type: message/delivery-status; This Message was undeliverable due to the following reason: has restricted SMS e-mail Please reply to if you feel this message to be in error. --===========================_ _= 6078796(15102)1277826164 Content-Type: message/delivery-status Reporting-MTA: dns; schemailmta04.ci.com Arrival-Date: Tue, 29 Jun 2010 10:42:37 -0500 Received-From-MTA: dns; schemailedgegx04.ci.com (172.16.130.170) Original-Recipient: rfc822;u@ci.com Final-Recipient: RFC822; Action: failed Status: 5.3.0 --===========================_ _= 6078796(15102)1277826164 Content-Type: message/rfc822 Received: from schemailedgegx04.ci.com ([172.16.130.170]) by schemailmta04.ci.com (InterMail vM.6.01.04.00 201-2131-118-20041027) with ESMTP id <20100629154237.OZBY15102.schemailmta04.ci.com@schemailedgegx04.ci.com> for ; Tue, 29 Jun 2010 10:42:37 -0500 Received: from blah.com ([1.1.1.1]) by schemailedgegx04.ci.com (InterMail vG.1.02.00.04 201-2136-104-104-20050323) with ESMTP id <20100629154225.WEFB17009.schemailedgegx04.ci.com@blah.com> for ; Tue, 29 Jun 2010 10:42:25 -0500 Received: from blah.com (snooki [10.12.126.68]) by blah.com (Postfix) with ESMTP id 4BDAE19F546 for ; Tue, 29 Jun 2010 15:42:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=blah.com; s=2010; t=1277826145; bh=wC3hHAhQgApcTmwQsi2F4OJf40rbyIek/WwIuzSc3V M=; h=Date:From:Reply-To:To:Message-ID:Subject:Mime-Version: Content-Type:Content-Transfer-Encoding:List-Unsubscribe; b=aw+Bhd8 t1goZUXWBAHSrHaM1IdqhkXqF5WVMwGRYcnya4FHNw05XfpB3TTpTFda13DfhtziFRk zHSfiNbMapv7Vz+D3A/9NHg5nKahSMosZVTa0BfajYWNd1aY8JUWUlxdQHxQQ4ygCBj /MndJohtSm6K3gsqdIv88DNXdBGBEw= Date: Tue, 29 Jun 2010 15:42:25 +0000 From: HomeRun Reply-To: HomeRun To: u@ci.com Message-ID: <4c2a146147ac8_61ff157c4ec1652df@s.h.c.mail> Subject: Your Friend F M wants you to join HomeRun Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_4c2a146141756_61ff157c4ec1649a8"; charset=UTF-8 Content-Transfer-Encoding: 7bit List-Unsubscribe: ----==_mimepart_4c2a146141756_61ff157c4ec1649a8 Date: Tue, 29 Jun 2010 15:42:25 +0000 Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Content-ID: <4c2a146145451_61ff157c4ec165040@s.h.c.mail> SGV5IGNpbmd1bGFybWVmYXJpZGEsCgpGYXJpZGEgTWFsaWsgdGhpbmtzIHlv dSBzaG91bGQgYXBwbHkgdG8gam9pbiBIb21lUnVuLCB5b3VyIHBsYWNlIGZv dC4sIFNhbiBGcmFuY2lzY28sIENBLCA5NDEyMywgVVNB ----==_mimepart_4c2a146141756_61ff157c4ec1649a8 Date: Tue, 29 Jun 2010 15:42:25 +0000 Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 Content-ID: <4c2a1461468ae_61ff157c4ec165194@s.h.c.mail> PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPkhvbWVSdW4g LSBZb3VyIEZyaWVuZCBGYXJpZGEgTWFsaWsgd2FudHMgeW91IHRvIGpvaW4g cnVuLmNvbS9vLjQ1YjBkMzgwLmdpZicgd2lkdGg9JzEnIC8+CjwvdGQ+Cjwv dHI+CjwvdGFibGU+CjwvdGQ+CjwvdHI+CjwvdGFibGU+CjwvZGl2Pgo8L2Jv ZHk+CjwvaHRtbD4K ----==_mimepart_4c2a146141756_61ff157c4ec1649a8-- --===========================_ _= 6078796(15102)1277826164-- Comments mail-2.6.4/spec/fixtures/emails/multipart_report_emails/report_422.eml000066400000000000000000000100101267453234600260750ustar00rootroot00000000000000Return-Path: Received: from acomputer ([unix socket]) by imap01.sssssss.net (Cyrus) with LMTPA; Wed, 16 Jan 2008 13:51:42 -0800 X-Sieve: CMU Sieve 2.2 Received: from smtp.sssssss.org (unknown [198.0.0.92]) by imap01.sssssss.net (Postfix) with ESMTP id BFE6477FAE for ; Wed, 16 Jan 2008 13:51:40 -0800 (PST) Received: from ns1.sssssss.net.au (ns1.sssssss.net.au [202.0.0.246]) by smtp.sssssss.org (Postfix) with ESMTP id 96E5C6C6830 for ; Wed, 16 Jan 2008 11:08:14 -0800 (PST) Received: from ns1.sssssss.net.au (unknown [127.0.0.1]) by ns1.sssssss.net.au (Postfix) with ESMTP id E1BCEF227 for ; Thu, 17 Jan 2008 03:40:53 +1100 (EST) Received: from ns1.sssssss.net.au (ns1.sssssss.net.au [202.0.0.246]) by localhost (FormatMessage) with SMTP id ceaa681bbcb6c7f6 for ; Thu, 17 Jan 2008 03:40:53 +1100 (EST) Received: from mail11.tppppp.com.au (unknown [203.0.0.161]) by ns1.sssssss.net.au (Postfix) with ESMTP id 7F2D2F225 for ; Thu, 17 Jan 2008 03:40:52 +1100 (EST) Received: from localhost (localhost) by mail11.tppppp.com.au (envelope-from MAILER-DAEMON) (8.14.2/8.14.2) id m0GFZ1c3009410; Thu, 17 Jan 2008 03:40:52 +1100 Date: Thu, 17 Jan 2008 03:40:52 +1100 From: Mail Delivery Subsystem Message-Id: <200801161640.m0GFZ1c3009410@mail11.ttttt.com.au> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="m0GFZ1c3009410.1200501652/mail11.ttttt.com.au" Subject: Warning: could not send message for past 8 hours Auto-Submitted: auto-generated (warning-timeout) Resent-Date: Thu, 17 Jan 2008 03:40:53 +1100 (EST) Resent-From: Resent-To: Resent-Message-ID: X-Spam-Status: No --m0GFZ1c3009410.1200501652/mail11.ttttt.com.au Content-Type: text/plain ********************************************** ** THIS IS A WARNING MESSAGE ONLY ** ** YOU DO NOT NEED TO RESEND YOUR MESSAGE ** ********************************************** The original message was received at Wed, 16 Jan 2008 19:38:07 +1100 from 60-0-0-61.static.tppppp.com.au [60.0.0.61] This message was generated by mail11.tppppp.com.au ----- Transcript of session follows ----- .... while talking to mail.oooooooo.com.au.: >>> DATA <<< 452 4.2.2 ... Mailbox full ... Deferred: 452 4.2.2 ... Mailbox full <<< 503 5.0.0 Need RCPT (recipient) Warning: message still undelivered after 8 hours Will keep trying until message is 5 days old -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. --m0GFZ1c3009410.1200501652/mail11.ttttt.com.au Content-Type: message/delivery-status Reporting-MTA: dns; mail11.ttttt.com.au Arrival-Date: Wed, 16 Jan 2008 19:38:07 +1100 Final-Recipient: RFC822; fraser@oooooooo.com.au Action: delayed Status: 4.2.2 Remote-MTA: DNS; mail.oooooooo.com.au Diagnostic-Code: SMTP; 452 4.2.2 ... Mailbox full Last-Attempt-Date: Thu, 17 Jan 2008 03:40:52 +1100 --m0GFZ1c3009410.1200501652/mail11.ttttt.com.au Content-Type: text/rfc822-headers Return-Path: Received: from k1s2yo86 (60-0-0-61.static.tppppp.com.au [60.0.0.61]) by mail11.tppppp.com.au (envelope-from jennifer@sss.sssssss.net.au) (8.14.2/8.14.2) with ESMTP id m0G8c0fR020461 for ; Wed, 16 Jan 2008 19:38:07 +1100 Date: Wed, 16 Jan 2008 19:38:07 +1100 From: Sydney Message-ID: <15655788.13.1200472642578.JavaMail.Administrator@mail.ttttt.com.au> Subject: Wanted MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_12_28168925.1200472642578" X-Virus-Scanned: ClamAV 0.91.2/5484/Wed Jan 16 06:31:27 2008 on mail11.tppppp.com.au X-Virus-Status: Clean --m0GFZ1c3009410.1200501652/mail11.ttttt.com.au-- mail-2.6.4/spec/fixtures/emails/multipart_report_emails/report_530.eml000066400000000000000000000100471267453234600261070ustar00rootroot00000000000000Return-Path: Received: from acomputer ([unix socket]) by imap01.sssss.net (Cyrus) with LMTPA; Sun, 23 Dec 2007 15:04:04 -0800 X-Sieve: CMU Sieve 2.2 Received: from smtp.sssss.org (unknown [198.0.0.92]) by imap01.sssss.net (Postfix) with ESMTP id E434877FB0 for ; Sun, 23 Dec 2007 15:04:03 -0800 (PST) Received: from mail12.tttttt.com.au (mail12.tttttt.com.au [203.0.0.162]) by smtp.sssss.org (Postfix) with ESMTP id 53313B42B7 for ; Sun, 23 Dec 2007 15:03:54 -0800 (PST) Received: from localhost (localhost) by mail12.tttttt.com.au (envelope-from MAILER-DAEMON) (8.14.2/8.14.2) id lBNN3rDp003436; Mon, 24 Dec 2007 10:03:53 +1100 Date: Mon, 24 Dec 2007 10:03:53 +1100 From: Mail Delivery Subsystem Message-Id: <200712232303.lBNN3rDp003436@mail12.rrrr.com.au> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="lBNN3rDp003436.1198451033/mail12.rrrr.com.au" Subject: Returned mail: see transcript for details Auto-Submitted: auto-generated (failure) X-Spam-Status: No This is a MIME-encapsulated message --lBNN3rDp003436.1198451033/mail12.rrrr.com.au The original message was received at Mon, 24 Dec 2007 10:03:47 +1100 from 60-0-0-146.static.tttttt.com.au [60.0.0.146] This message was generated by mail12.tttttt.com.au ----- The following addresses had permanent fatal errors ----- (reason: 553 5.3.0 ... Unknown E-Mail Address) ----- Transcript of session follows ----- ... while talking to mail.zzzzzz.com.: >>> DATA <<< 553 5.3.0 ... Unknown E-Mail Address 550 5.1.1 ... User unknown <<< 503 5.0.0 Need RCPT (recipient) -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. --lBNN3rDp003436.1198451033/mail12.rrrr.com.au Content-Type: message/delivery-status Reporting-MTA: dns; mail12.rrrr.com.au Received-From-MTA: DNS; 60-0-0-146.static.tttttt.com.au Arrival-Date: Mon, 24 Dec 2007 10:03:47 +1100 Final-Recipient: RFC822; edwin@zzzzzzz.com Action: failed Status: 5.3.0 Remote-MTA: DNS; mail.zzzzzz.com Diagnostic-Code: SMTP; 553 5.3.0 ... Unknown E-Mail Address Last-Attempt-Date: Mon, 24 Dec 2007 10:03:53 +1100 --lBNN3rDp003436.1198451033/mail12.rrrr.com.au Content-Type: text/rfc822-headers Return-Path: Received: from [192.168.0.3] (60-0-0-146.static.tttttt.com.au [60.0.0.146]) by mail12.tttttt.com.au (envelope-from mikel@sssss.net) (8.14.2/8.14.2) with ESMTP id lBNN3jDq002941 for ; Mon, 24 Dec 2007 10:03:47 +1100 Resent-Date: Mon, 24 Dec 2007 10:03:47 +1100 Date: Mon, 24 Dec 2007 10:03:47 +1100 Resent-Message-Id: <200712232303.lBNN3jDq002941@mail12.rrrr.com.au> Message-Id: <200712232303.lBNN3jDq002941@mail12.rrrr.com.au> Mime-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary=80874BE0-2DFF-4BCB-8AA1-A00E17ACA2EA Received: from murder ([unix socket]) by imap01.sssss.net (Cyrus v2.2.12-Invoca-RPM-2.2.12-6.fc4) with LMTPA; Sun, 23 Dec 2007 12:59:14 -0800 Received: from smtp.sssss.org (unknown [198.0.0.92]) by imap01.sssss.net (Postfix) with ESMTP id 0AC9F77EDD for ; Sun, 23 Dec 2007 12:59:14 -0800 (PST) Received: from ns1.sssss.net.au (ns1.sssss.net.au [202.0.0.246]) by smtp.sssss.org (Postfix) with ESMTP id 6FC83B42B4 for ; Sun, 23 Dec 2007 12:59:09 -0800 (PST) Received: from unicom (unknown [85.0.0.121]) by ns1.sssss.net.au (Postfix) with ESMTP id 85ED5F1F7 for ; Mon, 24 Dec 2007 07:59:02 +1100 (EST) Received: from [85.0.0.121] by mail.zzzzzz.com; , 23 Dec 2007 12:57:34 -0800 X-Mailer: Apple Mail (2.753) From: postoffice Subject: Returned mail: User unknown Resent-From: mikel@sssss.net Auto-Submitted: auto-generated (failure) To: "Merrill" X-Virus-Scanned: ClamAV 0.91.2/5229/Mon Dec 24 07:36:55 2007 on mail12.tttttt.com.au X-Virus-Status: Clean --lBNN3rDp003436.1198451033/mail12.rrrr.com.au-- mail-2.6.4/spec/fixtures/emails/plain_emails/000077500000000000000000000000001267453234600211735ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/plain_emails/basic_email.eml000066400000000000000000000027571267453234600241350ustar00rootroot00000000000000Delivered-To: raasdnil@gmail.com Received: by 10.140.178.13 with SMTP id a13cs354079rvf; Fri, 21 Nov 2008 20:05:05 -0800 (PST) Received: by 10.151.44.15 with SMTP id w15mr2254748ybj.98.1227326704711; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Return-Path: Received: from mail11.tpgi.com.au (mail11.tpgi.com.au [203.12.160.161]) by mx.google.com with ESMTP id 10si5117885gxk.81.2008.11.21.20.05.03; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Received-SPF: neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) client-ip=203.12.160.161; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) smtp.mail=test@lindsaar.net X-TPG-Junk-Status: Message not scanned X-TPG-Antivirus: Passed Received: from [192.0.0.253] (60-241-138-146.static.tpgi.com.au [60.0.0.146]) by mail11.tpgi.com.au (envelope-from test@lindsaar.net) (8.14.3/8.14.3) with ESMTP id mAM44xew022221 for ; Sat, 22 Nov 2008 15:05:01 +1100 Message-Id: <6B7EC235-5B17-4CA8-B2B8-39290DEB43A3@test.lindsaar.net> From: Mikel Lindsaar To: Mikel Lindsaar Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v929.2) Subject: Testing 123 Date: Sat, 22 Nov 2008 15:04:59 +1100 X-Mailer: Apple Mail (2.929.2) Plain email. Hope it works well! Mikel mail-2.6.4/spec/fixtures/emails/plain_emails/mix_caps_content_type.eml000066400000000000000000000005251267453234600262720ustar00rootroot00000000000000From joe@company.com Fri Feb 19 08:41:30 2010 From: Big Bug bb@bug.com To: rubymail@ruby-lang.org Subject: undef method parameter bug Date: Fri, 19 Feb 2010 10:08:29 +0300 MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Message-Id: 201002191008.30117.foo.bar@company.com foo bar mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email.eml000066400000000000000000000010401267453234600236250ustar00rootroot00000000000000From jamis_buck@byu.edu Mon May 2 16:07:05 2005 Mime-Version: 1.0 (Apple Message framework v622) Content-Transfer-Encoding: base64 Message-Id: Content-Type: text/plain; charset=EUC-KR; format=flowed To: willard15georgina@jamis.backpackit.com From: Jamis Buck Subject: =?EUC-KR?Q?NOTE:_=C7=D1=B1=B9=B8=BB=B7=CE_=C7=CF=B4=C2_=B0=CD?= Date: Mon, 2 May 2005 16:07:05 -0600 tOu6zrrQwMcguLbC+bChwfa3ziwgv+y4rrTCIMfPs6q01MC7ILnPvcC0z7TZLg0KDQrBpiDAzLin wLogSmFtaXPA1LTPtNku mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email10.eml000066400000000000000000000016741267453234600240030ustar00rootroot00000000000000Return-Path: Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id C1B953B4CB6 for ; Tue, 10 May 2005 15:27:05 -0500 Received: from SMS-GTYxxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id ca for ; Tue, 10 May 2005 15:27:04 -0500 Received: from xxx.xxxx.xxx by SMS-GTYxxx.xxxx.xxx with ESMTP id j4AKR3r23323 for ; Tue, 10 May 2005 15:27:03 -0500 Date: Tue, 10 May 2005 15:27:03 -0500 From: xxx@xxxx.xxx Sender: xxx@xxxx.xxx To: xxxxxxxxxxx@xxxx.xxxx.xxx Message-Id: X-Original-To: xxxxxxxxxxx@xxxx.xxxx.xxx Delivered-To: xxx@xxxx.xxx Importance: normal Content-Type: text/plain; charset=X-UNKNOWN Test test. Hi. Waving. m ---------------------------------------------------------------- Sent via Bell Mobility's Text Messaging service. Envoyé par le service de messagerie texte de Bell Mobilité. ---------------------------------------------------------------- mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email5.eml000066400000000000000000000016201267453234600237160ustar00rootroot00000000000000Return-Path: Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id C1B953B4CB6 for ; Tue, 10 May 2005 15:27:05 -0500 Received: from SMS-GTYxxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id ca for ; Tue, 10 May 2005 15:27:04 -0500 Received: from xxx.xxxx.xxx by SMS-GTYxxx.xxxx.xxx with ESMTP id j4AKR3r23323 for ; Tue, 10 May 2005 15:27:03 -0500 Date: Tue, 10 May 2005 15:27:03 -0500 From: xxx@xxxx.xxx Sender: xxx@xxxx.xxx To: xxxxxxxxxxx@xxxx.xxxx.xxx Message-Id: X-Original-To: xxxxxxxxxxx@xxxx.xxxx.xxx Delivered-To: xxx@xxxx.xxx Importance: normal Test test. Hi. Waving. m ---------------------------------------------------------------- Sent via Bell Mobility's Text Messaging service. Envoyé par le service de messagerie texte de Bell Mobilité. ---------------------------------------------------------------- mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email6.eml000066400000000000000000000016731267453234600237270ustar00rootroot00000000000000Return-Path: Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id C1B953B4CB6 for ; Tue, 10 May 2005 15:27:05 -0500 Received: from SMS-GTYxxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id ca for ; Tue, 10 May 2005 15:27:04 -0500 Received: from xxx.xxxx.xxx by SMS-GTYxxx.xxxx.xxx with ESMTP id j4AKR3r23323 for ; Tue, 10 May 2005 15:27:03 -0500 Date: Tue, 10 May 2005 15:27:03 -0500 From: xxx@xxxx.xxx Sender: xxx@xxxx.xxx To: xxxxxxxxxxx@xxxx.xxxx.xxx Message-Id: X-Original-To: xxxxxxxxxxx@xxxx.xxxx.xxx Delivered-To: xxx@xxxx.xxx Importance: normal Content-Type: text/plain; charset=us-ascii Test test. Hi. Waving. m ---------------------------------------------------------------- Sent via Bell Mobility's Text Messaging service. Envoyé par le service de messagerie texte de Bell Mobilité. ---------------------------------------------------------------- mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email8.eml000066400000000000000000000035101267453234600237210ustar00rootroot00000000000000From xxxxxxxxx.xxxxxxx@gmail.com Sun May 8 19:07:09 2005 Return-Path: Message-ID: Date: Sun, 8 May 2005 14:09:11 -0500 From: xxxxxxxxx xxxxxxx Reply-To: xxxxxxxxx xxxxxxx To: xxxxx xxxx Subject: Fwd: Signed email causes file attachments In-Reply-To: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5028_7368284.1115579351471" References: ------=_Part_5028_7368284.1115579351471 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline We should not include these files or vcards as attachments. ---------- Forwarded message ---------- From: xxxxx xxxxxx Date: May 8, 2005 1:17 PM Subject: Signed email causes file attachments To: xxxxxxx@xxxxxxxxxx.com Hi, Test attachments oddly encoded with japanese charset. ------=_Part_5028_7368284.1115579351471 Content-Type: application/octet-stream; name*=iso-2022-jp'ja'01%20Quien%20Te%20Dij%8aat.%20Pitbull.mp3 Content-Transfer-Encoding: base64 Content-Disposition: attachment MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGFDCCAs0w ggI2oAMCAQICAw5c+TANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0EwHhcNMDUwMzI5MDkzOTEwWhcNMDYwMzI5MDkzOTEwWjBCMR8wHQYDVQQD ExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMR8wHQYJKoZIhvcNAQkBFhBzbWhhdW5jaEBtYWMuY29t MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn90dPsYS3LjfMY211OSYrDQLzwNYPlAL 7+/0XA+kdy8/rRnyEHFGwhNCDmg0B6pxC7z3xxJD/8GfCd+IYUUNUQV5m9MkxfP9pTVXZVIYLaBw ------=_Part_5028_7368284.1115579351471-- mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_bad_time.eml000066400000000000000000000044211267453234600254570ustar00rootroot00000000000000Return-Path: Received: from murder ([unix socket]) by imap1.AAAAAAAAA.net (Cyrus v2.2.12-Invoca-RPM-2.2.12-6.fc4) with LMTPA; Mon, 30 Jun 2008 02:34:00 -0700 X-Sieve: CMU Sieve 2.2 Received: from smtp2.BBBBBBBBBBB.org (unknown [10.254.15.30]) by imap1.AAAAAAAAA.net (Postfix) with ESMTP id 9444077D75 for ; Mon, 30 Jun 2008 02:34:00 -0700 (PDT) Received: from localhost (unknown [92.47.238.91]) by smtp2.BBBBBBBBBBB.org (Postfix) with ESMTP id 44D0110011 for ; Mon, 9 Jun 2008 12:24:02 -0700 (PDT) Message-ID: <86a2019dbec6$caa86cc0$390b0485@auracom.net> From: "=?windows-1251?B?wPLo6u7iYQ==?=" To: Subject: [0]: XXXXXXX XXXXX XXXXX ! Date: Mon, 30 Jun 3609 15:33:50 +0600 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=----=_NextPart_000_0023_08_E8CD50F3.4EF2F754 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-CSI-MailScanner-Information: Please contact the ISP for more information X-CSI-MailScanner: Found to be clean X-CSI-MailScanner-SpamCheck: spam, ORDB-RBL X-CSI-MailScanner-From: yusuf75thu@auracom.net X-Spam-Status: Yes This is a multi-part message in MIME format. ------=_NextPart_000_0023_08_E8CD50F3.4EF2F754 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: quoted-printable Filter2: This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. ------=_NextPart_000_0023_08_E8CD50F3.4EF2F754 Content-Type: text/html; charset="windows-1251" Content-Transfer-Encoding: quoted-printable
    This message has been scanned for viruses and
    dangerous content by MailScanner, and is
    believed to be clean. ------=_NextPart_000_0023_08_E8CD50F3.4EF2F754-- mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_double_at_in_header.eml000066400000000000000000000010421267453234600276430ustar00rootroot00000000000000From jamis_buck@byu.edu Mon May 2 16:07:05 2005 Mime-Version: 1.0 (Apple Message framework v622) Content-Transfer-Encoding: base64 Message-Id: Content-Type: text/plain; charset=EUC-KR; format=flowed To: willard15georgina@jamis.backpackit.com From: Jamis Buck Subject: =?EUC-KR?Q?NOTE:_=C7=D1=B1=B9=B8=BB=B7=CE_=C7=CF=B4=C2_=B0=CD?= Date: Mon, 2 May 2005 16:07:05 -0600 tOu6zrrQwMcguLbC+bChwfa3ziwgv+y4rrTCIMfPs6q01MC7ILnPvcC0z7TZLg0KDQrBpiDAzLin wLogSmFtaXPA1LTPtNku mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_incorrect_header.eml000066400000000000000000000016021267453234600272110ustar00rootroot00000000000000Received: from xxx.xxx.xxx ([xxx.xxx.xxx.xxx] verified) by xxx.com (CommuniGate Pro SMTP 4.2.8) with SMTP id 2532598 for xxx@xxx.com; Wed, 23 Feb 2005 17:51:49 -0500 Received-SPF: softfail receiver=xxx.com; client-ip=xxx.xxx.xxx.xxx; envelope-from=xxx@xxx.xxx quite Delivered-To: xxx@xxx.xxx Received: by xxx.xxx.xxx (Wostfix, from userid xxx) id 0F87F333; Wed, 23 Feb 2005 16:16:17 -0600 Date: Wed, 23 Feb 2005 18:20:17 -0400 From: "xxx xxx" Message-ID: <4D6AA7EB.6490534@xxx.xxx> To: xxx@xxx.com Subject: Stop adware/spyware once and for all. X-Scanned-By: MIMEDefang 2.11 (www dot roaringpenguin dot com slash mimedefang) You are infected with: Ad Ware and Spy Ware Get your free scan and removal download now, before it gets any worse. http://xxx.xxx.info?aid=3D13&?stat=3D4327kdzt no more? (you will still be infected) http://xxx.xxx.info/discon/?xxx@xxx.com mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_multiple_from.eml000066400000000000000000000017361267453234600265770ustar00rootroot00000000000000Delivered-To: tim@powerupdev.com Return-Path: To: tim@powerupdev.com concierge@powerupdev.com From: tim@powerupdev.com concierge@powerupdev.com Subject: /home/svn/public/minebox revision 214 Reply-to: tim@powerupdev.com concierge@powerupdev.com Message-Id: <20071022234523.5BD8E86D2@mangaverde.net> Date: Mon, 22 Oct 2007 23:45:23 +0000 (UTC)

    recordkick 2007-10-22 23:45:23 +0000 (Mon, 22 Oct 2007)

    test subversion


    Modified:
    trunk/README
    ===================================================================
    --- trunk/README\t2007-10-22
    23:41:34 UTC (rev 213)
    +++ trunk/README\t2007-10-22 23:45:23 UTC (rev 214)
    @@ -1,5 +1,5 @@
     == Welcome
    to Rails
    -Test
    +Tedst
     Rails is a web-application and persistence framework that includes everything
     needed
    to create database-backed web-applications according to the
     Model-View-Control pattern of separation. This pattern
    splits the view (also
    
    
    
    mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_quoted_with_0d0a.eml000066400000000000000000000011701267453234600270510ustar00rootroot00000000000000Mime-Version: 1.0 (Apple Message framework v730) Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com> From: foo@example.com Subject: testing Date: Mon, 6 Jun 2005 22:21:22 +0200 To: blah@example.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain A fax has arrived from remote ID ''.=0D=0A-----------------------= -------------------------------------=0D=0ATime: 3/9/2006 3:50:52= PM=0D=0AReceived from remote ID: =0D=0AInbound user ID XXXXXXXXXX, r= outing code XXXXXXXXX=0D=0AResult: (0/352;0/0) Successful Send=0D=0AP= age record: 1 - 1=0D=0AElapsed time: 00:58 on channel 11=0D=0A mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_reply.eml000066400000000000000000000026501267453234600250500ustar00rootroot00000000000000Return-Path: Received: from me ([unix socket]) by xxxxx1.xxxx.net (Cyrus v2.2.12) with LMTPA; Sun, 18 Nov 2007 00:56:33 -0800 Received: from smtp.xxxx.org (unknown [127.0.0.1]) by xxxxx1.xxxx.net (Postfix) with ESMTP id F128477EB5; Sun, 18 Nov 2007 00:56:32 -0800 (PST) Received: from omta02sl.mx.bigpond.com (omta02sl.mx.bigpond.com [144.140.93.154]) by smtp.xxxx.org (Postfix) with ESMTP id 2D567ACC08; Sun, 18 Nov 2007 00:56:28 -0800 (PST) Received: from oaamta05sl.mx.bigpond.com ([124.183.219.10]) by omta02sl.mx.bigpond.com with ESMTP id <20071118085627.YVPI22254.omta02sl.mx.bigpond.com@oaamta05sl.mx.bigpond.com>; Sun, 18 Nov 2007 08:56:27 +0000 Received: from [10.0.0.1] (really [124.183.219.10]) by oaamta05sl.mx.bigpond.com with ESMTP id <20071118085627.TQWF6995.oaamta05sl.mx.bigpond.com@[10.0.0.1]>; Sun, 18 Nov 2007 08:56:27 +0000 Message-ID: <473FFE27.20003@xxx.org> Date: Sun, 18 Nov 2007 19:56:07 +1100 From: Testing User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mikel Lindsaar Subject: Re: Test reply email References: <473FF3B8.9020707@xxx.org> <348F04F142D69C21-291E56D292BC@xxxx.net> In-Reply-To: <348F04F142D69C21-291E56D292BC@xxxx.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Message body mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_simple.eml000066400000000000000000000007041267453234600252040ustar00rootroot00000000000000From mike@nowhere.com Return-Path: Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id <20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for ; Sun, 21 Oct 2007 19:38:20 +1000 Date: Sun, 21 Oct 2007 19:38:13 +1000 From: Mikel Lindsaar To: Mikel Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a> Subject: Testing outlook Hello Mikel mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_string_in_date_field.eml000066400000000000000000000012661267453234600300530ustar00rootroot00000000000000From mikel@me.com Mon May 2 16:07:05 2005 Mime-Version: 1.0 (Apple Message framework v622) Received: from jsj1wlrmd001.webex.com (by jsj1wlrmd001.webex.com (8.12.10/8.12.11) with ESMTP id m8MKKPTs022429 for ; Mon, 22 Sep 2008 20:20:25 GMT Content-Transfer-Encoding: base64 Message-Id: Content-Type: text/plain; charset=EUC-KR; format=flowed To: bob@bob.com From: mikel@me.com Subject: =?EUC-KR?Q?NOTE:_=C7=D1=B1=B9=B8=BB=B7=CE_=C7=CF=B4=C2_=B0=CD?= Date: Sat, 20 Sep 2008 20:04:30 +0300 (ùòåï ÷éõ éøåùìéí) tOu6zrrQwMcguLbC+bChwfa3ziwgv+y4rrTCIMfPs6q01MC7ILnPvcC0z7TZLg0KDQrBpiDAzLin wLogSmFtaXPA1LTPtNku mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_trailing_dot.eml000066400000000000000000000023171267453234600263740ustar00rootroot00000000000000Delivered-To: xxx@xxx.com Received: by 10.67.31.8 with SMTP id i8cs1195ugj; Mon, 22 Sep 2008 13:45:18 -0700 (PDT) Received: by 10.100.207.5 with SMTP id e5mr3483815ang.104.1222110393505; Mon, 22 Sep 2008 12:06:33 -0700 (PDT) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id c2si899474ana.10.2008.09.22.12.06.28; Mon, 22 Sep 2008 12:06:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of noreply@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of noreply@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=noreply@rubyforge.org Received: by rubyforge.org (Postfix, from userid 502) id 8FB1518581AC; Mon, 22 Sep 2008 15:06:28 -0400 (EDT) To: noreply@rubyforge.org From: Sandy M. Subject: [skynet-help][60666] How are intermediate files handled in SkyNet? Content-type: text/plain; charset=UTF-8 Message-Id: <20080922190628.8FB1518581AC@rubyforge.org> Date: Mon, 22 Sep 2008 15:06:28 -0400 (EDT) Testing, testing, 123.mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_with_at_display_name.eml000066400000000000000000000030411267453234600300740ustar00rootroot00000000000000Delivered-To: raasdnil@gmail.com Received: by 10.140.178.13 with SMTP id a13cs354079rvf; Fri, 21 Nov 2008 20:05:05 -0800 (PST) Received: by 10.151.44.15 with SMTP id w15mr2254748ybj.98.1227326704711; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Return-Path: Received: from mail11.tpgi.com.au (mail11.tpgi.com.au [203.12.160.161]) by mx.google.com with ESMTP id 10si5117885gxk.81.2008.11.21.20.05.03; Fri, 21 Nov 2008 20:05:04 -0800 (PST) Received-SPF: neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) client-ip=203.12.160.161; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.12.160.161 is neither permitted nor denied by domain of test@lindsaar.net) smtp.mail=test@lindsaar.net X-TPG-Junk-Status: Message not scanned X-TPG-Antivirus: Passed Received: from [192.0.0.253] (60-241-138-146.static.tpgi.com.au [60.0.0.146]) by mail11.tpgi.com.au (envelope-from test@lindsaar.net) (8.14.3/8.14.3) with ESMTP id mAM44xew022221 for ; Sat, 22 Nov 2008 15:05:01 +1100 Message-Id: <6B7EC235-5B17-4CA8-B2B8-39290DEB43A3@test.lindsaar.net> From: Mikel Lindsaar , jack@lindsar.com To: smith@gmail.com, Mikel@Lindsaar , tom@gmail.com Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v929.2) Subject: Testing 123 Date: Sat, 22 Nov 2008 15:04:59 +1100 X-Mailer: Apple Mail (2.929.2) Plain email. Hope it works well! Mikel mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_with_bad_date.eml000066400000000000000000000041541267453234600264740ustar00rootroot00000000000000Return-Path: X-Original-To: external@xxx.xxxxxxxx.xxx.xx Delivered-To: external@xxx.xxxxxxxx.xxx.xx Received: from server.xxx.xxxxxxxx.xxx.xx (localhost.xxxxxxxx.xxx.xx [127.0.0.1]) by server.xxx.xxxxxxxx.xxx.xx (Postfix) with ESMTP id 0173828456 for ; Mon, 5 Nov 2007 20:17:37 +1100 (EST) Received: from server.xxx.xxxxxxxx.xxx.xx (server.xxx.xxxxxxxx.xxx.xx [10.130.1.250]) by localhost (FormatMessage) with SMTP id d7be4d19ed6d330c for ; Mon, 05 Nov 2007 20:17:37 +1100 (EST) Received: from server.sydney.xxxxxxxx.xxx.xx (unknown [10.130.2.6]) by server.xxx.xxxxxxxx.xxx.xx (Postfix) with ESMTP id BB00328442 for ; Mon, 5 Nov 2007 20:17:37 +1100 (EST) Received: from dircomm (unknown [10.130.2.8]) by server.sydney.xxxxxxxx.xxx.xx (Postfix) with ESMTP id 20A692841F for ; Mon, 5 Nov 2007 20:18:24 +1100 (EST) X-Mailbox-Line: From subventive@vodtravel.com Message-ID: <000001c81a67$a4450700$0100007f@localhost> From: "Darrell Shaw" To: Subject: Microsoft Vlsta & Office2007, Just released for 79$ Save 1599.95$ 0ff Retai| Date: Pn, 29 paX 2007 21:13:00 +0100 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.3416 Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.150 X-CSI-TMailScanner-Information: Please contact the ISP for more information X-CSI-TMailScanner: Found to be clean X-CSI-TMailScanner-SpamCheck: not spam, SpamAssassin (score=1.87, required 4, autolearn=disabled, INVALID_DATE 0.23, RAZOR2_CF_RANGE_51_100 1.49, RAZOR2_CHECK 0.15) X-CSI-TMailScanner-SpamScore: s X-TMailScanner-From: subventive@vodtravel.com Resent-Date: Mon, 05 Nov 2007 20:17:37 +1100 (EST) Resent-From: Resent-To: Resent-Message-ID: X-UID: 4702 Status: RO hotnewsoft . com mail-2.6.4/spec/fixtures/emails/plain_emails/raw_email_with_partially_quoted_subject.eml000066400000000000000000000010231267453234600320420ustar00rootroot00000000000000From jamis@37signals.com Mon May 2 16:07:05 2005 Mime-Version: 1.0 (Apple Message framework v622) Content-Transfer-Encoding: base64 Message-Id: Content-Type: text/plain; charset=EUC-KR; format=flowed To: jamis@37signals.com From: Jamis Buck Subject: Re: Test: =?UTF-8?B?Iua8ouWtlyI=?= mid =?UTF-8?B?Iua8ouWtlyI=?= tail Date: Mon, 2 May 2005 16:07:05 -0600 tOu6zrrQwMcguLbC+bChwfa3ziwgv+y4rrTCIMfPs6q01MC7ILnPvcC0z7TZLg0KDQrBpiDAzLin wLogSmFtaXPA1LTPtNku mail-2.6.4/spec/fixtures/emails/rfc2822/000077500000000000000000000000001267453234600176265ustar00rootroot00000000000000mail-2.6.4/spec/fixtures/emails/rfc2822/example01.eml000066400000000000000000000003501267453234600221170ustar00rootroot00000000000000From: John Doe To: Mary Smith Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example02.eml000066400000000000000000000004301267453234600221170ustar00rootroot00000000000000From: John Doe Sender: Michael Jones To: Mary Smith Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example03.eml000066400000000000000000000004351267453234600221250ustar00rootroot00000000000000From: "Joe Q. Public" To: Mary Smith , jdoe@example.org, Who? Cc: , "Giant; \"Big\" Box" Date: Tue, 1 Jul 2003 10:52:37 +0200 Message-ID: <5678.21-Nov-1997@example.com> Hi everyone. mail-2.6.4/spec/fixtures/emails/rfc2822/example04.eml000066400000000000000000000003461267453234600221270ustar00rootroot00000000000000From: Pete To: A Group:Chris Jones ,joe@where.test,John ; Cc: Undisclosed recipients:; Date: Thu, 13 Feb 1969 23:32:54 -0330 Message-ID: Testing. mail-2.6.4/spec/fixtures/emails/rfc2822/example05.eml000066400000000000000000000003501267453234600221230ustar00rootroot00000000000000From: John Doe To: Mary Smith Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example06.eml000066400000000000000000000005421267453234600221270ustar00rootroot00000000000000From: Mary Smith To: John Doe Reply-To: "Mary Smith: Personal Account" Subject: Re: Saying Hello Date: Fri, 21 Nov 1997 10:01:10 -0600 Message-ID: <3456@example.net> In-Reply-To: <1234@local.machine.example> References: <1234@local.machine.example> This is a reply to your hello. mail-2.6.4/spec/fixtures/emails/rfc2822/example07.eml000066400000000000000000000005151267453234600221300ustar00rootroot00000000000000To: "Mary Smith: Personal Account" From: John Doe Subject: Re: Saying Hello Date: Fri, 21 Nov 1997 11:00:00 -0600 Message-ID: In-Reply-To: <3456@example.net> References: <1234@local.machine.example> <3456@example.net> This is a reply to your reply. mail-2.6.4/spec/fixtures/emails/rfc2822/example08.eml000066400000000000000000000006311267453234600221300ustar00rootroot00000000000000Resent-From: Mary Smith Resent-To: Jane Brown Resent-Date: Mon, 24 Nov 1997 14:22:01 -0800 Resent-Message-ID: <78910@example.net> From: John Doe To: Mary Smith Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example09.eml000066400000000000000000000006771267453234600221430ustar00rootroot00000000000000Received: from x.y.test by example.net via TCP with ESMTP id ABC12345 for ; 21 Nov 1997 10:05:43 -0600 Received: from machine.example by x.y.test; 21 Nov 1997 10:01:22 -0600 From: John Doe To: Mary Smith Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example10.eml000066400000000000000000000007321267453234600221230ustar00rootroot00000000000000From: Pete(A wonderful \) chap) To:A Group(Some people) :Chris Jones , joe@example.org, John (my dear friend); (the end of the group) Cc:(Empty list)(start)Undisclosed recipients :(nobody(that I know)) ; Date: Thu, 13 Feb 1969 23:32 -0330 (Newfoundland Time) Message-ID: Testing. mail-2.6.4/spec/fixtures/emails/rfc2822/example11.eml000066400000000000000000000003341267453234600221220ustar00rootroot00000000000000From: Joe Q. Public To: Mary Smith <@machine.tld:mary@example.net>, , jdoe@test . example Date: Tue, 1 Jul 2003 10:52:37 +0200 Message-ID: <5678.21-Nov-1997@example.com> Hi everyone. mail-2.6.4/spec/fixtures/emails/rfc2822/example12.eml000066400000000000000000000003371267453234600221260ustar00rootroot00000000000000From: John Doe To: Mary Smith Subject: Saying Hello Date: 21 Nov 97 09:55:06 GMT Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example13.eml000066400000000000000000000004461267453234600221300ustar00rootroot00000000000000From : John Doe To : Mary Smith __ Subject : Saying Hello Date : Fri, 21 Nov 1997 09(comment): 55 : 06 -0600 Message-ID : <1234 @ local(blah) .machine .example> This is a message just to say hello. So, "Hello". mail-2.6.4/spec/fixtures/emails/rfc2822/example14.eml000066400000000000000000000007261267453234600221320ustar00rootroot00000000000000From test@example.com Mon Aug 22 09:45:15 2011 Date: Fri, 19 Aug 2011 10:47:17 +0900 From: Atsushi Yoshida Reply-To: rudeboyjet@gmail.com Subject: Re: TEST =?ISO-2022-JP?B?GyRCJUYlOSVIGyhC?= =?ISO-2022-JP?B?GyRCJUYlOSVIGyhC?= To: rudeboyjet@gmail.com Message-Id: <0CC5E11ED2C1D@example.com> In-Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Hello mail-2.6.4/spec/fixtures/emails/sample_output_multipart000066400000000000000000000000001267453234600234510ustar00rootroot00000000000000mail-2.6.4/spec/mail/000077500000000000000000000000001267453234600143355ustar00rootroot00000000000000mail-2.6.4/spec/mail/attachments_list_spec.rb000066400000000000000000000316361267453234600212530ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' def encode_base64(str) Mail::Encodings::Base64.encode(str) end def check_decoded(actual, expected) if RUBY_VERSION >= '1.9' expect(actual.encoding).to eq Encoding::BINARY expect(actual).to eq expected.dup.force_encoding(Encoding::BINARY) else expect(actual).to eq expected end end describe "Attachments" do before(:each) do @mail = Mail.new @test_png = File.open(fixture('attachments', 'test.png'), 'rb', &:read) end describe "from direct content" do it "should work" do @mail.attachments['test.png'] = @test_png expect(@mail.attachments['test.png'].filename).to eq 'test.png' check_decoded(@mail.attachments[0].decoded, @test_png) end it "should work out magically the mime_type" do @mail.attachments['test.png'] = @test_png expect(@mail.attachments[0].mime_type).to eq 'image/png' end it "should assign the filename" do @mail.attachments['test.png'] = @test_png expect(@mail.attachments[0].filename).to eq 'test.png' end it "should assign mime-encoded multibyte filename" do @mail.attachments['てすと.txt'] = File.open(fixture('attachments', 'てすと.txt'), 'rb', &:read) expect(Mail::Utilities.blank?(@mail.attachments)).not_to eq true expect(Mail::Encodings.decode_encode(@mail.attachments[0].filename, :decode)).to eq 'てすと.txt' end end describe "from a supplied Hash" do it "should work" do @mail.attachments['test.png'] = { :content => @test_png } expect(@mail.attachments[0].filename).to eq 'test.png' check_decoded(@mail.attachments[0].decoded, @test_png) end it "should allow you to override the content_type" do @mail.attachments['test.png'] = { :content => @test_png, :content_type => "application/x-gzip" } expect(@mail.attachments[0].content_type).to eq 'application/x-gzip' end it "should allow you to override the mime_type" do @mail.attachments['test.png'] = { :content => @test_png, :mime_type => "application/x-gzip" } expect(@mail.attachments[0].mime_type).to eq 'application/x-gzip' end it "should allow you to override the mime_type" do @mail.attachments['invoice.jpg'] = { :data => "you smiling", :mime_type => "image/x-jpg", :transfer_encoding => "base64" } expect(@mail.attachments[0].mime_type).to eq 'image/x-jpg' end end describe "decoding and encoding" do it "should set its content_transfer_encoding" do @mail.attachments['test.png'] = { :content => @test_png } @mail.ready_to_send! expect(@mail.attachments[0].content_transfer_encoding).to eq 'base64' end it "should encode its body to base64" do @mail.attachments['test.png'] = { :content => @test_png } @mail.ready_to_send! expect(@mail.attachments[0].encoded).to include(encode_base64(@test_png)) end it "should allow you to pass in an encoded attachment with an encoding" do encoded_data = encode_base64(@test_png) @mail.attachments['test.png'] = { :content => encoded_data, :encoding => 'base64' } check_decoded(@mail.attachments[0].decoded, @test_png) end it "should allow you set a mime type and encoding without overriding the encoding" do encoded = encode_base64('') @mail.attachments['test.png'] = { :mime_type => 'text/xml', :content => encoded, :encoding => 'base64' } expect(@mail.attachments[0].content_transfer_encoding).to eq 'base64' check_decoded(@mail.attachments[0].decoded, '') end it "should not allow you to pass in an encoded attachment with an unknown encoding" do base64_encoded_data = encode_base64(@test_png) expect {@mail.attachments['test.png'] = { :content => base64_encoded_data, :encoding => 'weird_encoding' }}.to raise_error(/Do not know how to handle Content Transfer Encoding weird_encoding/) end it "should be able to call read on the attachment to return the decoded data" do @mail.attachments['test.png'] = { :content => @test_png } if RUBY_VERSION >= '1.9' expected = @mail.attachments[0].read.force_encoding(@test_png.encoding) else expected = @mail.attachments[0].read end expect(expected).to eq @test_png end it "should only add one newline between attachment body and boundary" do contents = "I have\ntwo lines with trailing newlines\n\n" @mail.attachments['text.txt'] = { :content => contents} encoded = @mail.encoded regex = /\r\n#{Regexp.escape(contents.gsub(/\n/, "\r\n"))}\r\n--#{@mail.boundary}--\r\n\Z/ expect(encoded).to match regex end end describe "multiple attachments" do it "should allow you to pass in more than one attachment" do mail = Mail.new mail.attachments['test.pdf'] = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) mail.attachments['test.gif'] = File.open(fixture('attachments', 'test.gif'), 'rb', &:read) mail.attachments['test.jpg'] = File.open(fixture('attachments', 'test.jpg'), 'rb', &:read) mail.attachments['test.zip'] = File.open(fixture('attachments', 'test.zip'), 'rb', &:read) expect(mail.attachments[0].filename).to eq 'test.pdf' expect(mail.attachments[1].filename).to eq 'test.gif' expect(mail.attachments[2].filename).to eq 'test.jpg' expect(mail.attachments[3].filename).to eq 'test.zip' end end describe "inline attachments" do it "should set the content_disposition to inline or attachment as appropriate" do mail = Mail.new mail.attachments['test.pdf'] = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) expect(mail.attachments['test.pdf'].content_disposition).to eq 'attachment; filename=test.pdf' mail.attachments.inline['test.png'] = File.open(fixture('attachments', 'test.png'), 'rb', &:read) expect(mail.attachments.inline['test.png'].content_disposition).to eq 'inline; filename=test.png' end it "should return a cid" do mail = Mail.new mail.attachments.inline['test.png'] = @test_png expect(mail.attachments['test.png'].url).to eq "cid:#{mail.attachments['test.png'].cid}" end it "should respond true to inline?" do mail = Mail.new mail.attachments.inline['test.png'] = @test_png expect(mail.attachments['test.png']).to be_inline end end describe "getting the content ID from an attachment" do before(:each) do @mail = Mail.new @mail.attachments['test.gif'] = File.open(fixture('attachments', 'test.gif'), 'rb', &:read) @cid = @mail.attachments['test.gif'].content_id end it "should return a content-id for the attachment on creation if passed inline => true" do expect(@cid).not_to be_nil end it "should return a valid content-id on inline attachments" do expect(Mail::ContentIdField.new(@cid).errors).to be_empty end it "should provide a URL escaped content_id (without brackets) for use inside an email" do @inline = @mail.attachments['test.gif'].cid uri_parser = URI.const_defined?(:Parser) ? URI::Parser.new : URI expect(@inline).to eq uri_parser.escape(@cid.gsub(/^$/, '')) end end describe "setting the content type correctly" do it "should set the content type to multipart/mixed if none given and you add an attachment" do mail = Mail.new mail.attachments['test.pdf'] = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) mail.encoded expect(mail.mime_type).to eq 'multipart/mixed' end it "allows you to set the attachment before the content type" do mail = Mail.new mail.attachments["test.png"] = File.open(fixture('attachments', 'test.png'), 'rb', &:read) mail.body = "Lots of HTML" mail.mime_version = '1.0' mail.content_type = 'text/html; charset=UTF-8' end end describe "should handle filenames with non-7bit characters correctly" do it "should not raise an exception with a filename that contains a non-7bit-character" do filename = "f\u00f6\u00f6.b\u00e4r" if RUBY_VERSION >= '1.9' expect(filename.encoding).to eq Encoding::UTF_8 end mail = Mail.new expect { mail.attachments[filename] = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) }.not_to raise_error end end end describe "reading emails with attachments" do describe "test emails" do it "should find the attachment using content location" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_content_location.eml'))) expect(mail.attachments.length).to eq 1 end it "should find an attachment defined with 'name' and Content-Disposition: attachment" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_content_disposition.eml'))) expect(mail.attachments.length).to eq 1 end it "should use the content-type filename or name over the content-disposition filename" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_content_disposition.eml'))) expect(mail.attachments[0].filename).to eq 'hello.rb' end it "should decode an attachment" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_pdf.eml'))) expect(mail.attachments[0].decoded.length).to eq 1026 end it "should find an attachment that has an encoded name value" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_with_encoded_name.eml'))) expect(mail.attachments.length).to eq 1 result = mail.attachments[0].filename if RUBY_VERSION >= '1.9' expected = "01 Quien Te Dij\212at. Pitbull.mp3".dup.force_encoding(result.encoding) else expected = "01 Quien Te Dij\212at. Pitbull.mp3" end expect(result).to eq expected end it "should find an attachment that has a name not surrounded by quotes" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', "attachment_with_unquoted_name.eml"))) expect(mail.attachments.length).to eq 1 expect(mail.attachments.first.filename).to eq "This is a test.txt" end it "should find attachments inside parts with content-type message/rfc822" do mail = Mail.read(fixture(File.join("emails", "attachment_emails", "attachment_message_rfc822.eml"))) expect(mail.attachments.length).to eq 1 expect(mail.attachments[0].decoded.length).to eq 1026 end it "attach filename decoding (issue 83)" do data = <<-limitMAIL Subject: aaa From: aaa@aaa.com To: bbb@aaa.com Content-Type: multipart/mixed; boundary=0016e64c0af257c3a7048b69e1ac --0016e64c0af257c3a7048b69e1ac Content-Type: multipart/alternative; boundary=0016e64c0af257c3a1048b69e1aa --0016e64c0af257c3a1048b69e1aa Content-Type: text/plain; charset=ISO-8859-1 aaa --0016e64c0af257c3a1048b69e1aa Content-Type: text/html; charset=ISO-8859-1 aaa
    --0016e64c0af257c3a1048b69e1aa-- --0016e64c0af257c3a7048b69e1ac Content-Type: text/plain; charset=US-ASCII; name="=?utf-8?b?Rm90bzAwMDkuanBn?=" Content-Disposition: attachment; filename="=?utf-8?b?Rm90bzAwMDkuanBn?=" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gbneqxxy0 YWFhCg== --0016e64c0af257c3a7048b69e1ac-- limitMAIL mail = Mail.new(data) #~ puts Mail::Encodings.decode_encode(mail.attachments[0].filename, :decode) expect(mail.attachments[0].filename).to eq "Foto0009.jpg" end end end describe "attachment order" do it "should be preserved instead when content type exists" do mail = Mail.new do to "aaaa@aaaa.aaa" from "aaaa2@aaaa.aaa" subject "a subject" date Time.now text_part do content_type 'text/plain; charset=UTF-8' body "a \nsimplebody\n" end end mail.attachments['test.zip'] = File.open(fixture('attachments', 'test.zip'), 'rb', &:read) mail.attachments['test.pdf'] = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) mail.attachments['test.gif'] = File.open(fixture('attachments', 'test.gif'), 'rb', &:read) mail.attachments['test.jpg'] = File.open(fixture('attachments', 'test.jpg'), 'rb', &:read) expect(mail.attachments[0].filename).to eq 'test.zip' expect(mail.attachments[1].filename).to eq 'test.pdf' expect(mail.attachments[2].filename).to eq 'test.gif' expect(mail.attachments[3].filename).to eq 'test.jpg' mail2 = Mail.new(mail.encoded) expect(mail2.attachments[0].filename).to eq 'test.zip' expect(mail2.attachments[1].filename).to eq 'test.pdf' expect(mail2.attachments[2].filename).to eq 'test.gif' expect(mail2.attachments[3].filename).to eq 'test.jpg' end end mail-2.6.4/spec/mail/body_spec.rb000066400000000000000000000505031267453234600166340ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Body do # 3.5 Overall message syntax # # A message consists of header fields, optionally followed by a message # body. Lines in a message MUST be a maximum of 998 characters # excluding the CRLF, but it is RECOMMENDED that lines be limited to 78 # characters excluding the CRLF. (See section 2.1.1 for explanation.) # In a message body, though all of the characters listed in the text # rule MAY be used, the use of US-ASCII control characters (values 1 # through 8, 11, 12, and 14 through 31) is discouraged since their # interpretation by receivers for display is not guaranteed. # # message = (fields / obs-fields) # [CRLF body] # # body = *(*998text CRLF) *998text # # The header fields carry most of the semantic information and are # defined in section 3.6. The body is simply a series of lines of text # which are uninterpreted for the purposes of this standard. # describe "initialization" do it "should be instantiated" do expect { Mail::Body.new }.not_to raise_error end it "should initialize on a nil value" do expect { Mail::Body.new(nil) }.not_to raise_error end it "should accept text as raw source data" do body = Mail::Body.new('this is some text') expect(body.to_s).to eq 'this is some text' end it "should accept nil as a value and return an empty body" do body = Mail::Body.new expect(body.to_s).to eq '' end it "should accept an array as the body and join it" do expect { Mail::Body.new(["line one\n", "line two\n"]) }.not_to raise_error end it "should accept an array as the body and join it" do body = Mail::Body.new(["line one\n", "line two\n"]) expect(body.encoded).to eq "line one\r\nline two\r\n" end end describe "encoding" do it "should accept text as raw source data" do body = Mail::Body.new('this is some text') expect(body.encoded).to eq 'this is some text' end it "should set its own encoding to us_ascii if it is ascii only body" do body = Mail::Body.new('This is some text') expect(body.charset).to eq 'US-ASCII' end it "should allow you to set its encoding" do body = Mail::Body.new('') body.charset = 'UTF-8' expect(body.charset).to eq 'UTF-8' end it "should allow you to specify an encoding" do body = Mail::Body.new('') body.encoding = 'base64' expect(body.encoding).to eq 'base64' end it "should convert all new lines to crlf" do body = Mail::Body.new("This has \n various \r new \r\n lines") expect(body.encoded).to eq "This has \r\n various \r\n new \r\n lines" end end describe "decoding" do it "should convert all new lines to crlf" do body = Mail::Body.new("This has \n various \r new \r\n lines") expect(body.decoded).to eq "This has \n various \n new \n lines" end it "should not change a body on decode if not given an encoding type to decode" do body = Mail::Body.new("The=3Dbody") expect(body.decoded).to eq "The=3Dbody" end it "should change return the raw text if it does not recognise the encoding" do body = Mail::Body.new("The=3Dbody") body.encoding = '7bit' expect(body.decoded).to eq "The=3Dbody" end it "should change a body on decode if given an encoding type to decode" do body = Mail::Body.new("The=3Dbody") body.encoding = 'quoted-printable' expect(body.decoded).to eq "The=body" end it "should change a body on decode if given an encoding type to decode" do body = Mail::Body.new("VGhlIGJvZHk=\n") body.encoding = 'base64' expect(body.decoded).to eq "The body" end end describe "splitting up a multipart document" do def assert_split_into(body, pre, epi, parts) body = Mail::Body.new(body) body.split!('----=_Part_2192_32400445') expect(body.parts.size).to eq parts expect(body.preamble).to eq pre expect(body.epilogue).to eq epi end it "should store the boundary passed in" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.boundary).to eq '----=_Part_2192_32400445' end it "should split at the boundry string given returning two message bodies" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) expect(body.split!('----=_Part_2192_32400445').parts.length).to eq 2 end it "should split with missing closing boundary" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain\r\n\r\nWhere is the closing boundary...\r\n" assert_split_into(multipart_body, "this is some text", "", 1) end it "should not split with empty space after missing closing boundary" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain\r\n\r\nWhere is the closing boundary...\r\n------=_Part_2192_32400445\r\n\r\n\r\n\r\n" assert_split_into(multipart_body, "this is some text", "", 1) end it "should split with multiple parts and missing closing boundary" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain\r\n\r\nExtra part 1\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain\r\n\r\nWhere is the closing boundary...\r\n" assert_split_into(multipart_body, "this is some text", "", 2) end it "should ignore blank parts" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\n\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain\r\n\r\nWhere is the closing boundary...\r\n" assert_split_into(multipart_body, "this is some text", "", 1) end it "should keep the preamble text as its own preamble" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.preamble).to eq "this is some text" end it "should return the parts as their own messages" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.parts[0].class).to eq Mail::Part expect(body.parts[1].class).to eq Mail::Part end it "should return the first part as its own message" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.parts[0].content_type).to eq "text/plain; charset=ISO-8859-1" end it "should return the first part as its own message" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.parts[1].content_type).to eq "text/html" end it "should separate out its parts" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body).to be_multipart end it "should keep track of its parts" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') expect(body.parts.length).to eq 2 end it "should round trip its parts" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') body.preamble = "Really! this is some text" body.epilogue = "And this is the end" new_body = Mail::Body.new(body.encoded) new_body.split!('----=_Part_2192_32400445') expect(new_body.parts.length).to eq 2 expect(new_body.parts[0].decoded).to eq "This is a plain text\n" expect(new_body.parts[1].decoded).to eq "

    This is HTML

    " expect(new_body.preamble).to eq "Really! this is some text" expect(new_body.epilogue).to eq "And this is the end" end it "should allow you to change the boundary" do multipart_body = "this is some text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n\r\nThis is a plain text\r\n\r\n------=_Part_2192_32400445\r\nContent-Type: text/html\r\n\r\n

    This is HTML

    \r\n------=_Part_2192_32400445--\r\n" body = Mail::Body.new(multipart_body) body.split!('----=_Part_2192_32400445') body.boundary = '------=_MIMEPART' new_body = Mail::Body.new(body.encoded) new_body.split!('------=_MIMEPART') expect(new_body.parts.length).to eq 2 expect(new_body.preamble).to eq "this is some text" end it "should split if boundary is not set" do multipart_body = "\n\n--\nDate: Thu, 01 Aug 2013 15:14:20 +0100\nMime-Version: 1.0\nContent-Type: text/plain\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment;\n filename=\"\"\nContent-ID: <51fa6d3cac796_d84e3fe5a58349e025683@local.mail>\n\n\n\n----" body = Mail::Body.new(multipart_body) expect { body.split!(nil) }.not_to raise_error end end describe "detecting non ascii" do it "should say an empty string is all ascii" do body = Mail::Body.new expect(body).to be_only_us_ascii end it "should say if a body is ascii" do body = Mail::Body.new('This is ASCII') expect(body).to be_only_us_ascii end it "should say if a body is not ascii" do body = Mail::Body.new("This is NOT plain text ASCII − かきくけこ") expect(body).not_to be_only_us_ascii end end describe "adding parts" do it "should allow you to add a part" do body = Mail::Body.new('') body << Mail::Part.new('') expect(body.parts.length).to eq 1 expect(body).to be_multipart end it "should allow you to sort the parts" do body = Mail::Body.new('') body << Mail::Part.new("content-type: text/html\r\nsubject: HTML") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text") body << Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched") expect(body.parts.length).to eq 3 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].content_type).to eq "text/plain" expect(body.parts[1].content_type).to eq "text/enriched" expect(body.parts[2].content_type).to eq "text/html" end it "should allow you to sort the parts with an arbitrary sort order" do body = Mail::Body.new('') body.set_sort_order([ "text/plain", "text/html", "text/enriched" ]) body << Mail::Part.new("content-type: text/html\r\nsubject: HTML") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text") body << Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched") expect(body.parts.length).to eq 3 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].content_type).to eq "text/plain" expect(body.parts[1].content_type).to eq "text/html" expect(body.parts[2].content_type).to eq "text/enriched" end it "should allow you to sort the parts with an arbitrary sort order" do body = Mail::Body.new('') body.set_sort_order(["application/x-yaml", "text/plain"]) body << Mail::Part.new("content-type: text/plain\r\nsubject: HTML") body << Mail::Part.new("content-type: text/html\r\nsubject: Plain Text") body << Mail::Part.new("content-type: application/x-yaml\r\nsubject: Enriched") expect(body.parts.length).to eq 3 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].content_type).to eq "application/x-yaml" expect(body.parts[1].content_type).to eq "text/plain" expect(body.parts[2].content_type).to eq "text/html" end it "should sort the parts on encode" do body = Mail::Body.new('') body << Mail::Part.new("content-type: text/html\r\nsubject: HTML") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text") body << Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched") expect(body.parts.length).to eq 3 expect(body).to be_multipart body.encoded expect(body.parts[0].content_type).to eq "text/plain" expect(body.parts[1].content_type).to eq "text/enriched" expect(body.parts[2].content_type).to eq "text/html" end it "should put the part types it doesn't know about at the end" do body = Mail::Body.new('') body << Mail::Part.new("content-type: text/html\r\nsubject: HTML") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text") body << Mail::Part.new("content-type: image/jpeg\r\n") expect(body.parts.length).to eq 3 expect(body).to be_multipart body.encoded expect(body.parts[0].content_type).to eq "text/plain" expect(body.parts[1].content_type).to eq "text/html" expect(body.parts[2].content_type).to eq "image/jpeg" end it "should allow you to sort the parts recursively" do part = Mail::Part.new('Content-Type: multipart/alternate') part.add_part(Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text")) part.add_part(Mail::Part.new("content-type: text/html\r\nsubject: HTML")) part.add_part(Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched")) body = Mail::Body.new('') body << part body << Mail::Part.new("content-type: image/jpeg\r\nsubject: JPGEG\r\n\r\nsdkjskjdksjdkjsd") expect(body.parts.length).to eq 2 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].content_type).to match %r{\Amultipart/alternate(;|\Z)} expect(body.parts[1].content_type).to eq "image/jpeg" expect(body.parts[0].parts[0].content_type).to eq "text/plain" expect(body.parts[0].parts[1].content_type).to eq "text/enriched" expect(body.parts[0].parts[2].content_type).to eq "text/html" end it "should allow you to sort the parts recursively" do part = Mail::Part.new('Content-Type: multipart/alternate') part.add_part(Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched")) part.add_part(Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text")) part.add_part(Mail::Part.new("content-type: text/html\r\nsubject: HTML")) body = Mail::Body.new('') body << part body << Mail::Part.new("content-type: image/jpeg\r\nsubject: JPGEG\r\n\r\nsdkjskjdksjdkjsd") expect(body.parts.length).to eq 2 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].content_type).to match %r{\Amultipart/alternate(;|\Z)} expect(body.parts[1].content_type).to eq "image/jpeg" expect(body.parts[0].parts[0].content_type).to eq "text/plain" expect(body.parts[0].parts[1].content_type).to eq "text/enriched" expect(body.parts[0].parts[2].content_type).to eq "text/html" end it "should maintain the relative order of the parts with the same content-type as they are added" do body = Mail::Body.new(''); body << Mail::Part.new("content-type: text/html\r\nsubject: HTML_1") body << Mail::Part.new("content-type: image/jpeg\r\nsubject: JPGEG_1\r\n\r\nsdkjskjdksjdkjsd") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text_1") body << Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched_1") body << Mail::Part.new("content-type: text/html\r\nsubject: HTML_2") body << Mail::Part.new("content-type: text/plain\r\nsubject: Plain Text_2") body << Mail::Part.new("content-type: image/jpeg\r\nsubject: JPGEG_2\r\n\r\nsdkjskjdksjdkjsd") body << Mail::Part.new("content-type: text/enriched\r\nsubject: Enriched_2") expect(body.parts.length).to eq 8 expect(body).to be_multipart body.sort_parts! expect(body.parts[0].subject).to eq "Plain Text_1" expect(body.parts[1].subject).to eq "Plain Text_2" expect(body.parts[2].subject).to eq "Enriched_1" expect(body.parts[3].subject).to eq "Enriched_2" expect(body.parts[4].subject).to eq "HTML_1" expect(body.parts[5].subject).to eq "HTML_2" expect(body.parts[6].subject).to eq "JPGEG_1" expect(body.parts[7].subject).to eq "JPGEG_2" end end describe "matching" do it "should still equal itself" do body = Mail::Body.new('The body') expect(body).to eq body end it "should match on the body part decoded if given a string to ==" do body = Mail::Body.new('The body') expect(body == 'The body').to be_truthy end it "should match on the body part decoded if given a string to ==" do body = Mail::Body.new("VGhlIGJvZHk=\n") body.encoding = 'base64' expect(body == "The body").to be_truthy end it "should match on the body part decoded if given a string to =~" do body = Mail::Body.new('The body') expect(body =~ /The/).to eq 0 end it "should match on the body part decoded if given a string to ==" do body = Mail::Body.new("VGhlIGJvZHk=\n") body.encoding = 'base64' expect(body =~ /The/).to eq 0 end it "should match on the body part decoded if given a string to match" do body = Mail::Body.new('The body') expect((body.match(/The/))[0]).to eq 'The' end it "should match on the body part decoded if given a string to match" do body = Mail::Body.new("VGhlIGJvZHk=\n") body.encoding = 'base64' expect((body.match(/The/))[0]).to eq 'The' end it "should match on the body part decoded if given a string to include?" do body = Mail::Body.new('The Body') expect(body).to include('The') end it "should match on the body part decoded if given a string to include?" do body = Mail::Body.new("VGhlIGJvZHk=\n") body.encoding = 'base64' expect(body).to include('The') end end describe "non US-ASCII charset" do it "should encoded" do body = Mail::Body.new("あいうえお\n") body.charset = 'iso-2022-jp' expect = (RUBY_VERSION < '1.9') ? "あいうえお\r\n" : "\e$B$\"$$$&$($*\e(B\r\n" expect(body.encoded).to eq expect end end describe "invalid encoding" do it "should round trip" do body = Mail::Body.new('The Body') body.encoding = 'invalid' expect(body.encoded).to eq 'The Body' end end end mail-2.6.4/spec/mail/configuration_spec.rb000066400000000000000000000044311267453234600205450ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' class MyTestDeliveryMethod attr_accessor :settings def initialize(values) self.settings = {}.merge!(values) end end describe Mail::Configuration do describe "network configurations" do it "defaults delivery_method to smtp" do # Need to clear out any prior configuration, as setting nil on the config # will not clear it. Mail::Configuration.instance.send(:initialize) Mail.defaults { delivery_method nil, { :address => 'some.host' } } expect(Mail.delivery_method.settings[:address]).to eq 'some.host' end it "should be available from the Mail.defaults method" do Mail.defaults { delivery_method :smtp, { :address => 'some.host' } } expect(Mail.delivery_method.settings[:address]).to eq 'some.host' end it "should configure sendmail" do Mail.defaults { delivery_method :sendmail, :location => "/usr/bin/sendmail" } expect(Mail.delivery_method.class).to eq Mail::Sendmail expect(Mail.delivery_method.settings[:location]).to eq "/usr/bin/sendmail" end it "should configure sendmail using a string" do Mail.defaults { delivery_method 'sendmail', :location => "/usr/bin/sendmail" } expect(Mail.delivery_method.class).to eq Mail::Sendmail expect(Mail.delivery_method.settings[:location]).to eq "/usr/bin/sendmail" end it "should configure exim" do Mail.defaults { delivery_method :exim, :location => "/usr/bin/exim" } expect(Mail.delivery_method.class).to eq Mail::Exim expect(Mail.delivery_method.settings[:location]).to eq "/usr/bin/exim" end it "should configure an open SMTP connection" do smtp = Net::SMTP.start('127.0.0.1', 25) Mail.defaults { delivery_method :smtp_connection, {:connection => smtp} } expect(Mail.delivery_method.class).to eq Mail::SMTPConnection expect(Mail.delivery_method.smtp).to eq smtp end it "should accept a plug-in delivery method" do Mail.defaults { delivery_method MyTestDeliveryMethod, { :option1 => "one", :option2 => "two" }} expect(Mail.delivery_method.class).to eq MyTestDeliveryMethod expect(Mail.delivery_method.settings[:option1]).to eq "one" expect(Mail.delivery_method.settings[:option2]).to eq "two" end end end mail-2.6.4/spec/mail/core_extensions/000077500000000000000000000000001267453234600175445ustar00rootroot00000000000000mail-2.6.4/spec/mail/core_extensions/string_spec.rb000066400000000000000000000003521267453234600224110ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe 'core_extensions/string' do describe 'constantize' do it 'should converts string to constant' do expect("Kernel".constantize).to eq Kernel end end end mail-2.6.4/spec/mail/core_extensions_spec.rb000066400000000000000000000001371267453234600211040ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Object do end mail-2.6.4/spec/mail/elements/000077500000000000000000000000001267453234600161515ustar00rootroot00000000000000mail-2.6.4/spec/mail/elements/address_list_spec.rb000066400000000000000000000112631267453234600221730ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::AddressList do describe "parsing" do it "should parse an address list" do parse_text = 'test@lindsaar.net' expect { Mail::AddressList.new(parse_text) }.not_to raise_error end it "should raise an error if the input is useless" do parse_text = '@@@@@@' expect { Mail::AddressList.new(parse_text) }.to raise_error(Mail::Field::ParseError) end it "should not raise an error if the input is just blank" do parse_text = nil expect { Mail::AddressList.new(parse_text) }.not_to raise_error end it "should raise an error if the input is useless" do parse_text = "This ( is an invalid address!" expect { Mail::AddressList.new(parse_text) }.to raise_error(Mail::Field::ParseError) end it "should give the address passed in" do parse_text = 'test@lindsaar.net' result = 'test@lindsaar.net' a = Mail::AddressList.new(parse_text) expect(a.addresses.first.to_s).to eq result end it "should give the addresses passed in" do parse_text = 'test@lindsaar.net, test2@lindsaar.net' result = ['test@lindsaar.net', 'test2@lindsaar.net'] a = Mail::AddressList.new(parse_text) expect(a.addresses.map {|addr| addr.to_s }).to eq result end it "should preserve the display name" do parse_text = '"Mikel Lindsaar" ' result = 'Mikel Lindsaar ' a = Mail::AddressList.new(parse_text) expect(a.addresses.first.format).to eq result expect(a.addresses.first.display_name).to eq 'Mikel Lindsaar' end it "should handle and ignore nil addresses" do parse_text = ' , user-example@aol.com, e-s-a-s-2200@app.ar.com' result = ['user-example@aol.com', 'e-s-a-s-2200@app.ar.com'] a = Mail::AddressList.new(parse_text) expect(a.addresses.map {|addr| addr.to_s }).to eq result end it "should handle truly horrific combinations of commas, spaces, and addresses" do parse_text = ' ,, foo@example.com, , ,,, bar@example.com ,,' result = ['foo@example.com', 'bar@example.com'] a = Mail::AddressList.new(parse_text) expect(a.addresses.map {|addr| addr.to_s }).to eq result end it "should handle folding whitespace" do parse_text = "foo@example.com,\r\n\tbar@example.com" result = ['foo@example.com', 'bar@example.com'] a = Mail::AddressList.new(parse_text) expect(a.addresses.map {|addr| addr.to_s }).to eq result end it "should handle malformed folding whitespace" do pending parse_text = "leads@sg.dc.com,\n\t sag@leads.gs.ry.com,\n\t sn@example-hotmail.com,\n\t e-s-a-g-8718@app.ar.com,\n\t jp@t-exmaple.com,\n\t\n\t cc@c-l-example.com" result = %w(leads@sg.dc.com sag@leads.gs.ry.com sn@example-hotmail.com e-s-a-g-8718@app.ar.com jp@t-exmaple.com cc@c-l-example.com) a = Mail::AddressList.new(parse_text) expect(a.addresses.map {|addr| addr.to_s }).to eq result end it "should extract comments in addreses which are part of a group" do parse_text = "group: jimmy ;"; result = ["comment"] a = Mail::AddressList.new(parse_text) expect(a.addresses.first.comments).to eq result end end describe "functionality" do it "should give all the groups when asked" do list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(list.addresses_grouped_by_group.length).to eq 1 end it "should ask the group for all its addresses" do list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(list.addresses_grouped_by_group.values.first.length).to eq 2 end it "should give all the addresses when asked" do list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(list.addresses.length).to eq 3 end it "should handle a really nasty obsolete address list" do psycho_obsolete = "Mary Smith <@machine.tld:mary@example.net>, , jdoe@test . example" list = Mail::AddressList.new(psycho_obsolete) expect(list.addresses.length).to eq 2 end it "should create an address instance for each address returned" do list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') list.addresses.each do |address| expect(address.class).to eq Mail::Address end end it "should provide a list of group names" do list = Mail::AddressList.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(list.group_names).to eq ["my_group"] end end end mail-2.6.4/spec/mail/elements/address_spec.rb000066400000000000000000001073711267453234600211460ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Address do describe "functionality" do it "should allow us to instantiate an empty address object and call inspect" do expect { Mail::Address.new.inspect }.not_to raise_error end it "should allow us to instantiate an empty address object and call to_s" do expect(Mail::Address.new.to_s).to eq '' end it "should allow us to instantiate an empty address object and call format" do expect(Mail::Address.new.format).to eq '' end it "should allow us to instantiate an empty address object and call address" do [nil, '', ' '].each do |input| expect(Mail::Address.new(input).address).to eq nil end end it "should allow us to instantiate an empty address object and call local" do [nil, '', ' '].each do |input| expect(Mail::Address.new(input).local).to eq nil end end it "should allow us to instantiate an empty address object and call domain" do [nil, '', ' '].each do |input| expect(Mail::Address.new(input).domain).to eq nil end end ['"-Earnings...Notification-" ', '<56253817>'].each do |spammy_address| it "should ignore funky local-only spammy addresses in angle brackets #{spammy_address}" do expect(Mail::Address.new(spammy_address).address).to eq nil end end it "should give its address back on :to_s if there is no display name" do parse_text = 'test@lindsaar.net' result = 'test@lindsaar.net' expect(Mail::Address.new(parse_text).to_s).to eq result end it "should give its format back on :to_s if there is a display name" do parse_text = 'Mikel Lindsaar ' result = 'Mikel Lindsaar ' expect(Mail::Address.new(parse_text).to_s).to eq result end it "should give back the display name" do parse_text = 'Mikel Lindsaar ' result = 'Mikel Lindsaar' a = Mail::Address.new(parse_text) expect(a.display_name).to eq result end it "should preserve the display name passed in" do parse_text = '"Mikel Lindsaar" ' result = 'Mikel Lindsaar' a = Mail::Address.new(parse_text) expect(a.display_name).to eq result end it "should preserve the display name passed in with token unsafe chars" do parse_text = '"Mikel@@@Lindsaar" ' result = 'Mikel@@@Lindsaar' a = Mail::Address.new(parse_text) expect(a.display_name).to eq result end it "should decode the display name without calling #decoded first" do encoded = '=?ISO-8859-1?Q?Jan_Kr=FCtisch?= ' expect(Mail::Address.new(encoded).display_name).to eq 'Jan Krütisch' end it "should give back the local part" do parse_text = 'Mikel Lindsaar ' result = 'test' a = Mail::Address.new(parse_text) expect(a.local).to eq result end it "should give back the domain" do parse_text = 'Mikel Lindsaar ' result = 'lindsaar.net' a = Mail::Address.new(parse_text) expect(a.domain).to eq result end it "should give back the formated address" do parse_text = 'Mikel Lindsaar ' result = 'Mikel Lindsaar ' a = Mail::Address.new(parse_text) expect(a.format).to eq result end it "should handle an address without a domain" do parse_text = 'test' result = 'test' a = Mail::Address.new(parse_text) expect(a.address).to eq result end it "should handle comments" do parse_text = "Mikel Lindsaar (author) " result = ['author'] a = Mail::Address.new(parse_text) expect(a.comments).to eq result end it "should handle multiple comments" do parse_text = "Mikel (first name) Lindsaar (author) " result = ['first name', 'author'] a = Mail::Address.new(parse_text) expect(a.comments).to eq result end it "should handle nested comments" do parse_text = "bob@example.com (hello (nested) yeah)" result = ["hello \(nested\) yeah"] a = Mail::Address.new(parse_text) expect(a.comments).to eq result end it "should give back the raw value" do parse_text = "Mikel (first name) Lindsaar (author) " result = "Mikel (first name) Lindsaar (author) " a = Mail::Address.new(parse_text) expect(a.raw).to eq result end it "should format junk addresses as raw text" do junk = '<"somename@gmail.com">' expect(Mail::Address.new(junk).format).to eq junk end end describe "assigning values directly" do it "should allow you to assign an address" do a = Mail::Address.new a.address = 'mikel@test.lindsaar.net' expect(a.address).to eq 'mikel@test.lindsaar.net' expect(a.format).to eq 'mikel@test.lindsaar.net' end it "should allow you to assign a display name" do a = Mail::Address.new a.display_name = 'Mikel Lindsaar' expect(a.display_name).to eq 'Mikel Lindsaar' end it "should return an empty format a display name and no address defined" do a = Mail::Address.new a.display_name = 'Mikel Lindsaar' expect(a.format).to eq '' end it "should allow you to assign an address and a display name" do a = Mail::Address.new a.address = 'mikel@test.lindsaar.net' a.display_name = 'Mikel Lindsaar' expect(a.format).to eq 'Mikel Lindsaar ' end end describe "parsing" do describe "basic email addresses" do it "should handle all OK local parts" do [['aamine', 'aamine'], ['"Minero Aoki"', '"Minero Aoki"'], ['"!@#$%^&*()"', '"!@#$%^&*()"'], ['a.b.c', 'a.b.c'] ].each do |(words, ok)| a = Mail::Address.new(words) expect(a.local).to eq ok end end it "should handle all OK domains" do [['loveruby.net', 'loveruby.net'], ['"love ruby".net', '"love ruby".net'], ['a."love ruby".net', 'a."love ruby".net'], ['"!@#$%^&*()"', '"!@#$%^&*()"'], ['[192.168.1.1]', '[192.168.1.1]'] ].each do |(words, ok)| a = Mail::Address.new(%Q|me@#{words}|) expect(a.domain).to eq ok end end end describe "email addresses from the wild" do it "should handle |aamine@loveruby.net|" do address = Mail::Address.new('aamine@loveruby.net') expect(address).to break_down_to({ :display_name => nil, :address => 'aamine@loveruby.net', :local => 'aamine', :domain => 'loveruby.net', :format => 'aamine@loveruby.net', :comments => nil, :raw => 'aamine@loveruby.net'}) end it "should handle |Minero Aoki |" do address = Mail::Address.new('Minero Aoki ') expect(address).to break_down_to({ :display_name => 'Minero Aoki', :address => 'aamine@loveruby.net', :local => 'aamine', :domain => 'loveruby.net', :format => 'Minero Aoki ', :comments => nil, :raw => 'Minero Aoki '}) end it "should handle |Minero Aoki|" do address = Mail::Address.new('Minero Aoki') expect(address).to break_down_to({ :display_name => 'Minero Aoki', :address => 'aamine@loveruby.net', :local => 'aamine', :domain => 'loveruby.net', :format => 'Minero Aoki ', :comments => nil, :raw => 'Minero Aoki'}) end it 'should handle |"Minero Aoki" |' do address = Mail::Address.new('"Minero Aoki" ') expect(address).to break_down_to({ :display_name => 'Minero Aoki', :address => 'aamine@loveruby.net', :local => 'aamine', :domain => 'loveruby.net', :format => 'Minero Aoki ', :comments => nil, :raw => '"Minero Aoki" '}) end it "should handle |Minero Aoki|" do address = Mail::Address.new('Minero Aoki') expect(address).to break_down_to({ :display_name => 'Minero Aoki', :address => 'aamine@0246.loveruby.net', :local => 'aamine', :domain => '0246.loveruby.net', :format => 'Minero Aoki ', :comments => nil, :raw => 'Minero Aoki'}) end it "should handle lots of dots" do 1.upto(10) do |times| dots = "." * times address = Mail::Address.new("hoge#{dots}test@docomo.ne.jp") expect(address).to break_down_to({ :display_name => nil, :address => "hoge#{dots}test@docomo.ne.jp", :local => "hoge#{dots}test", :domain => 'docomo.ne.jp', :format => "hoge#{dots}test@docomo.ne.jp", :comments => nil, :raw => "hoge#{dots}test@docomo.ne.jp"}) end end it "should handle trailing dots" do 1.upto(10) do |times| dots = "." * times address = Mail::Address.new("hogetest#{dots}@docomo.ne.jp") expect(address).to break_down_to({ :display_name => nil, :address => "hogetest#{dots}@docomo.ne.jp", :local => "hogetest#{dots}", :domain => 'docomo.ne.jp', :format => "hogetest#{dots}@docomo.ne.jp", :comments => nil, :raw => "hogetest#{dots}@docomo.ne.jp"}) end end it 'should handle |"Joe & J. Harvey" |' do address = Mail::Address.new('"Joe & J. Harvey" ') expect(address).to break_down_to({ :name => 'Joe & J. Harvey', :display_name => 'Joe & J. Harvey', :address => 'ddd@Org', :domain => 'Org', :local => 'ddd', :format => '"Joe & J. Harvey" ', :comments => nil, :raw => '"Joe & J. Harvey" '}) end it 'should handle |"spickett@tiac.net" |' do address = Mail::Address.new('"spickett@tiac.net" ') expect(address).to break_down_to({ :name => 'spickett@tiac.net', :display_name => 'spickett@tiac.net', :address => 'Sean.Pickett@zork.tiac.net', :domain => 'zork.tiac.net', :local => 'Sean.Pickett', :format => '"spickett@tiac.net" ', :comments => nil, :raw => '"spickett@tiac.net" '}) end it "should handle |rls@intgp8.ih.att.com (-Schieve,R.L.)|" do address = Mail::Address.new('rls@intgp8.ih.att.com (-Schieve,R.L.)') expect(address).to break_down_to({ :name => '-Schieve,R.L.', :display_name => nil, :address => 'rls@intgp8.ih.att.com', :comments => ['-Schieve,R.L.'], :domain => 'intgp8.ih.att.com', :local => 'rls', :format => 'rls@intgp8.ih.att.com (-Schieve,R.L.)', :raw => 'rls@intgp8.ih.att.com (-Schieve,R.L.)'}) end it "should handle |jrh%cup.portal.com@portal.unix.portal.com|" do address = Mail::Address.new('jrh%cup.portal.com@portal.unix.portal.com') expect(address).to break_down_to({ :name => nil, :display_name => nil, :address => 'jrh%cup.portal.com@portal.unix.portal.com', :comments => nil, :domain => 'portal.unix.portal.com', :local => 'jrh%cup.portal.com', :format => 'jrh%cup.portal.com@portal.unix.portal.com', :raw => 'jrh%cup.portal.com@portal.unix.portal.com'}) end it "should handle |astrachan@austlcm.sps.mot.com ('paul astrachan/xvt3')|" do address = Mail::Address.new("astrachan@austlcm.sps.mot.com ('paul astrachan/xvt3')") expect(address).to break_down_to({ :name => "'paul astrachan/xvt3'", :display_name => nil, :address => 'astrachan@austlcm.sps.mot.com', :comments => ["'paul astrachan/xvt3'"], :domain => 'austlcm.sps.mot.com', :local => 'astrachan', :format => "astrachan@austlcm.sps.mot.com ('paul astrachan/xvt3')", :raw => "astrachan@austlcm.sps.mot.com ('paul astrachan/xvt3')"}) end it "should handle 'TWINE57%SDELVB.decnet@SNYBUF.CS.SNYBUF.EDU (JAMES R. TWINE - THE NERD)'" do address = Mail::Address.new('TWINE57%SDELVB.decnet@SNYBUF.CS.SNYBUF.EDU (JAMES R. TWINE - THE NERD)') expect(address).to break_down_to({ :name => 'JAMES R. TWINE - THE NERD', :display_name => nil, :address => 'TWINE57%SDELVB.decnet@SNYBUF.CS.SNYBUF.EDU', :comments => ['JAMES R. TWINE - THE NERD'], :domain => 'SNYBUF.CS.SNYBUF.EDU', :local => 'TWINE57%SDELVB.decnet', :format => 'TWINE57%SDELVB.decnet@SNYBUF.CS.SNYBUF.EDU (JAMES R. TWINE - THE NERD)', :raw => 'TWINE57%SDELVB.decnet@SNYBUF.CS.SNYBUF.EDU (JAMES R. TWINE - THE NERD)'}) end it "should be able to handle 'David Apfelbaum '" do address = Mail::Address.new('David Apfelbaum ') expect(address).to break_down_to({ :name => 'David Apfelbaum', :display_name => 'David Apfelbaum', :address => 'da0g+@andrew.cmu.edu', :comments => nil, :domain => 'andrew.cmu.edu', :local => 'da0g+', :format => 'David Apfelbaum ', :raw => 'David Apfelbaum '}) end it 'should handle |"JAMES R. TWINE - THE NERD" |' do address = Mail::Address.new('"JAMES R. TWINE - THE NERD" ') expect(address).to break_down_to({ :name => 'JAMES R. TWINE - THE NERD', :display_name => 'JAMES R. TWINE - THE NERD', :address => 'TWINE57%SDELVB%SNYDELVA.bitnet@CUNYVM.CUNY.EDU', :comments => nil, :domain => 'CUNYVM.CUNY.EDU', :local => 'TWINE57%SDELVB%SNYDELVA.bitnet', :format => '"JAMES R. TWINE - THE NERD" ', :raw => '"JAMES R. TWINE - THE NERD" '}) end it "should handle '/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/@mhs-relay.ac.uk'" do address = Mail::Address.new('/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/@mhs-relay.ac.uk') expect(address).to break_down_to({ :name => nil, :display_name => nil, :address => '/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/@mhs-relay.ac.uk', :comments => nil, :domain => 'mhs-relay.ac.uk', :local => '/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/', :format => '/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/@mhs-relay.ac.uk', :raw => '/G=Owen/S=Smith/O=SJ-Research/ADMD=INTERSPAN/C=GB/@mhs-relay.ac.uk'}) end it 'should handle |"Stephen Burke, Liverpool" |' do address = Mail::Address.new('"Stephen Burke, Liverpool" ') expect(address).to break_down_to({ :name => 'Stephen Burke, Liverpool', :display_name => 'Stephen Burke, Liverpool', :address => 'BURKE@vxdsya.desy.de', :comments => nil, :domain => 'vxdsya.desy.de', :local => 'BURKE', :format => '"Stephen Burke, Liverpool" ', :raw => '"Stephen Burke, Liverpool" '}) end it "should handle 'The Newcastle Info-Server '" do address = Mail::Address.new('The Newcastle Info-Server ') expect(address).to break_down_to({ :name => 'The Newcastle Info-Server', :display_name => 'The Newcastle Info-Server', :address => 'info-admin@newcastle.ac.uk', :comments => nil, :domain => 'newcastle.ac.uk', :local => 'info-admin', :format => 'The Newcastle Info-Server ', :raw => 'The Newcastle Info-Server '}) end it "should handle 'Suba.Peddada@eng.sun.com (Suba Peddada [CONTRACTOR])'" do address = Mail::Address.new('Suba.Peddada@eng.sun.com (Suba Peddada [CONTRACTOR])') expect(address).to break_down_to({ :name => 'Suba Peddada [CONTRACTOR]', :display_name => nil, :address => 'Suba.Peddada@eng.sun.com', :comments => ['Suba Peddada [CONTRACTOR]'], :domain => 'eng.sun.com', :local => 'Suba.Peddada', :format => 'Suba.Peddada@eng.sun.com (Suba Peddada [CONTRACTOR])', :raw => 'Suba.Peddada@eng.sun.com (Suba Peddada [CONTRACTOR])'}) end it "should handle 'Paul Manser (0032 memo) '" do address = Mail::Address.new('Paul Manser (0032 memo) ') expect(address).to break_down_to({ :name => 'Paul Manser', :display_name => 'Paul Manser', :address => 'a906187@tiuk.ti.com', :comments => ['0032 memo'], :domain => 'tiuk.ti.com', :local => 'a906187', :format => 'Paul Manser (0032 memo)', :raw => 'Paul Manser (0032 memo) '}) end it 'should handle |"gregg (g.) woodcock" |' do address = Mail::Address.new('"gregg (g.) woodcock" ') expect(address).to break_down_to({ :name => 'gregg (g.) woodcock', :display_name => 'gregg (g.) woodcock', :address => 'woodcock@bnr.ca', :comments => nil, :domain => 'bnr.ca', :local => 'woodcock', :format => '"gregg (g.) woodcock" ', :raw => '"gregg (g.) woodcock" '}) end it 'should handle |Graham.Barr@tiuk.ti.com|' do address = Mail::Address.new('Graham.Barr@tiuk.ti.com') expect(address).to break_down_to({ :name => nil, :display_name => nil, :address => 'Graham.Barr@tiuk.ti.com', :comments => nil, :domain => 'tiuk.ti.com', :local => 'Graham.Barr', :format => 'Graham.Barr@tiuk.ti.com', :raw => 'Graham.Barr@tiuk.ti.com'}) end it "should handle |a909937 (Graham Barr (0004 bodg))|" do address = Mail::Address.new('a909937 (Graham Barr (0004 bodg))') expect(address).to break_down_to({ :name => 'Graham Barr (0004 bodg)', :display_name => nil, :address => 'a909937', :comments => ['Graham Barr (0004 bodg)'], :domain => nil, :local => 'a909937', :format => 'a909937 (Graham Barr \(0004 bodg\))', :raw => 'a909937 (Graham Barr (0004 bodg))'}) end it "should handle |david d `zoo' zuhn |" do address = Mail::Address.new("david d `zoo' zuhn ") expect(address).to break_down_to({ :name => "david d `zoo' zuhn", :display_name => "david d `zoo' zuhn", :address => 'zoo@aggregate.com', :comments => nil, :domain => 'aggregate.com', :local => 'zoo', :format => "david d `zoo' zuhn ", :raw => "david d `zoo' zuhn "}) end it "should handle |(foo@bar.com (foobar), ned@foo.com (nedfoo) ) |" do address = Mail::Address.new('(foo@bar.com (foobar), ned@foo.com (nedfoo) ) ') expect(address).to break_down_to({ :name => 'foo@bar.com \(foobar\), ned@foo.com \(nedfoo\) ', :display_name => '(foo@bar.com \(foobar\), ned@foo.com \(nedfoo\) )', :address => 'kevin@goess.org', :comments => ['foo@bar.com (foobar), ned@foo.com (nedfoo) '], :domain => 'goess.org', :local => 'kevin', :format => '"(foo@bar.com \\\\(foobar\\\\), ned@foo.com \\\\(nedfoo\\\\) )" (foo@bar.com \(foobar\), ned@foo.com \(nedfoo\) )', :raw => '(foo@bar.com (foobar), ned@foo.com (nedfoo) ) '}) end it "should handle |Pete(A wonderful ) chap) |" do address = Mail::Address.new('Pete(A wonderful \) chap) ') expect(address).to break_down_to({ :name => 'Pete', :display_name => 'Pete', :address => 'pete(his account)@silly.test', :comments => ['A wonderful \\) chap', 'his account', 'his host'], :domain => 'silly.test', :local => 'pete(his account)', :format => 'Pete (A wonderful \\) chap his account his host)', :raw => 'Pete(A wonderful \\) chap) '}) end it "should handle |Joe Q. Public |" do address = Mail::Address.new('Joe Q. Public ') expect(address).to break_down_to({ :name => 'Joe Q. Public', :display_name => 'Joe Q. Public', :address => 'john.q.public@example.com', :comments => nil, :domain => 'example.com', :local => 'john.q.public', :format => '"Joe Q. Public" ', :raw => 'Joe Q. Public '}) end it "should handle |Mary Smith <@machine.tld:mary@example.net>|" do address = Mail::Address.new('Mary Smith <@machine.tld:mary@example.net>') expect(address).to break_down_to({ :name => 'Mary Smith', :display_name => 'Mary Smith', :address => '@machine.tld:mary@example.net', :comments => nil, :domain => 'example.net', :local => '@machine.tld:mary', :format => 'Mary Smith <@machine.tld:mary@example.net>', :raw => 'Mary Smith <@machine.tld:mary@example.net>'}) end it "should handle |jdoe@test . example|" do pending address = Mail::Address.new('jdoe@test . example') expect(address).to break_down_to({ :name => 'jdoe@test.example', :display_name => 'jdoe@test.example', :address => 'jdoe@test.example', :comments => nil, :domain => 'test.example', :local => 'jdoe', :format => 'jdoe@test.example', :raw => 'jdoe@test.example'}) end it "should handle |groupname+domain.com@example.com|" do address = Mail::Address.new('groupname+domain.com@example.com') expect(address).to break_down_to({ :name => nil, :display_name => nil, :address => 'groupname+domain.com@example.com', :comments => nil, :domain => 'example.com', :local => 'groupname+domain.com', :format => 'groupname+domain.com@example.com', :raw => 'groupname+domain.com@example.com'}) end it "should handle |=?UTF-8?B?8J+RjQ==?= <=?UTF-8?B?8J+RjQ==?=@=?UTF-8?B?8J+RjQ==?=.emoji>|" do address = Mail::Address.new('=?UTF-8?B?8J+RjQ==?= <=?UTF-8?B?8J+RjQ==?=@=?UTF-8?B?8J+RjQ==?=.emoji>') expect(address).to break_down_to({ :name => '👍', :display_name => '👍', :address => '👍@👍.emoji', :comments => nil, :domain => '👍.emoji', :local => '👍', :format => '"👍" <👍@👍.emoji>', :raw => '=?UTF-8?B?8J+RjQ==?= <=?UTF-8?B?8J+RjQ==?=@=?UTF-8?B?8J+RjQ==?=.emoji>'}) end it "should expose group" do struct = Mail::Parsers::AddressStruct.new(nil, nil, nil, nil, nil, nil, "GROUP", nil) address = Mail::Address.new(struct) expect(address.group).to eq("GROUP") end it "should have no group by default" do expect(Mail::Address.new(nil).group).to eq(nil) end end end describe "creating" do describe "parts of an address" do it "should add an address" do address = Mail::Address.new address.address = "mikel@test.lindsaar.net" expect(address).to break_down_to({:address => 'mikel@test.lindsaar.net'}) end it "should add a display name" do address = Mail::Address.new address.display_name = "Mikel Lindsaar" expect(address.display_name).to eq 'Mikel Lindsaar' end end end describe "modifying an address" do it "should add an address" do address = Mail::Address.new address.address = "mikel@test.lindsaar.net" expect(address).to break_down_to({:address => 'mikel@test.lindsaar.net'}) end it "should add a display name" do address = Mail::Address.new address.display_name = "Mikel Lindsaar" expect(address.display_name).to eq 'Mikel Lindsaar' end it "should take an address and a display name and join them" do address = Mail::Address.new address.address = "mikel@test.lindsaar.net" address.display_name = "Mikel Lindsaar" expect(address.format).to eq 'Mikel Lindsaar ' end it "should take a display name and an address and join them" do address = Mail::Address.new address.display_name = "Mikel Lindsaar" address.address = "mikel@test.lindsaar.net" expect(address.format).to eq 'Mikel Lindsaar ' end end describe "providing encoded and decoded outputs" do it "should provide an encoded output" do address = Mail::Address.new address.display_name = "Mikel Lindsaar" address.address = "mikel@test.lindsaar.net" expect(address.encoded).to eq 'Mikel Lindsaar ' end it "should provide an encoded output for non us-ascii" do address = Mail::Address.new address.display_name = "まける" address.address = "mikel@test.lindsaar.net" expect(address.encoded).to eq '=?UTF-8?B?44G+44GR44KL?= ' end it "should provide an encoded output for non us-ascii" do address = Mail::Address.new address.display_name = "まける" address.address = "mikel@test.lindsaar.net" expect(address.decoded).to eq '"まける" ' end end end mail-2.6.4/spec/mail/elements/date_time_element_spec.rb000066400000000000000000000011511267453234600231520ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::DateTimeElement do it "should parse a date" do date_text = 'Wed, 27 Apr 2005 14:15:31 -0700' expect { Mail::DateTimeElement.new(date_text) }.not_to raise_error end it "should raise an error if the input is useless" do date_text = nil expect { Mail::DateTimeElement.new(date_text) }.to raise_error(Mail::Field::ParseError) end it "should raise an error if the input is useless" do date_text = '""""""""""""""""' expect { Mail::DateTimeElement.new(date_text) }.to raise_error(Mail::Field::ParseError) end end mail-2.6.4/spec/mail/elements/envelope_from_element_spec.rb000066400000000000000000000034131267453234600240620ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::EnvelopeFromElement do describe "parsing a from envelope string" do it "should parse a full field" do expect { Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net Mon Aug 7 00:39:21 2009") }.not_to raise_error end it "should parse a full field with a double digit day" do expect { Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") }.not_to raise_error end it "should parse a full field with a single space day" do expect { Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") }.not_to raise_error end it "should parse a null sender, when specified as <>" do expect { Mail::EnvelopeFromElement.new("<> Mon Aug 17 00:39:21 2009") }.not_to raise_error end it "should parse a null sender, with a single space day" do expect { Mail::EnvelopeFromElement.new("<> Mon Aug 17 00:39:21 2009") }.not_to raise_error end end describe "accessor methods" do it "should return the address" do envelope = Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") expect(envelope.address).to eq "mikel@test.lindsaar.net" end it "should return the date_time" do envelope = Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") expect(envelope.date_time).to eq ::DateTime.parse("Mon Aug 17 00:39:21 2009") end end describe 'formatting' do it 'should format delivery date using UNIX ctime style' do time = Time.now envelope = Mail::EnvelopeFromElement.new("mikel@test.lindsaar.net #{time.ctime}") expect(envelope.to_s).to eq "mikel@test.lindsaar.net #{time.ctime}" end end end mail-2.6.4/spec/mail/elements/message_ids_element_spec.rb000066400000000000000000000030411267453234600235020ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::MessageIdsElement do it "should parse a message_id" do msg_id_text = '<1234@test.lindsaar.net>' expect { Mail::MessageIdsElement.new(msg_id_text) }.not_to raise_error end it "should parse multiple message_ids" do msg_id_text = '<1234@test.lindsaar.net> <1234@test.lindsaar.net>' expect { Mail::MessageIdsElement.new(msg_id_text) }.not_to raise_error end it "should raise an error if the input is useless" do msg_id_text = nil expect { Mail::MessageIdsElement.new(msg_id_text) }.to raise_error(Mail::Field::ParseError) end it "should raise an error if the input is useless" do msg_id_text = '""""""""""""""""' expect { Mail::MessageIdsElement.new(msg_id_text) }.to raise_error(Mail::Field::ParseError) end it "should respond to message_ids" do msg_id_text = '<1234@test.lindsaar.net> <1234@test.lindsaar.net>' msg_ids = Mail::MessageIdsElement.new(msg_id_text) expect(msg_ids.message_ids).to eq ['1234@test.lindsaar.net', '1234@test.lindsaar.net'] end it "should respond to message_id" do msg_id_text = '<1234@test.lindsaar.net>' msg_ids = Mail::MessageIdsElement.new(msg_id_text) expect(msg_ids.message_id).to eq '1234@test.lindsaar.net' end it "should not fail to parse a message id with dots in it" do text = "<4afb664ca3078_48dc..fdbe32b865532b@ax-desktop.mail>" m = Mail::MessageIdsElement.new(text) expect(m.message_id).to eq "4afb664ca3078_48dc..fdbe32b865532b@ax-desktop.mail" end end mail-2.6.4/spec/mail/elements/phrase_list_spec.rb000066400000000000000000000012551267453234600220300ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::PhraseList do describe "parsing" do it "should parse a phrase list" do parse_text = '"Mikel Lindsaar", "Mikel", you, somewhere' expect { Mail::PhraseList.new(parse_text) }.not_to raise_error end it "should raise an error if the input is useless" do parse_text = nil expect { Mail::PhraseList.new(parse_text) }.to raise_error(Mail::Field::ParseError) end it "should not raise an error if the input is empty" do parse_text = '""""""""""""""""' expect(Mail::PhraseList.new(parse_text).phrases).to eq [parse_text[1...-1]] end end end mail-2.6.4/spec/mail/elements/received_element_spec.rb000066400000000000000000000030431267453234600230070ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ReceivedElement do it "should parse a date" do received_text = 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)' expect { Mail::ReceivedElement.new(received_text) }.not_to raise_error end it "should raise an error if the input is useless" do received_text = nil expect { Mail::ReceivedElement.new(received_text) }.to raise_error(Mail::Field::ParseError) end it "should raise an error if the input is useless" do received_text = '""""""""""""""""' expect { Mail::ReceivedElement.new(received_text) }.to raise_error(Mail::Field::ParseError) end it "should give back the date time" do received_text = 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)' date_text = '10 May 2005 17:26:50 +0000 (GMT)' rec = Mail::ReceivedElement.new(received_text) expect(rec.date_time).to eq ::DateTime.parse(date_text) end it "should give back the info" do received_text = 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)' info_text = 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ' rec = Mail::ReceivedElement.new(received_text) expect(rec.info).to eq info_text end end mail-2.6.4/spec/mail/encoding_spec.rb000066400000000000000000000210611267453234600174620ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "mail encoding" do it "should allow you to assign a mail wide charset" do mail = Mail.new mail.charset = 'utf-8' expect(mail.charset).to eq 'utf-8' end describe "using default encoding" do it "should allow you to send in unencoded strings to fields and encode them" do mail = Mail.new mail.charset = 'utf-8' mail.subject = "This is あ string" result = "Subject: =?UTF-8?Q?This_is_=E3=81=82_string?=\r\n" expect(mail[:subject].encoded).to eq result end it "should allow you to send in unencoded strings to address fields and encode them" do mail = Mail.new mail.charset = 'utf-8' mail.to = "Mikel Lindsああr " result = "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= \r\n" expect(mail[:to].encoded).to eq result end it "should allow you to send in unencoded strings to address fields and encode them" do mail = Mail.new mail.charset = 'utf-8' mail.to = "あdあ " result = "To: =?UTF-8?B?44GCZOOBgg==?= \r\n" expect(mail[:to].encoded).to eq result end it "should allow you to send in multiple unencoded strings to address fields and encode them" do mail = Mail.new mail.charset = 'utf-8' mail.to = ["Mikel Lindsああr ", "あdあ "] result = "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" expect(mail[:to].encoded).to eq result end it "should allow you to send unquoted non us-ascii strings, with spaces in them" do mail = Mail.new mail.charset = 'utf-8' mail.to = ["Foo áëô îü "] result = "To: Foo =?UTF-8?B?w6HDq8O0?= =?UTF-8?B?IMOuw7w=?= \r\n" expect(mail[:to].encoded).to eq result end it "should allow you to send in multiple unencoded strings to any address field" do mail = Mail.new mail.charset = 'utf-8' ['To', 'From', 'Cc', 'Reply-To'].each do |field| mail.send("#{field.downcase.gsub("-", '_')}=", ["Mikel Lindsああr ", "あdあ "]) result = "#{field}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" expect(mail[field].encoded).to eq result end end it "should handle groups" do mail = Mail.new mail.charset = 'utf-8' mail.to = "test1@lindsaar.net, group: test2@lindsaar.net, me@lindsaar.net;" result = "To: test1@lindsaar.net, \r\n\sgroup: test2@lindsaar.net, \r\n\sme@lindsaar.net;\r\n" expect(mail[:to].encoded).to eq result end it "should handle groups with funky characters" do mail = Mail.new mail.charset = 'utf-8' mail.to = '"Mikel Lindsああr" , group: "あdあ" , me@lindsaar.net;' result = "To: =?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= , \r\n\sgroup: =?UTF-8?B?44GCZOOBgg==?= , \r\n\sme@lindsaar.net;\r\n" expect(mail[:to].encoded).to eq result end describe "quoting token safe chars" do it "should not quote the display name if unquoted" do mail = Mail.new mail.charset = 'utf-8' mail.to = 'Mikel Lindsaar ' expect(mail[:to].encoded).to eq %{To: Mikel Lindsaar \r\n} end it "should not quote the display name if already quoted" do mail = Mail.new mail.charset = 'utf-8' mail.to = '"Mikel Lindsaar" ' expect(mail[:to].encoded).to eq %{To: Mikel Lindsaar \r\n} end end describe "quoting token unsafe chars" do it "should quote the display name" do mail = Mail.new mail.charset = 'utf-8' mail.to = "Mikel @ me Lindsaar " expect(mail[:to].encoded).to eq %{To: "Mikel @ me Lindsaar" \r\n} end it "should preserve quotes needed from the user and not double quote" do mail = Mail.new mail.charset = 'utf-8' mail.to = %{"Mikel @ me Lindsaar" } expect(mail[:to].encoded).to eq %{To: "Mikel @ me Lindsaar" \r\n} end end end describe "specifying an email wide encoding" do it "should allow you to send in unencoded strings to fields and encode them" do mail = Mail.new mail.charset = 'ISO-8859-1' subject = "This is あ string" subject = subject.dup.force_encoding('ISO8859-1') if RUBY_VERSION > '1.9' mail.subject = subject result = mail[:subject].encoded string = "Subject: =?ISO-8859-1?Q?This_is_=E3=81=82_string?=\r\n" if RUBY_VERSION > '1.9' string = string.dup.force_encoding('ISO8859-1') result = result.dup.force_encoding('ISO8859-1') end expect(result).to eq string end it "should allow you to send in unencoded strings to address fields and encode them" do mail = Mail.new mail.charset = 'ISO-8859-1' string = "Mikel Lindsああr " string = string.dup.force_encoding('ISO8859-1') if RUBY_VERSION > '1.9' mail.to = string result = mail[:to].encoded string = "To: Mikel =?ISO-8859-1?B?TGluZHPjgYLjgYJy?= \r\n" if RUBY_VERSION > '1.9' string = string.dup.force_encoding('ISO8859-1') result = result.dup.force_encoding('ISO8859-1') end expect(result).to eq string end it "should allow you to send in multiple unencoded strings to address fields and encode them" do mail = Mail.new mail.charset = 'ISO-8859-1' array = ["Mikel Lindsああr ", "あdあ "] array.map! { |a| a.dup.force_encoding('ISO8859-1') } if RUBY_VERSION > '1.9' mail.to = array result = mail[:to].encoded string = "To: Mikel =?ISO-8859-1?B?TGluZHPjgYLjgYJy?= , \r\n\s=?ISO-8859-1?B?44GCZOOBgg==?= \r\n" if RUBY_VERSION > '1.9' string = string.dup.force_encoding('ISO8859-1') result = result.dup.force_encoding('ISO8859-1') end expect(result).to eq string end it "should allow you to send in multiple unencoded strings to any address field" do mail = Mail.new array = ["Mikel Lindsああr ", "あdあ "] array.map! { |a| a.dup.force_encoding('ISO8859-1') } if RUBY_VERSION > '1.9' mail.charset = 'ISO-8859-1' ['To', 'From', 'Cc', 'Reply-To'].each do |field| mail.send("#{field.downcase.gsub("-", '_')}=", array) string = "#{field}: Mikel =?ISO-8859-1?B?TGluZHPjgYLjgYJy?= , \r\n\s=?ISO-8859-1?B?44GCZOOBgg==?= \r\n" result = mail[field].encoded if RUBY_VERSION > '1.9' string = string.dup.force_encoding('ISO8859-1') result = result.dup.force_encoding('ISO8859-1') end expect(result).to eq string end end end it "should let you define a charset per part" do mail = Mail.new part = Mail::Part.new part.content_type = "text/html" part.charset = "ISO-8859-1" part.body = "blah" mail.add_part(part) expect(mail.parts[0].content_type).to eq "text/html; charset=ISO-8859-1" end it "should skip invalid characters" do m = Mail.new m['Subject'] = Mail::SubjectField.new("=?utf-8?Q?Hello_=96_World?=") if RUBY_VERSION > '1.9' expect { expect(m.subject).to be_valid_encoding }.not_to raise_error else expect(m.subject).to eq "Hello World" end end if RUBY_VERSION > '1.9' describe "#pick_encoding" do it "picks binary for nil" do expect { ::Encoding.find(nil) }.to raise_error(TypeError) expect(Mail::Ruby19.pick_encoding(nil)).to eq(Encoding::BINARY) end { "latin2" => Encoding::ISO_8859_2, "ISO_8859-1" => Encoding::ISO_8859_1, "cp-850" => Encoding::CP850, "" => Encoding::BINARY }.each do |from, to| it "should support #{from}" do expect { ::Encoding.find(from) }.to raise_error(ArgumentError) expect(Mail::Ruby19.pick_encoding(from)).to eq(to) end end end end end mail-2.6.4/spec/mail/encodings/000077500000000000000000000000001267453234600163065ustar00rootroot00000000000000mail-2.6.4/spec/mail/encodings/base64_spec.rb000066400000000000000000000013241267453234600207310ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::Encodings::Base64 do it "should encode base 64 from text" do result = "VGhpcyBpcyBhIHRlc3Q=\r\n" expect(Mail::Encodings::Base64.encode('This is a test')).to eq result end it "should decode base 64 text" do result = 'This is a test' expect(Mail::Encodings::Base64.decode("VGhpcyBpcyBhIHRlc3Q=\n")).to eq result end it "should encode base 64 from binary" do result = "AAAAAA==\r\n" expect(Mail::Encodings::Base64.encode("\000\000\000\000")).to eq result end it "should decode base 64 text" do result = "\000\000\000\000" expect(Mail::Encodings::Base64.decode("AAAAAA==\n")).to eq result end end mail-2.6.4/spec/mail/encodings/quoted_printable_spec.rb000066400000000000000000000035751267453234600232200ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::Encodings::QuotedPrintable do it "should encode quoted printable from text" do result = "This is\r\na test=\r\n" expect(Mail::Encodings::QuotedPrintable.encode("This is\na test")).to eq result end it "should encode quoted printable from crlf text" do result = "This is\r\na test=\r\n" expect(Mail::Encodings::QuotedPrintable.encode("This is\r\na test")).to eq result end it "should encode quoted printable from cr text" do result = "This is\r\na test=\r\n" expect(Mail::Encodings::QuotedPrintable.encode("This is\ra test")).to eq result end it "should decode quoted printable" do result = "This is\na test" expect(Mail::Encodings::QuotedPrintable.decode("This is\r\na test")).to eq result end it "should encode quoted printable from binary" do result = "=00=00=00=00=\r\n" expect(Mail::Encodings::QuotedPrintable.encode("\000\000\000\000")).to eq result end it "should decode quoted printable text" do result = "\000\000\000\000" expect(Mail::Encodings::QuotedPrintable.decode("=00=00=00=00")).to eq result end %w(=0D =0A =0D=0A).each do |linebreak| expected = "first line wraps\n\nsecond paragraph" it "should cope with inappropriate #{linebreak} line break encoding" do body = "first line=\r\n wraps#{linebreak}\r\n#{linebreak}\r\nsecond paragraph=\r\n" expect(Mail::Encodings::QuotedPrintable.decode(body)).to eq expected end end [["\r", "=0D"], ["\n", "=0A"], ["\r\n", "=0D=0A"]].each do |crlf, linebreak| expected = "first line wraps\n\nsecond paragraph" it "should allow encoded #{linebreak} line breaks with soft line feeds" do body = "first line=\r\n wraps#{linebreak}=\r\n#{linebreak}=\r\nsecond paragraph=\r\n" expect(Mail::Encodings::QuotedPrintable.decode(body)).to eq expected end end end mail-2.6.4/spec/mail/encodings/unix_to_unix_spec.rb000066400000000000000000000021441267453234600223760ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Encodings::UnixToUnix do def decode(str) Mail::Encodings::UnixToUnix.decode(str) end def encode(str) Mail::Encodings::UnixToUnix.encode(str) end it "decodes" do text = strip_heredoc(<<-TEXT) begin 644 Happy.txt M2&%P<'D@=&]D87D@9F]R('1O(&)E(&]N92!O9B!P96%C92!A;F0@ "1.9" it "encodes / decodes non-ascii" do expect(encode("Happy ああr")).to eq "-2&%P<'D@XX&\"XX&\"<@``\n" expected = (RUBY_ENGINE == "jruby" ? "Happy ああr" : "Happy ああr".dup.force_encoding("binary")) expect(decode("-2&%P<'D@XX&\"XX&\"<@``\n")).to eq expected end end it "can read itself" do expect(decode(encode("Happy today"))).to eq "Happy today" expect(encode(decode("+2&%P<'D@=&]D87D`\n"))).to eq "+2&%P<'D@=&]D87D`\n" end end mail-2.6.4/spec/mail/encodings_spec.rb000066400000000000000000001164671267453234600176640ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Encodings do describe "base64 Encoding" do it "should return true for base64" do expect(Mail::Encodings.defined?('base64')).to be_truthy end it "should return true for Base64" do expect(Mail::Encodings.defined?('Base64')).to be_truthy end it "should return true for :base64" do expect(Mail::Encodings.defined?(:base64)).to be_truthy end it "should return the Base64 Encoding class" do expect(Mail::Encodings.get_encoding('Base64')).to eq Mail::Encodings::Base64 end it "should return the base64 Encoding class" do expect(Mail::Encodings.get_encoding('base64')).to eq Mail::Encodings::Base64 end it "should return the base64 Encoding class" do expect(Mail::Encodings.get_encoding(:base64)).to eq Mail::Encodings::Base64 end end describe "quoted-printable Encoding" do it "should return true for quoted-printable" do expect(Mail::Encodings.defined?('quoted-printable')).to be_truthy end it "should return true for Quoted-Printable" do expect(Mail::Encodings.defined?('Quoted-Printable')).to be_truthy end it "should return true for :quoted_printable" do expect(Mail::Encodings.defined?(:quoted_printable)).to be_truthy end it "should return the QuotedPrintable Encoding class" do expect(Mail::Encodings.get_encoding('quoted-printable')).to eq Mail::Encodings::QuotedPrintable end it "should return the QuotedPrintable Encoding class" do expect(Mail::Encodings.get_encoding('Quoted-Printable')).to eq Mail::Encodings::QuotedPrintable end it "should return the QuotedPrintable Encoding class" do expect(Mail::Encodings.get_encoding(:quoted_printable)).to eq Mail::Encodings::QuotedPrintable end end describe "B encodings" do # From rfc2047: # From: =?US-ASCII?Q?Keith_Moore?= # To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= # CC: =?ISO-8859-1?Q?Andr=E9?= Pirard # Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= # =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?= # # Note: In the first 'encoded-word' of the Subject field above, the # last "=" at the end of the 'encoded-text' is necessary because each # 'encoded-word' must be self-contained (the "=" character completes a # group of 4 base64 characters representing 2 octets). An additional # octet could have been encoded in the first 'encoded-word' (so that # the encoded-word would contain an exact multiple of 3 encoded # octets), except that the second 'encoded-word' uses a different # 'charset' than the first one. # it "should just return the string if us-ascii and asked to B encoded string" do string = "This is a string" result = "This is a string" if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('US-ASCII') expect(Mail::Encodings.b_value_encode(string)).to eq(result) else encoding = 'US-ASCII' expect(Mail::Encodings.b_value_encode(string, encoding)).to eq(result) end end it "should accept other encodings" do string = "This is あ string" result = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('UTF-8') expect(Mail::Encodings.b_value_encode(string)).to eq(result) else string = "This is あ string" encoding = 'UTF-8' expect(Mail::Encodings.b_value_encode(string, encoding)).to eq(result) end end it "should complain if there is no encoding passed for Ruby < 1.9" do string = "This is あ string" if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('UTF-8') expect {Mail::Encodings.b_value_encode(string)}.not_to raise_error else expect {Mail::Encodings.b_value_encode(string, nil)}.to raise_error("Must supply an encoding") end end it "should split the string up into bite sized chunks that can be wrapped easily" do string = "This is あ really long string This is あ really long string This is あ really long string This is あ really long string This is あ really long string" result = '=?UTF-8?B?VGhpcyBpcyDjgYIgcmVhbGx5IGxvbmcgc3RyaW5nIFRoaXMgaXMg44GCIHJl?= =?UTF-8?B?YWxseSBsb25nIHN0cmluZyBUaGlzIGlzIOOBgiByZWFsbHkgbG9uZyBzdHJp?= =?UTF-8?B?bmcgVGhpcyBpcyDjgYIgcmVhbGx5IGxvbmcgc3RyaW5nIFRoaXMgaXMg44GC?= =?UTF-8?B?IHJlYWxseSBsb25nIHN0cmluZw==?=' if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('UTF-8') expect(Mail::Encodings.b_value_encode(string)).to eq(result) else encoding = 'UTF-8' expect(Mail::Encodings.b_value_encode(string, encoding)).to eq(result) end end it "should decode an encoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = "This is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should decode a long encoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgcmVhbGx5IGxvbmcgc3RyaW5nIFRoaXMgaXMg44GCIHJl?= =?UTF-8?B?YWxseSBsb25nIHN0cmluZyBUaGlzIGlzIOOBgiByZWFsbHkgbG9uZyBzdHJp?= =?UTF-8?B?bmcgVGhpcyBpcyDjgYIgcmVhbGx5IGxvbmcgc3RyaW5nIFRoaXMgaXMg44GC?= =?UTF-8?B?IHJlYWxseSBsb25nIHN0cmluZw==?=' result = "This is あ really long string This is あ really long string This is あ really long string This is あ really long string This is あ really long string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should decode UTF-16 encoded string" do string = "=?UTF-16?B?MEIwRDBGMEgwSg==?=" result = "あいうえお" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should decode UTF-32 encoded string" do string = "=?UTF-32?B?AAAwQgAAMEQAADBGAAAwSAAAMEo=?=" result = "あいうえお" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should decode a string that looks similar to an encoded string (contains '=?')" do string = "1+1=?" expect(Mail::Encodings.value_decode(string)).to eq(string) end it "should collapse adjacent words" do string = "=?utf-8?B?0L3QvtCy0YvQuSDRgdC+0YLRgNGD0LTQvdC40Log4oCUINC00L7RgNC+0YQ=?=\n =?utf-8?B?0LXQtdCy?=" result = "новый сотрудник — дорофеев" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should parse adjacent words with no space" do string = "=?utf-8?B?0L3QvtCy0YvQuSDRgdC+0YLRgNGD0LTQvdC40Log4oCUINC00L7RgNC+0YQ=?==?utf-8?B?0LXQtdCy?=" result = "новый сотрудник — дорофеев" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should collapse adjacent words with multiple encodings on one line seperated by non-spaces" do string = "Re:[=?iso-2022-jp?B?GyRCJTAlayE8JV0lcyEmJTglYyVRJXMzdDwwMnEbKEI=?=\n =?iso-2022-jp?B?GyRCPFIbKEI=?=] =?iso-2022-jp?B?GyRCSlY/LiEnGyhC?=\n =?iso-2022-jp?B?GyRCIVolMCVrITwlXSVzIVskKkxkJCQ5ZyRvJDsbKEI=?=\n =?iso-2022-jp?B?GyRCJE43byRLJEQkJCRGIUolaiUvJSglOSVIGyhC?=#1056273\n =?iso-2022-jp?B?GyRCIUsbKEI=?=" result = "Re:[グルーポン・ジャパン株式会社] 返信:【グルーポン】お問い合わせの件について(リクエスト#1056273\n )" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should decode a blank string" do expect(Mail::Encodings.value_decode("=?utf-8?B??=")).to eq "" end if '1.9'.respond_to?(:force_encoding) it "should decode 8bit encoded string" do string = "=?8bit?Q?ALPH=C3=89E?=" result = "ALPH\xC3\x89E" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should decode ks_c_5601-1987 encoded string" do string = '=?ks_c_5601-1987?B?seggx/bB+A==?= '.dup.force_encoding('us-ascii') expect(Mail::Encodings.value_decode(string)).to eq("김 현진 ") end it "should decode shift-jis encoded string" do string = '=?shift-jis?Q?=93=FA=96{=8C=EA=?='.dup.force_encoding('us-ascii') expect(Mail::Encodings.value_decode(string)).to eq("日本語") end it "should decode GB18030 encoded string misidentified as GB2312" do string = '=?GB2312?B?6V8=?='.dup.force_encoding('us-ascii') expect(Mail::Encodings.value_decode(string)).to eq("開") end end end describe "Q encodings" do # From rfc2047: # From: =?US-ASCII?Q?Keith_Moore?= # To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= # CC: =?ISO-8859-1?Q?Andr=E9?= Pirard # Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= # =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?= # # Note: In the first 'encoded-word' of the Subject field above, the # last "=" at the end of the 'encoded-text' is necessary because each # 'encoded-word' must be self-contained (the "=" character completes a # group of 4 base64 characters representing 2 octets). An additional # octet could have been encoded in the first 'encoded-word' (so that # the encoded-word would contain an exact multiple of 3 encoded # octets), except that the second 'encoded-word' uses a different # 'charset' than the first one. # it "should just return the string if us-ascii and asked to Q encoded string" do string = "This is a string" if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('US-ASCII') expect(Mail::Encodings.q_value_encode(string)).to eq "This is a string" else encoding = 'US-ASCII' expect(Mail::Encodings.q_value_encode(string, encoding)).to eq "This is a string" end end it "should complain if there is no encoding passed for Ruby < 1.9" do string = "This is あ string" if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('UTF-8') expect {Mail::Encodings.q_value_encode(string)}.not_to raise_error else expect {Mail::Encodings.q_value_encode(string)}.to raise_error("Must supply an encoding") end end it "should accept other character sets" do string = "This is あ string" if RUBY_VERSION >= "1.9.1" string = string.dup.force_encoding('UTF-8') expect(Mail::Encodings.q_value_encode(string)).to eq '=?UTF-8?Q?This_is_=E3=81=82_string?=' else encoding = 'UTF-8' expect(Mail::Encodings.q_value_encode(string, encoding)).to eq '=?UTF-8?Q?This_is_=E3=81=82_string?=' end end it "should decode an encoded string" do string = '=?UTF-8?Q?This_is_=E3=81=82_string?=' result = "This is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should decode q encoded =5F as underscore" do string = "=?UTF-8?Q?This_=C2=AD_and=5Fthat?=" result = "This ­ and_that" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should not fold a long string that has no spaces" do original = "ВосстановлениеВосстановлениеВашегопароля" if RUBY_VERSION >= '1.9' original = original.dup.force_encoding('UTF-8') result = "Subject: =?UTF-8?Q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=B0=D1=88=D0=B5=D0=B3=D0=BE=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F?=\r\n" else result = "Subject: =?UTF-8?Q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=B0=D1=88=D0=B5=D0=B3=D0=BE=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F?=\r\n" end mail = Mail.new mail.subject = original expect(mail[:subject].decoded).to eq original expect(mail[:subject].encoded).to eq result end it "should round trip a complex string properly" do original = "ВосстановлениеВосстановлениеВашегопароля This is a NUT?????Z__string that== could (break) anything" if RUBY_VERSION >= '1.9' original = original.dup.force_encoding('UTF-8') end result = "Subject: =?UTF-8?Q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=92=D0=B0=D1=88=D0=B5=D0=B3=D0=BE=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F?=\r\n =?UTF-8?Q?_This_is_a_NUT=3F=3F=3F=3F=3FZ=5F=5Fstring_that=3D=3D_could?=\r\n =?UTF-8?Q?_=28break=29_anything?=\r\n" mail = Mail.new mail.subject = original expect(mail[:subject].decoded).to eq original expect(mail[:subject].encoded).to eq result mail = Mail.new(mail.encoded) expect(mail[:subject].decoded).to eq original expect(mail[:subject].encoded).to eq result mail = Mail.new(mail.encoded) expect(mail[:subject].decoded).to eq original expect(mail[:subject].encoded).to eq result end it "should round trip another complex string (koi-8)" do original = "Слово 9999 и число" mail = Mail.new mail.subject = (RUBY_VERSION >= "1.9" ? original.encode('koi8-r') : Iconv.conv('koi8-r', 'UTF-8', original)) mail[:subject].charset = 'koi8-r' wrapped = mail[:subject].wrapped_value unwrapped = Mail::Encodings.value_decode(wrapped) expect(unwrapped.gsub("Subject: ", "")).to eq original end it "should decode a blank string" do expect(Mail::Encodings.value_decode("=?utf-8?Q??=")).to eq "" end it "should decode a string with spaces" do expect(Mail::Encodings.value_decode("=?utf-8?Q?a a?=")).to eq "a a" end it "should treat unrecognized charsets as binary" do if RUBY_VERSION >= "1.9" expect(Mail::Encodings.value_decode("=?ISO-FOOO?Q?Morten_R=F8verdatt=E9r?=")).to eq "Morten Rverdattr" end end end describe "mixed Q and B encodings" do it "should decode an encoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?= =?UTF-8?Q?_This_was_=E3=81=82_string?=' result = "This is あ string This was あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end end describe "parameter MIME encodings" do # Character set and language information may be combined with the # parameter continuation mechanism. For example: # # Content-Type: application/x-stuff # title*0*=us-ascii'en'This%20is%20even%20more%20 # title*1*=%2A%2A%2Afun%2A%2A%2A%20 # title*2="isn't it!" # # Note that: # # (1) Language and character set information only appear at # the beginning of a given parameter value. # # (2) Continuations do not provide a facility for using more # than one character set or language in the same # parameter value. # # (3) A value presented using multiple continuations may # contain a mixture of encoded and unencoded segments. # # (4) The first segment of a continuation MUST be encoded if # language and character set information are given. # # (5) If the first segment of a continued parameter value is # encoded the language and character set field delimiters # MUST be present even when the fields are left blank. # before(:each) do Mail.defaults do param_encode_language('en') end end it "should leave an unencoded string alone" do string = "this isn't encoded" result = "this isn't encoded" expect(Mail::Encodings.param_decode(string, 'us-ascii')).to eq result end it "should unencode an encoded string" do string = "This%20is%20even%20more%20" result = "This is even more " result = result.dup.force_encoding('us-ascii') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_decode(string, 'us-ascii')).to eq result end it "should unencoded an encoded string and return the right charset on 1.9" do string = "This%20is%20even%20more%20" result = "This is even more " result = result.dup.force_encoding('us-ascii') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_decode(string, 'us-ascii')).to eq result end it "should unencode a complete string that included unencoded parts" do string = "This%20is%20even%20more%20%2A%2A%2Afun%2A%2A%2A%20isn't it" result = "This is even more ***fun*** isn't it" result = result.dup.force_encoding('iso-8859-1') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_decode(string, 'iso-8859-1')).to eq result end it "should encode a string" do string = "This is あ string" if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_encode(string)).to eq "utf-8'en'This%20is%20%20%E3%81%82%20string" else expect(Mail::Encodings.param_encode(string)).to eq "utf8'en'This%20is%20%20%E3%81%82%20string" end end it "should just quote US-ASCII with spaces" do string = "This is even more" if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_encode(string)).to eq '"This is even more"' else expect(Mail::Encodings.param_encode(string)).to eq '"This is even more"' end end it "should leave US-ASCII without spaces alone" do string = "fun" if RUBY_VERSION >= '1.9' expect(Mail::Encodings.param_encode(string)).to eq 'fun' else expect(Mail::Encodings.param_encode(string)).to eq 'fun' end end end describe "decoding a string and detecting the encoding type" do it "should detect an encoded Base64 string to the decoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = "This is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a multiple encoded Base64 string to the decoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?==?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a multiple encoded Base64 string with a space to the decoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?= =?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a multiple encoded Base64 string with a whitespace to the decoded string" do string = "=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?= \r\n\s=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=" result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should decode B and Q encodings together if needed" do string = "=?UTF-8?Q?This_is_=E3=81=82_string?==?UTF-8?Q?This_is_=E3=81=82_string?= Some non encoded stuff =?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?= \r\n\sMore non encoded stuff" result = "This is あ stringThis is あ string Some non encoded stuff This is あ string \r\n\sMore non encoded stuff" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a encoded and unencoded Base64 string to the decoded string" do string = "Some non encoded stuff =?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?= \r\n\sMore non encoded stuff" result = "Some non encoded stuff This is あ string \r\n\sMore non encoded stuff" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect an encoded QP string to the decoded string" do string = '=?UTF-8?Q?This_is_=E3=81=82_string?=' result = "This is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should decode UTF-16 encoded string" do string = "=?UTF-16?Q?0B0D0F0H0J=?=" result = "あいうえお" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should decode UTF-32 encoded string" do string = "=?UTF-32?Q?=00=000B=00=000D=00=000F=00=000H=00=000J=?=" result = "あいうえお" expect(Mail::Encodings.value_decode(string)).to eq(result) end it "should detect multiple encoded QP string to the decoded string" do string = '=?UTF-8?Q?This_is_=E3=81=82_string?==?UTF-8?Q?This_is_=E3=81=82_string?=' result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect multiple encoded QP string with a space to the decoded string" do string = '=?UTF-8?Q?This_is_=E3=81=82_string?= =?UTF-8?Q?This_is_=E3=81=82_string?=' result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect multiple encoded QP string with a space to the decoded string" do string = "=?UTF-8?Q?This_is_=E3=81=82_string?= \r\n\s=?UTF-8?Q?This_is_=E3=81=82_string?=" result = "This is あ stringThis is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a encoded and unencoded QP string to the decoded string" do string = "Some non encoded stuff =?UTF-8?Q?This_is_=E3=81=82_string?= \r\n\sMore non encoded stuff" result = "Some non encoded stuff This is あ string \r\n\sMore non encoded stuff" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should detect a plain string and return it" do string = 'This is あ string' result = "This is あ string" result = result.dup.force_encoding('UTF-8') if RUBY_VERSION >= '1.9' expect(Mail::Encodings.value_decode(string)).to eq result end it "should handle a very long string efficiently" do string = "This is a string " * 10000 expect(Mail::Encodings.value_decode(string)).to eq string end it "should handle Base64 encoded ISO-2022-JP string" do string = "ISO-2022-JP =?iso-2022-jp?B?GyRCJCQkPSRLITwkXiRrJEskSyE8JDgkJyQkJFQhPBsoQg==?=" result = "ISO-2022-JP いそにーまるににーじぇいぴー" expect(Mail::Encodings.value_decode(string)).to eq result end end describe "altering an encoded text to decoded and visa versa" do describe "decoding" do before(:each) do @original = $KCODE if RUBY_VERSION < '1.9' end after(:each) do $KCODE = @original if RUBY_VERSION < '1.9' end it "should detect an encoded Base64 string and return the decoded string" do string = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = "This is あ string" if RUBY_VERSION >= '1.9' result = result.dup.force_encoding('UTF-8') else $KCODE = 'UTF-8' end expect(Mail::Encodings.decode_encode(string, :decode)).to eq result end it "should detect an encoded QP string and return the decoded string" do string = '=?UTF-8?Q?This_is_=E3=81=82_string?=' result = "This is あ string" if RUBY_VERSION >= '1.9' result = result.dup.force_encoding('UTF-8') else $KCODE = 'UTF-8' end expect(Mail::Encodings.decode_encode(string, :decode)).to eq result end it "should detect an a string is already decoded and leave it alone" do string = 'This is あ string' result = "This is あ string" if RUBY_VERSION >= '1.9' result = result.dup.force_encoding('UTF-8') else $KCODE = 'UTF-8' end expect(Mail::Encodings.decode_encode(string, :decode)).to eq result end end describe "encoding" do it "should encode a string into Base64" do string = "This is あ string" if RUBY_VERSION >= '1.9' result = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' result = result.dup.force_encoding('UTF-8') else result = '=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=' $KCODE = 'UTF-8' end expect(Mail::Encodings.decode_encode(string, :encode)).to eq result end it "should leave a string that doesn't need encoding alone" do string = 'This is a string' result = "This is a string" if RUBY_VERSION >= '1.9' result = result.dup.force_encoding('UTF-8') else $KCODE = 'UTF-8' end expect(Mail::Encodings.decode_encode(string, :encode)).to eq result end end describe "unquote and convert to" do it "should unquote quoted printable and convert to utf-8" do a ="=?ISO-8859-1?Q?[166417]_Bekr=E6ftelse_fra_Rejsefeber?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "[166417] Bekr\303\246ftelse fra Rejsefeber" end it "should unquote base64 and convert to utf-8" do a ="=?ISO-8859-1?B?WzE2NjQxN10gQmVrcuZmdGVsc2UgZnJhIFJlanNlZmViZXI=?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "[166417] Bekr\303\246ftelse fra Rejsefeber" end it "should handle no charset" do a ="[166417]_Bekr=E6ftelse_fra_Rejsefeber" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "[166417]_Bekr=E6ftelse_fra_Rejsefeber" end it "should unquote multiple lines" do a ="=?utf-8?q?Re=3A_=5B12=5D_=23137=3A_Inkonsistente_verwendung_von_=22Hin?==?utf-8?b?enVmw7xnZW4i?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "Re: [12] #137: Inkonsistente verwendung von \"Hinzuf\303\274gen\"" end it "should unquote a string in the middle of the text" do a ="Re: Photos =?ISO-8859-1?Q?Brosch=FCre_Rand?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "Re: Photos Brosch\303\274re Rand" end it "should unquote and change to an ISO encoding if we really want" do a = "=?ISO-8859-1?Q?Brosch=FCre_Rand?=" b = Mail::Encodings.unquote_and_convert_to(a, 'iso-8859-1') expected = "Brosch\374re Rand" expected = expected.dup.force_encoding('iso-8859-1') if expected.respond_to?(:force_encoding) expect(b).to eq expected end it "should unquote Shift_JIS QP with trailing =" do a = "=?Shift_JIS?Q?=93=FA=96{=8C=EA=?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "日本語" end it "handles Windows 1252 QP encoding" do # TODO: JRuby 1.7.0 has an encoding issue https://jira.codehaus.org/browse/JRUBY-6999 skip if defined?(JRUBY_VERSION) && JRUBY_VERSION >= '1.7.0' a = "=?WINDOWS-1252?Q?simple_=96_dash_=96_?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "simple – dash – " end it "should recognize iso646-us" do decoded = Mail::Encodings.value_decode "[kj] =?ISO646-US?Q?Re:_[kj]_[KJ]_Money_is_not_our_god_should_?=\r\n =?ISO646-US?Q?be_played_on_US_Tour...+_Elys=3Fe_Montmartre?=" expect(decoded).to eq("[kj] Re: [kj] [KJ] Money is not our god should be played on US Tour...+ Elys?e Montmartre") end it "should unquote multiple strings in the middle of the text" do a = "=?Shift_JIS?Q?=93=FA=96{=8C=EA=?= , =?Shift_JIS?Q?=93=FA=96{=8C=EA=?= " b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "日本語 , 日本語 " end it "should handle multiline quoted headers with mixed content" do a = "=?iso-2022-jp?B?GyRCP3AwQxsoQg==?=2=?iso-2022-jp?B?GyRCIiobKEI=?= =?iso-2022-jp?B?GyRCOkc2YUxnPj4kcj5+JGsySCQsJFskSCRzJEk4K0V2GyhC?= =?iso-2022-jp?B?GyRCJD8kaSRKJCQhKjxkJDckJCQzJEgkRyQ5JE0hI0Z8GyhC?= =?iso-2022-jp?B?GyRCS1wkTiQkJCQkSCQzJG0hIiRvJFMkNSRTJE5AJDMmGyhC?= =?iso-2022-jp?B?GyRCJCw8OiRvJGwkRCREJCIkazg9Ol8hIiRKJHMkSCQrGyhC?= =?iso-2022-jp?B?GyRCOGVAJCRLO0QkNSRNJFAhIkxeQk4kSiQkISokSCReGyhC?= =?iso-2022-jp?B?GyRCJF4kTztXJCYkTiRAISMbKEI=?=" b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "瑞庵2→最近門松を飾る家がほとんど見当たらない!寂しいことですね。日本のいいところ、わびさびの世界が失われつつある現在、なんとか後世に残さねば、勿体ない!とままは思うのだ。" end it "should handle quoted string with mixed content that have a plain string at the end" do a = 'Der Kunde ist K=?utf-8?B?w7Y=?=nig' b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "Der Kunde ist König" end it "should handle utf_8" do a = 'Der Kunde ist K=?utf_8?B?w7Y=?=nig' b = Mail::Encodings.unquote_and_convert_to(a, 'utf-8') expect(b).to eq "Der Kunde ist König" end end end describe "quoted printable encoding and decoding" do it "should handle underscores in the text" do expected = 'something_with_underscores' expect(Mail::Encodings.get_encoding(:quoted_printable).encode(expected).unpack("M").first).to eq expected end it "should handle underscores in the text" do expected = 'something with_underscores' expect(Mail::Encodings.get_encoding(:quoted_printable).encode(expected).unpack("M").first).to eq expected end it "should keep the underscores in the text" do expected = 'something_with_underscores' encoded = Mail::Encodings.get_encoding(:quoted_printable).encode(expected) expect(Mail::Encodings.get_encoding(:quoted_printable).decode(encoded)).to eq expected end it "should handle a new line in the text" do if RUBY_VERSION >= '1.9' expected = "\nRe: ol\341".dup.force_encoding('ISO-8859-1').encode('utf-8') else expected = Iconv.conv("UTF-8", "ISO-8859-1", "\nRe: ol\341") end encoded = "=?ISO-8859-1?Q?\nRe=3A_ol=E1?=" expect(Mail::Encodings.value_decode(encoded)).to eq expected end end describe "pre encoding non usascii text" do it "should not change an ascii string" do raw = 'mikel@test.lindsaar.net' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq raw end it "should encode a display that contains non usascii" do raw = 'Lindsああr ' encoded = '=?UTF-8?B?TGluZHPjgYLjgYJy?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode a single token that contains non usascii" do raw = '' encoded = Mail::Encodings.encode_non_usascii(raw, 'utf-8') expect(Mail::Encodings.value_decode(encoded)).to eq raw end it "should encode a display that contains non usascii with quotes as no quotes" do raw = '"Lindsああr" ' encoded = '=?UTF-8?B?TGluZHPjgYLjgYJy?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode a display name with us-ascii and non-usascii parts" do raw = 'Mikel Lindsああr ' encoded = 'Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode a display name with us-ascii and non-usascii parts ignoring quotes" do raw = '"Mikel Lindsああr" ' encoded = '=?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode a quoted display name with us-ascii and non-usascii that ends with a non-usascii part" do raw = '"Marc André" ' encoded = '=?UTF-8?B?TWFyYyBBbmRyw6k=?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode multiple addresses correctly" do raw = '"Mikel Lindsああr" , "あdあ" ' encoded = '=?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= , =?UTF-8?B?44GCZOOBgg==?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode multiple unquoted addresses correctly" do raw = 'Mikel Lindsああr , あdあ ' encoded = 'Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , =?UTF-8?B?44GCZOOBgg==?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should encode multiple un bracketed addresses and groups correctly" do raw = '"Mikel Lindsああr" test1@lindsaar.net, group: "あdあ" test2@lindsaar.net, me@lindsaar.net;' encoded = '=?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= test1@lindsaar.net, group: =?UTF-8?B?44GCZOOBgg==?= test2@lindsaar.net, me@lindsaar.net;' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end it "should correctly match and encode non-usascii letters at the end of a quoted string" do raw = '"Felix Baarß" ' encoded = '=?UTF-8?B?RmVsaXggQmFhcsOf?= ' expect(Mail::Encodings.encode_non_usascii(raw, 'utf-8')).to eq encoded end end describe "address encoding" do it "should not do anything to a plain address" do raw = 'mikel@test.lindsaar.net' encoded = 'mikel@test.lindsaar.net' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should encode an address correctly" do raw = '"Mikel Lindsああr" ' encoded = '=?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= ' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should encode multiple addresses correctly" do raw = ['"Mikel Lindsああr" ', '"あdあ" '] encoded = '=?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= , =?UTF-8?B?44GCZOOBgg==?= ' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should handle a single ascii address correctly from a string" do raw = ['"Mikel Lindsaar" '] encoded = '"Mikel Lindsaar" ' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should handle multiple ascii addresses correctly from a string" do raw = 'Mikel Lindsaar , Ada ' encoded = 'Mikel Lindsaar , Ada ' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should handle ascii addresses correctly as an array" do raw = ['Mikel Lindsaar ', 'Ada '] encoded = 'Mikel Lindsaar , Ada ' expect(Mail::Encodings.address_encode(raw, 'utf-8')).to eq encoded end it "should ignore single nil" do expect(Mail::Encodings.address_encode(nil, 'utf-8')).to eq nil end it "should ignore nil in arrays" do expect(Mail::Encodings.address_encode(["aa@bb.com", nil], 'utf-8')).to eq "aa@bb.com" end end describe ".charset_encoder" do class CustomEncoder def encode(str, charset) String.new("#{str}-#{charset}") end end def with_encoder(encoder) old, Mail::Ruby19.charset_encoder = Mail::Ruby19.charset_encoder, encoder yield ensure Mail::Ruby19.charset_encoder = old end it "can use a custom encoder" do if RUBY_VERSION > "1.9" with_encoder CustomEncoder.new do expect(Mail::Encodings.value_decode("=?utf-123?Q?xxx?=")).to eq "xxx-utf-123" end end end it "uses converter for params" do if RUBY_VERSION > "1.9" with_encoder CustomEncoder.new do result = Mail::Encodings.param_decode("'ja'%d0%91%d0%b5%d0%b7%d1%8b%d0%bc%d1%8f%d0%bd%d0%bd%d1%8b%d0%b912.png", 'iso-2022-jp') expect(result).to eq "'ja'Безымянный12.png-iso-2022-jp" end end end it "can convert ansi with best effort" do if RUBY_VERSION > "1.9" with_encoder Mail::Ruby19::BestEffortCharsetEncoder.new do expect(Mail::Encodings.value_decode("=?windows-1258?Q?SV=3A_Spr=F8sm=E5l_om_tilbod?=")).to eq "SV: Sprøsmål om tilbod" end end end end describe ".collapse_adjacent_encodings" do def convert(from, to) expect(Mail::Encodings.collapse_adjacent_encodings(from)).to eq to end it "leaves blank intact" do convert " ", [" "] end it "leaves pure unencoded intact" do convert "AB CD EF ?= =? G", ["AB CD EF ?= =? G"] end it "does not modify 1 encoded" do convert "=?iso-2022-jp?B?X=?=", ["=?iso-2022-jp?B?X=?="] end it "splits unencoded and encoded into separate parts" do convert "A=?iso-2022-jp?B?X=?=B", ["A", "=?iso-2022-jp?B?X=?=", "B"] end it "joins adjacent encodings" do convert "A=?iso-2022-jp?B?X=?==?iso-2022-jp?B?Y=?=B", ["A", "=?iso-2022-jp?B?X=?==?iso-2022-jp?B?Y=?=", "B"] end it "joins adjacent encodings without unencoded" do convert "=?iso-2022-jp?B?X=?==?iso-2022-jp?B?Y=?=", ["=?iso-2022-jp?B?X=?==?iso-2022-jp?B?Y=?="] end it "does not join encodings when separated by unencoded" do convert "A=?iso-2022-jp?B?X=?=B=?iso-2022-jp?B?Y=?=C", ["A", "=?iso-2022-jp?B?X=?=", "B", "=?iso-2022-jp?B?Y=?=", "C"] end it "does not join different encodings" do convert "A=?iso-2022-jp?B?X=?==?utf-8?B?Y=?=B", ["A", "=?iso-2022-jp?B?X=?=", "=?utf-8?B?Y=?=", "B"] end end describe ".pick_encoding" do it "finds encoding" do if RUBY_VERSION >= "1.9" expect(Mail::Ruby19.pick_encoding("Windows-1252")).to eq Encoding::Windows_1252 end end it "uses binary for unfound" do if RUBY_VERSION >= "1.9" expect(Mail::Ruby19.pick_encoding("ISO-Foo")).to eq Encoding::BINARY end end end end mail-2.6.4/spec/mail/example_emails_spec.rb000066400000000000000000000356361267453234600206760ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "Test emails" do describe "from RFC2822" do # From RFC 2822: # This could be called a canonical message. It has a single author, # John Doe, a single recipient, Mary Smith, a subject, the date, a # message identifier, and a textual message in the body. it "should handle the basic test email" do mail = Mail.read(fixture('emails', 'rfc2822', 'example01.eml')) expect(mail.from).to eq ["jdoe@machine.example"] expect(mail.to).to eq ['mary@example.net'] expect(mail.message_id).to eq '1234@local.machine.example' expect(mail.date).to eq ::DateTime.parse('21 Nov 1997 09:55:06 -0600') expect(mail.subject).to eq 'Saying Hello' end # From RFC 2822: # If John's secretary Michael actually sent the message, though John # was the author and replies to this message should go back to him, the # sender field would be used: it "should handle the sender test email" do mail = Mail.read(fixture('emails', 'rfc2822', 'example02.eml')) expect(mail.from).to eq ['jdoe@machine.example'] expect(mail.sender).to eq 'mjones@machine.example' expect(mail.to).to eq ['mary@example.net'] expect(mail.message_id).to eq '1234@local.machine.example' expect(mail.date).to eq ::DateTime.parse('21 Nov 1997 09:55:06 -0600') expect(mail.subject).to eq 'Saying Hello' end # From RFC 2822: # This message includes multiple addresses in the destination fields # and also uses several different forms of addresses. # # Note that the display names for Joe Q. Public and Giant; "Big" Box # needed to be enclosed in double-quotes because the former contains # the period and the latter contains both semicolon and double-quote # characters (the double-quote characters appearing as quoted-pair # construct). Conversely, the display name for Who? could appear # without them because the question mark is legal in an atom. Notice # also that jdoe@example.org and boss@nil.test have no display names # associated with them at all, and jdoe@example.org uses the simpler # address form without the angle brackets. # # "Giant; \"Big\" Box" it "should handle multiple recipients test email" do mail = Mail.read(fixture('emails', 'rfc2822', 'example03.eml')) expect(mail.from).to eq ['john.q.public@example.com'] expect(mail.to).to eq ['mary@x.test', 'jdoe@example.org', 'one@y.test'] expect(mail.cc).to eq ['boss@nil.test', "sysservices@example.net"] expect(mail.message_id).to eq '5678.21-Nov-1997@example.com' expect(mail.date).to eq ::DateTime.parse('1 Jul 2003 10:52:37 +0200') end # From RFC 2822: # A.1.3. Group addresses # In this message, the "To:" field has a single group recipient named A # Group which contains 3 addresses, and a "Cc:" field with an empty # group recipient named Undisclosed recipients. it "should handle group address email test" do mail = Mail.read(fixture('emails', 'rfc2822', 'example04.eml')) expect(mail.from).to eq ['pete@silly.example'] expect(mail.to).to eq ['c@a.test', 'joe@where.test', 'jdoe@one.test'] expect(mail[:cc].group_names).to eq ['Undisclosed recipients'] expect(mail.message_id).to eq 'testabcd.1234@silly.example' expect(mail.date).to eq ::DateTime.parse('Thu, 13 Feb 1969 23:32:54 -0330') end # From RFC 2822: # A.2. Reply messages # The following is a series of three messages that make up a # conversation thread between John and Mary. John firsts sends a # message to Mary, Mary then replies to John's message, and then John # replies to Mary's reply message. # # Note especially the "Message-ID:", "References:", and "In-Reply-To:" # fields in each message. it "should handle reply messages" do mail = Mail.read(fixture('emails', 'rfc2822', 'example05.eml')) expect(mail.from).to eq ["jdoe@machine.example"] expect(mail.to).to eq ['mary@example.net'] expect(mail.subject).to eq 'Saying Hello' expect(mail.message_id).to eq '1234@local.machine.example' expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600') end # From RFC 2822: # When sending replies, the Subject field is often retained, though # prepended with "Re: " as described in section 3.6.5. # Note the "Reply-To:" field in the below message. When John replies # to Mary's message above, the reply should go to the address in the # "Reply-To:" field instead of the address in the "From:" field. it "should handle reply message 2" do mail = Mail.read(fixture('emails', 'rfc2822', 'example06.eml')) expect(mail.from).to eq ['mary@example.net'] expect(mail.to).to eq ['jdoe@machine.example'] expect(mail.reply_to).to eq ['smith@home.example'] expect(mail.subject).to eq 'Re: Saying Hello' expect(mail.message_id).to eq '3456@example.net' expect(mail[:in_reply_to].message_ids).to eq ['1234@local.machine.example'] expect(mail[:references].message_ids).to eq ['1234@local.machine.example'] expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 10:01:10 -0600') end # From RFC 2822: # Final reply message it "should handle the final reply message" do mail = Mail.read(fixture('emails', 'rfc2822', 'example07.eml')) expect(mail.to).to eq ['smith@home.example'] expect(mail.from).to eq ['jdoe@machine.example'] expect(mail.subject).to eq 'Re: Saying Hello' expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 11:00:00 -0600') expect(mail.message_id).to eq 'abcd.1234@local.machine.tld' expect(mail.in_reply_to).to eq '3456@example.net' expect(mail[:references].message_ids).to eq ['1234@local.machine.example', '3456@example.net'] end # From RFC2822 # A.3. Resent messages # Say that Mary, upon receiving this message, wishes to send a copy of # the message to Jane such that (a) the message would appear to have # come straight from John; (b) if Jane replies to the message, the # reply should go back to John; and (c) all of the original # information, like the date the message was originally sent to Mary, # the message identifier, and the original addressee, is preserved. In # this case, resent fields are prepended to the message: # # If Jane, in turn, wished to resend this message to another person, # she would prepend her own set of resent header fields to the above # and send that. it "should handle the rfc resent example email" do mail = Mail.read(fixture('emails', 'rfc2822', 'example08.eml')) expect(mail.resent_from).to eq ['mary@example.net'] expect(mail.resent_to).to eq ['j-brown@other.example'] expect(mail.resent_date).to eq ::DateTime.parse('Mon, 24 Nov 1997 14:22:01 -0800') expect(mail.resent_message_id).to eq '78910@example.net' expect(mail.from).to eq ['jdoe@machine.example'] expect(mail.to).to eq ['mary@example.net'] expect(mail.subject).to eq 'Saying Hello' expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600') expect(mail.message_id).to eq '1234@local.machine.example' end # A.4. Messages with trace fields # As messages are sent through the transport system as described in # [RFC2821], trace fields are prepended to the message. The following # is an example of what those trace fields might look like. Note that # there is some folding white space in the first one since these lines # can be long. it "should handle the RFC trace example email" do mail = Mail.read(fixture('emails', 'rfc2822', 'example09.eml')) expect(mail.received[0].info).to eq 'from x.y.test by example.net via TCP with ESMTP id ABC12345 for ' expect(mail.received[0].date_time).to eq ::DateTime.parse('21 Nov 1997 10:05:43 -0600') expect(mail.received[1].info).to eq 'from machine.example by x.y.test' expect(mail.received[1].date_time).to eq ::DateTime.parse('21 Nov 1997 10:01:22 -0600') expect(mail.from).to eq ['jdoe@machine.example'] expect(mail.to).to eq ['mary@example.net'] expect(mail.subject).to eq 'Saying Hello' expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600') expect(mail.message_id).to eq '1234@local.machine.example' end # A.5. White space, comments, and other oddities # White space, including folding white space, and comments can be # inserted between many of the tokens of fields. Taking the example # from A.1.3, white space and comments can be inserted into all of the # fields. # # The below example is aesthetically displeasing, but perfectly legal. # Note particularly (1) the comments in the "From:" field (including # one that has a ")" character appearing as part of a quoted-pair); (2) # the white space absent after the ":" in the "To:" field as well as # the comment and folding white space after the group name, the special # character (".") in the comment in Chris Jones's address, and the # folding white space before and after "joe@example.org,"; (3) the # multiple and nested comments in the "Cc:" field as well as the # comment immediately following the ":" after "Cc"; (4) the folding # white space (but no comments except at the end) and the missing # seconds in the time of the date field; and (5) the white space before # (but not within) the identifier in the "Message-ID:" field. it "should handle the rfc whitespace test email" do skip "fixed in pr#487" mail = Mail.read(fixture('emails', 'rfc2822', 'example10.eml')) expect(mail.from).to eq ["pete(his account)@silly.test"] expect(mail.to).to eq ["c@public.example", "joe@example.org", "jdoe@one.test"] expect(mail[:cc].group_names).to eq ['(Empty list)(start)Undisclosed recipients '] expect(mail.date).to eq ::DateTime.parse('Thu, 13 Feb 1969 23:32 -0330') expect(mail.message_id).to eq 'testabcd.1234@silly.test' end # A.6. Obsoleted forms # The following are examples of obsolete (that is, the "MUST NOT # generate") syntactic elements described in section 4 of this # document. # A.6.1. Obsolete addressing # Note in the below example the lack of quotes around Joe Q. Public, # the route that appears in the address for Mary Smith, the two commas # that appear in the "To:" field, and the spaces that appear around the # "." in the jdoe address. it "should handle the rfc obsolete addressing" do pending mail = Mail.read(fixture('emails', 'rfc2822', 'example11.eml')) expect(mail[:from].addresses).to eq ['john.q.public@example.com'] expect(mail.from).to eq '"Joe Q. Public" ' expect(mail.to).to eq ["@machine.tld:mary@example.net", 'jdoe@test.example'] expect(mail.date).to eq ::DateTime.parse('Tue, 1 Jul 2003 10:52:37 +0200') expect(mail.message_id).to eq '5678.21-Nov-1997@example.com' end # A.6.2. Obsolete dates # # The following message uses an obsolete date format, including a non- # numeric time zone and a two digit year. Note that although the # day-of-week is missing, that is not specific to the obsolete syntax; # it is optional in the current syntax as well. it "should handle the rfc obsolete dates" do pending mail = Mail.read(fixture('emails', 'rfc2822', 'example12.eml')) expect(mail.from).to eq 'jdoe@machine.example' expect(mail.to).to eq 'mary@example.net' expect(mail.date).to eq ::DateTime.parse('21 Nov 97 09:55:06 GMT') expect(mail.message_id).to eq '1234@local.machine.example' end # A.6.3. Obsolete white space and comments # # White space and comments can appear between many more elements than # in the current syntax. Also, folding lines that are made up entirely # of white space are legal. # # Note especially the second line of the "To:" field. It starts with # two space characters. (Note that "__" represent blank spaces.) # Therefore, it is considered part of the folding as described in # section 4.2. Also, the comments and white space throughout # addresses, dates, and message identifiers are all part of the # obsolete syntax. it "should handle the rfc obsolete whitespace email" do pending mail = Mail.read(fixture('emails', 'rfc2822', 'example13.eml')) expect(mail.from).to eq 'John Doe ' expect(mail.to).to eq 'Mary Smith ' expect(mail.date).to eq ::DateTime.parse('Fri, 21 Nov 1997 09:55:06 -0600') expect(mail.message_id).to eq '1234@local(blah).machine.example' expect { Mail::Message.new(email) }.not_to raise_error end it "should handle folding subject" do mail = Mail.read(fixture('emails', 'rfc2822', 'example14.eml')) expect(mail.from).to eq ["atsushi@example.com"] expect(mail.subject).to eq "Re: TEST テストテスト" expect(mail.message_id).to eq '0CC5E11ED2C1D@example.com' expect(mail.body.decoded).to eq "Hello\n" end end describe "from the wild" do describe "raw_email_encoded_stack_level_too_deep.eml" do before(:each) do @message = Mail.read(fixture('emails', 'mime_emails', 'raw_email_encoded_stack_level_too_deep.eml')) end it "should return an 'encoded' version without raising a SystemStackError" do expect { @message.encoded }.not_to raise_error end it "should have two parts" do expect(@message.parts.length).to eq 2 end end describe "sig_only_email.eml" do before(:each) do @message = Mail.read(fixture('emails', 'mime_emails', 'sig_only_email.eml')) end it "should not error on multiart/signed emails" do expect { @message.encoded }.not_to raise_error end it "should have one attachment called signature.asc" do expect(@message.attachments.length).to eq 1 expect(@message.attachments.first.filename).to eq 'signature.asc' end end describe "handling invalid group lists" do before(:each) do @message = Mail.read(fixture('emails', 'error_emails', 'empty_group_lists.eml')) end it "should parse the email and encode without crashing" do expect { @message.encoded }.not_to raise_error end it "should return an empty groups list" do expect(@message[:to].group_addresses).to eq [] end end end describe "empty address lists" do before(:each) do @message = Mail.read(fixture('emails', 'error_emails', 'weird_to_header.eml')) end it "should parse the email and encode without crashing" do expect { @message.encoded }.not_to raise_error end it "should return an empty groups list" do expect(@message.to).to eq ['user-example@aol.com', 'e-s-a-s-2200@app.ar.com'] end end end mail-2.6.4/spec/mail/field_list_spec.rb000066400000000000000000000031051267453234600200110ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::FieldList do it "should be able to add new fields" do fl = Mail::FieldList.new fl << Mail::Field.new("To: mikel@me.com") fl << Mail::Field.new("From: mikel@me.com") expect(fl.length).to eq 2 end it "should be able to add new fields in the right order" do fl = Mail::FieldList.new fl << Mail::Field.new("To: mikel@me.com") fl << Mail::Field.new("From: mikel@me.com") fl << Mail::Field.new("Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500") fl << Mail::Field.new("Return-Path: mikel@me.com") expect(fl[0].field.class).to eq Mail::ReturnPathField expect(fl[1].field.class).to eq Mail::ReceivedField expect(fl[2].field.class).to eq Mail::FromField expect(fl[3].field.class).to eq Mail::ToField end it "should add new Received items after the existing ones" do fl = Mail::FieldList.new fl << Mail::Field.new("To: mikel@me.com") fl << Mail::Field.new("From: mikel@me.com") fl << Mail::Field.new("Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500") fl << Mail::Field.new("Return-Path: mikel@me.com") fl << Mail::Field.new("Received: from 123.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500") expect(fl[2].field.value).to eq 'from 123.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500' end end mail-2.6.4/spec/mail/field_spec.rb000066400000000000000000000344571267453234600167740ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Field do describe "initialization" do it "should be instantiated" do expect {Mail::Field.new('To: Mikel')}.not_to raise_error expect(Mail::Field.new('To: Mikel').field.class).to eq Mail::ToField end it "should allow you to init on an array" do field = Mail::Field.new("To", ['test1@lindsaar.net', 'Mikel ']) expect(field.addresses).to eq ["test1@lindsaar.net", "test2@lindsaar.net"] end it "should allow us to pass an empty value" do expect {Mail::Field.new('To')}.not_to raise_error expect(Mail::Field.new('To').field.class).to eq Mail::ToField end it "should allow us to pass a value" do expect {Mail::Field.new('To', 'Mikel')}.not_to raise_error expect(Mail::Field.new('To', 'Mikel').field.class).to eq Mail::ToField end it "should match up fields to class names" do structured_fields = %w[ Date From Sender Reply-To To Cc Bcc Message-ID In-Reply-To References Keywords Resent-Date Resent-From Resent-Sender Resent-To Resent-Cc Resent-Bcc Resent-Message-ID Return-Path Received Subject Comments Mime-Version Content-Transfer-Encoding Content-Description Content-Disposition Content-Type ] structured_fields.each do |sf| words = sf.split("-").map { |a| a.capitalize } klass = "#{words.join}Field" expect(Mail::Field.new("#{sf}: ").field.class).to eq Mail.const_get(klass) end end it "should match up fields to class names regardless of case" do structured_fields = %w[ dATE fROM sENDER REPLY-TO TO CC BCC MESSAGE-ID IN-REPLY-TO REFERENCES KEYWORDS resent-date resent-from rESENT-sENDER rESENT-tO rESent-cc resent-bcc reSent-MESSAGE-iD rEtURN-pAtH rEcEiVeD Subject Comments Mime-VeRSIOn cOntenT-transfer-EnCoDiNg Content-Description Content-Disposition cOnTENt-TyPe ] structured_fields.each do |sf| words = sf.split("-").map { |a| a.capitalize } klass = "#{words.join}Field" expect(Mail::Field.new("#{sf}: ").field.class).to eq Mail.const_get(klass) end end it "should say anything that is not a known field is an optional field" do unstructured_fields = %w[ Too Becc bccc Random X-Mail MySpecialField ] unstructured_fields.each do |sf| expect(Mail::Field.new("#{sf}: Value").field.class).to eq Mail::OptionalField end end it "should split the name and values out of the raw field passed in" do field = Mail::Field.new('To: Bob') expect(field.name).to eq 'To' expect(field.value).to eq 'Bob' end it "should split the name and values out of the raw field passed in if missing whitespace" do field = Mail::Field.new('To:Bob') expect(field.name).to eq 'To' expect(field.value).to eq 'Bob' end it "should split the name and values out of the raw field passed in if having added inapplicable whitespace" do field = Mail::Field.new('To : Bob ') expect(field.name).to eq 'To' expect(field.value).to eq 'Bob' end it "should return an unstuctured field if the structured field parsing raises an error" do expect(Mail::ToField).to receive(:new).and_raise(Mail::Field::ParseError.new(Mail::ToField, 'To: Bob, ,,, Frank, Smith', "Some reason")) field = Mail::Field.new('To: Bob, ,,, Frank, Smith') expect(field.field.class).to eq Mail::UnstructuredField expect(field.name).to eq 'To' expect(field.value).to eq 'Bob, ,,, Frank, Smith' end it "should call to_s on its field when sent to_s" do @field = Mail::SubjectField.new('Subject: Hello bob') expect(Mail::SubjectField).to receive(:new).and_return(@field) expect(@field).to receive(:to_s).once Mail::Field.new('Subject: Hello bob').to_s end it "should pass missing methods to its instantiated field class" do field = Mail::Field.new('To: Bob') expect(field.field).to receive(:addresses).once field.addresses end it "should respond_to? its own methods and the same methods as its instantiated field class" do field = Mail::Field.new('To: Bob') expect(field.respond_to?(:field)).to be_truthy expect(field.field).to receive(:"respond_to?").once field.respond_to?(:addresses) end it "should change its type if you change the name" do field = Mail::Field.new("To: mikel@me.com") expect(field.field.class).to eq Mail::ToField field.value = "bob@me.com" expect(field.field.class).to eq Mail::ToField end it "should create a field without trying to parse if given a symbol" do field = Mail::Field.new('Message-ID') expect(field.field.class).to eq Mail::MessageIdField end it "should inherit charset" do charset = 'iso-2022-jp' field = Mail::Field.new('Subject: こんにちは', charset) expect(field.charset).to eq charset end it "should not strip out content that looks like the field name" do pending "pr#766" field = Mail::Field.new('Subject: subject: for your approval') expect(field.value).to eq 'subject: for your approval' end end describe "error handling" do it "should populate the errors array if it finds a field it can't deal with" do field = Mail::Field.new('Content-Transfer-Encoding: 8@bit') expect(field.field.errors.size).to eq 1 expect(field.field.errors[0][0]).to eq 'Content-Transfer-Encoding' expect(field.field.errors[0][1]).to eq '8@bit' expect(field.field.errors[0][2].to_s).to match(/ContentTransferEncodingElement can not parse |17-bit|/) end end describe "helper methods" do it "should reply if it is responsible for a field name as a capitalized string - structured field" do field = Mail::Field.new("To: mikel@test.lindsaar.net") expect(field.responsible_for?("To")).to be_truthy end it "should reply if it is responsible for a field as a lower case string - structured field" do field = Mail::Field.new("To: mikel@test.lindsaar.net") expect(field.responsible_for?("to")).to be_truthy end it "should reply if it is responsible for a field as a symbol - structured field" do field = Mail::Field.new("To: mikel@test.lindsaar.net") expect(field.responsible_for?(:to)).to be_truthy end it "should say it is the \"same\" as another if their field types match" do expect(Mail::Field.new("To: mikel").same(Mail::Field.new("To: bob"))).to be_truthy end it "should say it is not the \"same\" as another if their field types don't match" do expect(Mail::Field.new("To: mikel").same(Mail::Field.new("From: mikel"))).to be_falsey end it "should say it is not the \"same\" as nil" do expect(Mail::Field.new("To: mikel").same(nil)).to be_falsey end it "should say it is == to another if their field and names match" do expect(Mail::Field.new("To: mikel")).to eq(Mail::Field.new("To: mikel")) end it "should say it is not == to another if their field names do not match" do expect(Mail::Field.new("From: mikel")).not_to eq(Mail::Field.new("To: bob")) end it "should say it is not == to another if their field names match, but not their values" do expect(Mail::Field.new("To: mikel")).not_to eq(Mail::Field.new("To: bob")) end it "should say it is not == to nil" do expect(Mail::Field.new("From: mikel")).not_to eq(nil) end it "should sort according to the field order" do list = [Mail::Field.new("To: mikel"), Mail::Field.new("Return-Path: bob")] expect(list.sort[0].name).to eq "Return-Path" end end describe 'user defined fields' do it "should say it is the \"same\" as another if their field names match" do expect(Mail::Field.new("X-Foo: mikel").same(Mail::Field.new("X-Foo: bob"))).to be_truthy end it "should say it is not == to another if their field names do not match" do expect(Mail::Field.new("X-Foo: mikel")).not_to eq(Mail::Field.new("X-Bar: bob")) end end describe "passing an encoding" do it "should allow you to send in unencoded strings to fields and encode them" do subject = Mail::SubjectField.new("This is あ string", 'utf-8') expect(subject.encoded).to eq "Subject: =?UTF-8?Q?This_is_=E3=81=82_string?=\r\n" expect(subject.decoded).to eq "This is あ string" end it "should allow you to send in unencoded strings to address fields and encode them" do to = Mail::ToField.new('"Mikel Lindsああr" ', 'utf-8') expect(to.encoded).to eq "To: =?UTF-8?B?TWlrZWwgTGluZHPjgYLjgYJy?= \r\n" end it "should allow you to send in unencoded strings without quotes to address fields and encode them" do to = Mail::ToField.new('Mikel Lindsああr ', 'utf-8') expect(to.encoded).to eq "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= \r\n" end it "should allow you to send in unencoded strings to address fields and encode them" do to = Mail::ToField.new("あdあ ", 'utf-8') expect(to.encoded).to eq "To: =?UTF-8?B?44GCZOOBgg==?= \r\n" end it "should allow you to send in multiple unencoded strings to address fields and encode them" do to = Mail::ToField.new(["Mikel Lindsああr ", "あdあ "], 'utf-8') expect(to.encoded).to eq "To: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" end it "should allow you to send in multiple unencoded strings to any address field" do mail = Mail.new mail.charset = 'utf-8' array = ["Mikel Lindsああr ", "あdあ "] field = Mail::ToField.new(array, 'utf-8') expect(field.encoded).to eq "#{Mail::ToField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" field = Mail::FromField.new(array, 'utf-8') expect(field.encoded).to eq "#{Mail::FromField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" field = Mail::CcField.new(array, 'utf-8') expect(field.encoded).to eq "#{Mail::CcField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" field = Mail::ReplyToField.new(array, 'utf-8') expect(field.encoded).to eq "#{Mail::ReplyToField::CAPITALIZED_FIELD}: Mikel =?UTF-8?B?TGluZHPjgYLjgYJy?= , \r\n\s=?UTF-8?B?44GCZOOBgg==?= \r\n" end it "should allow an encoded value in the Subject field and decode it automatically (issue 44)" do skip if RUBY_VERSION < '1.9' subject = Mail::SubjectField.new("=?ISO-8859-1?Q?2_=FAlt?=", 'utf-8') expect(subject.decoded).to eq "2 últ" end it "should allow you to encoded text in the middle (issue 44)" do skip if RUBY_VERSION < '1.9' subject = Mail::SubjectField.new("ma=?ISO-8859-1?Q?=F1ana?=", 'utf-8') expect(subject.decoded).to eq "mañana" end it "more tolerable to encoding definitions, ISO (issue 120)" do skip if RUBY_VERSION < '1.9' subject = Mail::SubjectField.new("ma=?ISO88591?Q?=F1ana?=", 'utf-8') expect(subject.decoded).to eq "mañana" end it "more tolerable to encoding definitions, ISO-long (issue 120)" do # Rubies under 1.9 don't handle encoding conversions skip if RUBY_VERSION < '1.9' # TODO: JRuby 1.7.0 has an encoding issue https://jira.codehaus.org/browse/JRUBY-6999 skip if defined?(JRUBY_VERSION) && JRUBY_VERSION >= '1.7.0' subject = Mail::SubjectField.new("=?iso2022jp?B?SEVBUlQbJEIkSiQ0TyJNbRsoQg?=", 'utf-8') expect(subject.decoded).to eq "HEARTなご連絡" end it "more tolerable to encoding definitions, UTF (issue 120)" do to = Mail::ToField.new("=?utf-8?B?44GCZOOBgg==?= ", 'utf-8') expect(to.encoded).to eq "To: =?utf-8?B?44GCZOOBgg==?= \r\n" expect(to.decoded).to eq "\"あdあ\" " end it "more tolerable to encoding definitions, ISO (issue 120)" do subject = Mail::SubjectField.new("=?UTF-8?B?UmU6IHRlc3QgZW52w61vIG1lbnNhamUgY29u?=", 'utf-8') expect(subject.decoded).to eq "Re: test envío mensaje con" end it "more tolerable to encoding definitions, Windows (issue 120)" do skip if RUBY_VERSION < '1.9' # TODO: JRuby 1.7.0 has an encoding issue https://jira.codehaus.org/browse/JRUBY-6999 skip if defined?(JRUBY_VERSION) && JRUBY_VERSION >= '1.7.0' subject = Mail::SubjectField.new("=?Windows1252?Q?It=92s_a_test=3F?=", 'utf-8') expect(subject.decoded).to eq "It’s a test?" end it "should support ascii encoded utf-8 subjects" do s = "=?utf-8?Q?simp?= =?utf-8?Q?le_=E2=80=93_dash_=E2=80=93_?=" subject = Mail::SubjectField.new(s, 'utf-8') expect(subject.decoded).to eq("simple – dash – ") end it "should support ascii encoded windows subjects" do skip if RUBY_VERSION < '1.9' # TODO: JRuby 1.7.0 has an encoding issue https://jira.codehaus.org/browse/JRUBY-6999 skip if defined?(JRUBY_VERSION) && JRUBY_VERSION >= '1.7.0' s = "=?WINDOWS-1252?Q?simp?= =?WINDOWS-1252?Q?le_=96_dash_=96_?=" subject = Mail::SubjectField.new(s, "UTF-8") expect(subject.decoded).to eq("simple – dash – ") end end describe Mail::Field::ParseError do it "should be structured" do error = nil begin Mail::DateTimeElement.new("invalid") rescue Mail::Field::ParseError => e error = e end expect(error).not_to be_nil expect(error.element).to eq Mail::DateTimeElement expect(error.value).to eq "invalid" expect(error.reason).not_to be_nil end end end mail-2.6.4/spec/mail/fields/000077500000000000000000000000001267453234600156035ustar00rootroot00000000000000mail-2.6.4/spec/mail/fields/bcc_field_spec.rb000066400000000000000000000106451267453234600210420ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::BccField do # The "Bcc:" field (where the "Bcc" means "Blind Carbon Copy") contains # addresses of recipients of the message whose addresses are not to be # revealed to other recipients of the message. There are three ways in # which the "Bcc:" field is used. In the first case, when a message # containing a "Bcc:" field is prepared to be sent, the "Bcc:" line is # removed even though all of the recipients (including those specified # in the "Bcc:" field) are sent a copy of the message. In the second # case, recipients specified in the "To:" and "Cc:" lines each are sent # a copy of the message with the "Bcc:" line removed as above, but the # recipients on the "Bcc:" line get a separate copy of the message # containing a "Bcc:" line. (When there are multiple recipient # addresses in the "Bcc:" field, some implementations actually send a # separate copy of the message to each recipient with a "Bcc:" # containing only the address of that particular recipient.) Finally, # since a "Bcc:" field may contain no addresses, a "Bcc:" field can be # sent without any addresses indicating to the recipients that blind # copies were sent to someone. Which method to use with "Bcc:" fields # is implementation dependent, but refer to the "Security # Considerations" section of this document for a discussion of each. describe "initialization" do it "should initialize" do expect { Mail::BccField.new("Bcc: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::BccField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::BccField.new('Bcc: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Bcc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::BccField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Bcc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods occurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::BccField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::BccField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::BccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::BccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return nothing by default on encoded as Bcc should not be in the mail" do t = Mail::BccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "" end it "should return the encoded line for one address when requested to include in headers" do t = Mail::BccField.new('sam@me.com') t.include_in_headers = true expect(t.encoded).to eq "Bcc: sam@me.com\r\n" end it "should return the encoded line when requested to include in headers" do t = Mail::BccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') t.include_in_headers = true expect(t.encoded).to eq "Bcc: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end it "should return the decoded line" do t = Mail::BccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.decoded).to eq "sam@me.com, my_group: mikel@me.com, bob@you.com;" end end end mail-2.6.4/spec/mail/fields/cc_field_spec.rb000066400000000000000000000056731267453234600207050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # The "Cc:" field (where the "Cc" means "Carbon Copy" in the sense of # making a copy on a typewriter using carbon paper) contains the # addresses of others who are to receive the message, though the # content of the message may not be directed at them. describe Mail::CcField do describe "initialization" do it "should initialize" do expect { Mail::CcField.new("Cc: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::CcField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::CcField.new('Cc: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Cc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::CcField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Cc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods occurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::CcField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::CcField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::CcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::CcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line for one address" do t = Mail::CcField.new('sam@me.com') expect(t.encoded).to eq "Cc: sam@me.com\r\n" end it "should return the encoded line" do t = Mail::CcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Cc: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end it "should return the decoded line" do t = Mail::CcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.decoded).to eq "sam@me.com, my_group: mikel@me.com, bob@you.com;" end end end mail-2.6.4/spec/mail/fields/comments_field_spec.rb000066400000000000000000000012641267453234600221350ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::CommentsField do # # comments = "Comments:" unstructured CRLF it "should initialize" do expect { Mail::CommentsField.new("this is a comment") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::CommentsField.new('Comments: this is a comment') expect(t.name).to eq 'Comments' expect(t.value).to eq 'this is a comment' end it "should accept a string with the field name" do t = Mail::CommentsField.new('this is a comment') expect(t.name).to eq 'Comments' expect(t.value).to eq 'this is a comment' end end mail-2.6.4/spec/mail/fields/common/000077500000000000000000000000001267453234600170735ustar00rootroot00000000000000mail-2.6.4/spec/mail/fields/common/address_container_spec.rb000066400000000000000000000013471267453234600241260ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe 'AddressContainer' do it "should allow you to append an address to an address field result" do m = Mail.new("To: mikel@test.lindsaar.net") expect(m.to).to eq ['mikel@test.lindsaar.net'] m.to << 'bob@test.lindsaar.net' expect(m.to).to eq ['mikel@test.lindsaar.net', 'bob@test.lindsaar.net'] end it "should handle complex addresses correctly" do m = Mail.new("From: mikel@test.lindsaar.net") expect(m.from).to eq ['mikel@test.lindsaar.net'] m.from << '"Ada Lindsaar" , bob@test.lindsaar.net' expect(m.from).to eq ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net', 'bob@test.lindsaar.net'] end end mail-2.6.4/spec/mail/fields/common/common_address_spec.rb000066400000000000000000000254751267453234600234440ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "Mail::CommonAddress" do describe "address handling" do it "should give the addresses it is going to" do field = Mail::ToField.new("To: test1@lindsaar.net") expect(field.addresses.first).to eq "test1@lindsaar.net" end it "should split up the address list into individual addresses" do field = Mail::ToField.new("To: test1@lindsaar.net, test2@lindsaar.net") expect(field.addresses).to eq ["test1@lindsaar.net", "test2@lindsaar.net"] end it "should give the formatted addresses" do field = Mail::ToField.new("To: Mikel , Bob ") expect(field.formatted).to eq ["Mikel ", "Bob "] end it "should give the display names" do field = Mail::ToField.new("To: Mikel , Bob ") expect(field.display_names).to eq ["Mikel", "Bob"] end it "should give the actual address objects" do field = Mail::ToField.new("To: Mikel , Bob ") field.addrs.each do |addr| expect(addr.class).to eq Mail::Address end end it "should handle groups as well" do field = Mail::ToField.new("To: test1@lindsaar.net, group: test2@lindsaar.net, me@lindsaar.net;") expect(field.addresses).to eq ["test1@lindsaar.net", "test2@lindsaar.net", "me@lindsaar.net"] end it "should provide a list of groups" do field = Mail::ToField.new("To: test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.group_names).to eq ["My Group"] end it "should provide a list of addresses per group" do field = Mail::ToField.new("To: test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.groups["My Group"].length).to eq 2 expect(field.groups["My Group"].first.to_s).to eq 'test2@lindsaar.net' expect(field.groups["My Group"].last.to_s).to eq 'me@lindsaar.net' end it "should provide a list of addresses that are just in the groups" do field = Mail::ToField.new("To: test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.group_addresses).to eq ['test2@lindsaar.net', 'me@lindsaar.net'] end describe ".value=" do it "should handle initializing as an empty string" do field = Mail::ToField.new("") expect(field.addresses).to eq [] field.value = 'mikel@test.lindsaar.net' expect(field.addresses).to eq ['mikel@test.lindsaar.net'] end it "should encode to an empty string if it has no addresses or groups" do field = Mail::ToField.new("") expect(field.encoded).to eq '' field.value = 'mikel@test.lindsaar.net' expect(field.encoded).to eq "To: mikel@test.lindsaar.net\r\n" end context "a unquoted multi-byte address is given" do let(:given_value) { 'みける ' } it "should allow you to set an unquoted, multi-byte address value after initialization" do expected_result = "To: =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("") field.value = given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("") field.value = given_value expect(field.value).to eq given_value end end context "a quoted multi-byte address is given" do let(:given_value) { '"みける" ' } it "should allow you to set an quoted, multi-byte address value after initialization" do expected_result = "To: =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("") field.value = given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("") field.value = given_value expect(field.value).to eq given_value end end end describe ".<<" do it "should allow you to append an address" do field = Mail::ToField.new("") field << 'mikel@test.lindsaar.net' expect(field.addresses).to eq ["mikel@test.lindsaar.net"] end context "a unquoted multi-byte address is given" do let(:given_value) { 'みける ' } context "initialized with an empty string" do it "should allow you to append an unquoted, multi-byte address value" do expected_result = "To: =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("") field << given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("") field << given_value expect(field.value).to eq given_value end end context "initialized with an us-ascii address" do it "should allow you to append a quoted, multi-byte address value" do expected_result = "To: Mikel , \r\n =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("Mikel ") field << given_value expect(field.encoded).to eq expected_result end end context "initialized with an multi-byte address" do it "should allow you to append a quoted, multi-byte address value" do expected_result = "To: =?UTF-8?B?44Of44Kx44Or?= , \r\n =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("ミケル ") field << given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("ミケル ") field << given_value expect(field.value).to eq ["ミケル ", given_value].join(', ') end end end context "a quoted multi-byte address is given" do let(:given_value) { '"みける" ' } context "initialized with an empty string" do it "should allow you to append a quoted, multi-byte address value" do expected_result = "To: =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("") field << given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("") field << given_value expect(field.value).to eq given_value end end context "initialized with an us-ascii address" do it "should allow you to append a quoted, multi-byte address value" do expected_result = "To: Mikel , \r\n =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("Mikel ") field << given_value expect(field.encoded).to eq expected_result end end context "initialized with an multi-byte address" do it "should allow you to append a quoted, multi-byte address value" do expected_result = "To: =?UTF-8?B?44Of44Kx44Or?= , \r\n =?UTF-8?B?44G/44GR44KL?= \r\n" field = Mail::ToField.new("ミケル ") field << given_value expect(field.encoded).to eq expected_result end it "should keep the given value" do field = Mail::ToField.new("ミケル ") field << given_value expect(field.value).to eq ["ミケル ", given_value].join(', ') end end end end it "should preserve the display name" do field = Mail::ToField.new('"Mikel Lindsaar" ') expect(field.display_names).to eq ["Mikel Lindsaar"] end it "should handle multiple addresses" do field = Mail::ToField.new(['test1@lindsaar.net', 'Mikel ']) expect(field.addresses).to eq ['test1@lindsaar.net', 'test2@lindsaar.net'] end it "should handle missing display names with an angle address" do field = Mail::ToField.new('') expect(field.encoded).to eq "To: mikel@test.lindsaar.net\r\n" end it "should handle empty display names with an angle address" do field = Mail::ToField.new('"" ') expect(field.encoded).to eq "To: mikel@test.lindsaar.net\r\n" end end describe "encoding and decoding fields" do it "should allow us to encode an address field" do field = Mail::ToField.new("test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.encoded).to eq "To: test1@lindsaar.net, \r\n\sMy Group: test2@lindsaar.net, \r\n\sme@lindsaar.net;\r\n" end it "should allow us to encode a simple address field" do field = Mail::ToField.new("test1@lindsaar.net") expect(field.encoded).to eq "To: test1@lindsaar.net\r\n" end it "should allow us to encode an address field" do field = Mail::CcField.new("test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.encoded).to eq "Cc: test1@lindsaar.net, \r\n\sMy Group: test2@lindsaar.net, \r\n\sme@lindsaar.net;\r\n" end it "should allow us to decode an address field" do field = Mail::ToField.new("test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;") expect(field.decoded).to eq "test1@lindsaar.net, My Group: test2@lindsaar.net, me@lindsaar.net;" end it "should allow us to decode a non ascii address field" do field = Mail::ToField.new("=?UTF-8?B?44G/44GR44KL?= ") expect(field.decoded).to eq '"みける" ' end it "should allow us to decode a non ascii address field" do field = Mail::ToField.new("=?UTF-8?B?44G/44GR44KL?= , =?UTF-8?B?44G/44GR44KL?= ") expect(field.decoded).to eq '"みける" , "みける" ' end end it "should yield each address object in turn" do field = Mail::ToField.new("test1@lindsaar.net, test2@lindsaar.net, me@lindsaar.net") addresses = [] field.each do |address| addresses << address.address end expect(addresses).to eq ["test1@lindsaar.net", "test2@lindsaar.net", "me@lindsaar.net"] end end mail-2.6.4/spec/mail/fields/common/common_date_spec.rb000066400000000000000000000014121267453234600227150ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::CommonAddress do describe "encoding and decoding fields" do it "should allow us to encode an date field" do field = Mail::DateField.new('12 Aug 2009 00:00:02 GMT') expect(field.encoded).to eq "Date: Wed, 12 Aug 2009 00:00:02 +0000\r\n" end it "should allow us to encode an resent date field" do field = Mail::ResentDateField.new('12 Aug 2009 00:00:02 GMT') expect(field.encoded).to eq "Resent-Date: Wed, 12 Aug 2009 00:00:02 +0000\r\n" end it "should allow us to decode an address field" do field = Mail::DateField.new('12 Aug 2009 00:00:02 GMT') expect(field.decoded).to eq "Wed, 12 Aug 2009 00:00:02 +0000" end end end mail-2.6.4/spec/mail/fields/common/common_field_spec.rb000066400000000000000000000077151267453234600230770ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::CommonField do describe "multi-charset support" do before(:each) do @original = $KCODE if RUBY_VERSION < '1.9' end after(:each) do $KCODE = @original if RUBY_VERSION < '1.9' end it "should return '' on to_s if there is no value" do expect(Mail::SubjectField.new(nil).to_s).to eq '' end it "should leave ascii alone" do field = Mail::SubjectField.new("This is a test") expect(field.encoded).to eq "Subject: This is a test\r\n" expect(field.decoded).to eq "This is a test" end it "should encode a utf-8 string as utf-8 quoted printable" do value = "かきくけこ" if RUBY_VERSION < '1.9' $KCODE = 'u' result = "Subject: =?UTF-8?Q?=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n" else value = value.dup.force_encoding('UTF-8') result = "Subject: =?UTF-8?Q?=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n" end field = Mail::SubjectField.new(value) expect(field.encoded).to eq result expect(field.decoded).to eq value expect(field.value).to eq value end it "should wrap an encoded at 60 characters" do value = "かきくけこ かきくけこ かきくけこ かきくけこ かきくけこ かきくけこ かきくけこ かきくけこ かきくけこ" if RUBY_VERSION < '1.9' $KCODE = 'u' result = "Subject: =?UTF-8?Q?=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n" else value = value.dup.force_encoding('UTF-8') result = "Subject: =?UTF-8?Q?=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n\s=?UTF-8?Q?_=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=\r\n" end field = Mail::SubjectField.new(value) expect(field.encoded).to eq result expect(field.decoded).to eq value expect(field.value).to eq value end it "should handle charsets in assigned addresses" do value = '"かきくけこ" ' if RUBY_VERSION < '1.9' $KCODE = 'u' result = "From: =?UTF-8?B?44GL44GN44GP44GR44GT?= \r\n" else value = value.dup.force_encoding('UTF-8') result = "From: =?UTF-8?B?44GL44GN44GP44GR44GT?= \r\n" end field = Mail::FromField.new(value) expect(field.encoded).to eq result expect(field.decoded).to eq value end end context "when including the field name" do it "does not strip out content that looks identitcal to the field name" do field = Mail::SubjectField.new("Subject: Subject: for your approval") expect(field.decoded).to eq("Subject: for your approval") end end context "when not including the field name" do it "does not strip out content that looks identitcal to the field name" do field = Mail::SubjectField.new("This is an important subject: here") expect(field.decoded).to eq("This is an important subject: here") end end end mail-2.6.4/spec/mail/fields/common/common_message_id_spec.rb000066400000000000000000000020431267453234600241010ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' require 'mail/fields/common/common_message_id' describe Mail::CommonMessageId do describe "encoding and decoding fields" do it "should allow us to encode a message id field" do field = Mail::MessageIdField.new('') expect(field.encoded).to eq "Message-ID: \r\n" end it "should allow us to encode a message id field" do field = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(field.encoded).to eq "Message-ID: <1234@test.lindsaar.net>\r\n" end it "should allow us to encode an in reply to field" do field = Mail::InReplyToField.new('<1234@test.lindsaar.net>') expect(field.encoded).to eq "In-Reply-To: <1234@test.lindsaar.net>\r\n" end it "should allow us to decode a message id field" do field = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(field.decoded).to eq "<1234@test.lindsaar.net>" end end end mail-2.6.4/spec/mail/fields/common/parameter_hash_spec.rb000066400000000000000000000046231267453234600234220ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' require 'mail/fields/common/parameter_hash' describe Mail::ParameterHash do it "should return the values in the hash" do hash = Mail::ParameterHash.new hash.merge!({'value1' => 'one', 'value2' => 'two'}) expect(hash.keys).to include("value1") expect(hash.keys).to include("value2") expect(hash.values).to include('one') expect(hash.values).to include('two') end it "should return the values in the hash regardless of symbol or string" do hash = Mail::ParameterHash.new hash.merge!({'value1' => 'one', 'value2' => 'two'}) expect(hash['value1']).to eq 'one' expect(hash['value2']).to eq 'two' expect(hash[:value1]).to eq 'one' expect(hash[:value2]).to eq 'two' end it "should return the values in the hash using case-insensitive key matching" do hash = Mail::ParameterHash.new hash.merge!({'value1' => 'one', 'VALUE2' => 'two'}) expect(hash['VALUE1']).to eq 'one' expect(hash['vAlUe2']).to eq 'two' expect(hash[:VaLuE1]).to eq 'one' expect(hash[:value2]).to eq 'two' end it "should return the correct value if they are not encoded" do hash = Mail::ParameterHash.new hash.merge!({'value1' => 'one', 'value2' => 'two'}) expect(hash['value1']).to eq 'one' expect(hash['value2']).to eq 'two' end it "should return a name list concatenated" do hash = Mail::ParameterHash.new hash.merge!({'value*1' => 'one', 'value*2' => 'two'}) expect(hash['value']).to eq 'onetwo' end it "should return a name list concatenated and unencoded" do hash = Mail::ParameterHash.new hash.merge!({'value*0*' => "us-ascii'en'This%20is%20even%20more%20", 'value*1*' => "%2A%2A%2Afun%2A%2A%2A%20", 'value*2' => "isn't it"}) expect(hash['value']).to eq "This is even more ***fun*** isn't it" end it "should allow us to add a value" do hash = Mail::ParameterHash.new hash['value'] = 'bob' expect(hash['value']).to eq 'bob' end it "should return an encoded value" do hash = Mail::ParameterHash.new hash.merge!({'value*0*' => "us-ascii'en'This%20is%20even%20more%20", 'value*1*' => "%2A%2A%2Afun%2A%2A%2A%20", 'value*2' => "isn't it"}) expect(hash.encoded).to eq %Q{value*0*=us-ascii'en'This%20is%20even%20more%20;\r\n\svalue*1*=%2A%2A%2Afun%2A%2A%2A%20;\r\n\svalue*2="isn't it"} end end mail-2.6.4/spec/mail/fields/content_description_field_spec.rb000066400000000000000000000025651267453234600243720ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentDescriptionField do # Content-Description Header Field # # The ability to associate some descriptive information with a given # body is often desirable. For example, it may be useful to mark an # "image" body as "a picture of the Space Shuttle Endeavor." Such text # may be placed in the Content-Description header field. This header # field is always optional. # # description := "Content-Description" ":" *text # # The description is presumed to be given in the US-ASCII character # set, although the mechanism specified in RFC 2047 may be used for # non-US-ASCII Content-Description values. # describe "initialization" do it "should initialize" do expect { Mail::ContentDescriptionField.new("Content-Description: This is a description") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::ContentDescriptionField.new('Content-Description: This is a description') expect(t.name).to eq 'Content-Description' expect(t.value).to eq 'This is a description' end it "should accept a string without the field name" do t = Mail::ContentDescriptionField.new('This is a description') expect(t.name).to eq 'Content-Description' expect(t.value).to eq 'This is a description' end end end mail-2.6.4/spec/mail/fields/content_disposition_field_spec.rb000066400000000000000000000070071267453234600244070ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentDispositionField do describe "initialization" do it "should initialize" do expect { Mail::ContentDispositionField.new("attachment; filename=File") }.not_to raise_error end it "should accept a string with the field name" do c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=File') expect(c.name).to eq 'Content-Disposition' expect(c.value).to eq 'attachment; filename=File' end it "should accept a string without the field name" do c = Mail::ContentDispositionField.new('attachment; filename=File') expect(c.name).to eq 'Content-Disposition' expect(c.value).to eq 'attachment; filename=File' end it "should accept a nil value and generate a disposition type" do c = Mail::ContentDispositionField.new(nil) expect(c.name).to eq 'Content-Disposition' expect(c.value).not_to be_nil end it "should render encoded" do c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=File') expect(c.encoded).to eq "Content-Disposition: attachment;\r\n\sfilename=File\r\n" end it "should render encoded for inline" do c = Mail::ContentDispositionField.new('Content-Disposition: inline') expect(c.encoded).to eq "Content-Disposition: inline\r\n" end it "should wrap a filename in double quotation marks only if the filename contains spaces and does not already have double quotation marks" do c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=This is a bad filename.txt') expect(c.value).to eq 'attachment; filename="This is a bad filename.txt"' c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=some.jpg') expect(c.value).to eq 'attachment; filename=some.jpg' c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename="Bad filename but at least it is wrapped in quotes.txt"') expect(c.value).to eq 'attachment; filename="Bad filename but at least it is wrapped in quotes.txt"' end it "should render decoded" do c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=File') expect(c.decoded).to eq 'attachment; filename=File' end it "should render decoded inline" do c = Mail::ContentDispositionField.new('Content-Disposition: inline') expect(c.decoded).to eq 'inline' end it "should handle upper and mixed case INLINE and AttachMent" do c = Mail::ContentDispositionField.new('Content-Disposition: INLINE') expect(c.decoded).to eq 'inline' c = Mail::ContentDispositionField.new('Content-Disposition: AttachMent') expect(c.decoded).to eq 'attachment' end end describe "instance methods" do it "should give its disposition type" do c = Mail::ContentDispositionField.new('Content-Disposition: attachment; filename=File') expect(c.disposition_type).to eq 'attachment' expect(c.parameters).to eql({"filename" => 'File'}) end # see spec/fixtures/trec_2005_corpus/missing_content_disposition.eml it "should accept a blank disposition type" do c = Mail::ContentDispositionField.new('Content-Disposition: ') expect(c.disposition_type).not_to be_nil end it "handles nil value" do c = Mail::ContentDispositionField.new(nil, 'utf-8') expect(c.parameters).to be_a( Mail::ParameterHash ) expect(c.parameters).to be_empty end end end mail-2.6.4/spec/mail/fields/content_id_field_spec.rb000066400000000000000000000102231267453234600224310ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentIdField do # Content-ID Header Field # # In constructing a high-level user agent, it may be desirable to allow # one body to make reference to another. Accordingly, bodies may be # labelled using the "Content-ID" header field, which is syntactically # identical to the "Content-ID" header field: # # id := "Content-ID" ":" msg-id # # Like the Content-ID values, Content-ID values must be generated to be # world-unique. # # The Content-ID value may be used for uniquely identifying MIME # entities in several contexts, particularly for caching data # referenced by the message/external-body mechanism. Although the # Content-ID header is generally optional, its use is MANDATORY in # implementations which generate data of the optional MIME media type # "message/external-body". That is, each message/external-body entity # must have a Content-ID field to permit caching of such data. # # It is also worth noting that the Content-ID value has special # semantics in the case of the multipart/alternative media type. This # is explained in the section of RFC 2046 dealing with # multipart/alternative. describe "initialization" do it "should initialize" do expect { Mail::ContentIdField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do c = Mail::ContentIdField.new('Content-ID: <1234@test.lindsaar.net>') expect(c.name).to eq 'Content-ID' expect(c.value).to eq '<1234@test.lindsaar.net>' expect(c.content_id).to eq '1234@test.lindsaar.net' end it "should accept a string without the field name" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.name).to eq 'Content-ID' expect(m.value).to eq '<1234@test.lindsaar.net>' expect(m.content_id).to eq '1234@test.lindsaar.net' end it "should accept a nil value and generate a content_id" do m = Mail::ContentIdField.new(nil) expect(m.name).to eq 'Content-ID' expect(m.value).not_to be_nil end it "should allow it to be encoded" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.encoded).to eq "Content-ID: <1234@test.lindsaar.net>\r\n" end it "should allow it to be decoded" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.decoded).to eq "<1234@test.lindsaar.net>" end end describe "ensuring only one message ID" do it "should not accept a string with multiple message IDs but only return the first" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net> <4567@test.lindsaar.net>') expect(m.name).to eq 'Content-ID' expect(m.to_s).to eq '<1234@test.lindsaar.net>' expect(m.content_id).to eq '1234@test.lindsaar.net' end it "should change the message id if given a new message id" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.to_s).to eq '<1234@test.lindsaar.net>' m.value = '<4567@test.lindsaar.net>' expect(m.to_s).to eq '<4567@test.lindsaar.net>' end end describe "instance methods" do it "should provide to_s" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.to_s).to eq '<1234@test.lindsaar.net>' expect(m.content_id.to_s).to eq '1234@test.lindsaar.net' end it "should provide encoded" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m.encoded).to eq "Content-ID: <1234@test.lindsaar.net>\r\n" end it "should respond to :responsible_for?" do m = Mail::ContentIdField.new('<1234@test.lindsaar.net>') expect(m).to respond_to(:responsible_for?) end end describe "generating a message id" do it "should generate a message ID if it has no value" do m = Mail::ContentIdField.new expect(Mail::Utilities.blank?(m.content_id)).not_to be_truthy end it "should generate a random message ID" do m = Mail::ContentIdField.new 1.upto(100) do expect(m.content_id).not_to eq(Mail::ContentIdField.new.content_id) end end end end mail-2.6.4/spec/mail/fields/content_location_field_spec.rb000066400000000000000000000024131267453234600236470ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentLocationField do # Content-Location Header Field # describe "initialization" do it "should initialize" do expect { Mail::ContentLocationField.new("Content-Location", "7bit") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::ContentLocationField.new('Content-Location: photo.jpg') expect(t.name).to eq 'Content-Location' expect(t.value).to eq 'photo.jpg' end it "should accept a string without the field name" do t = Mail::ContentLocationField.new('photo.jpg') expect(t.name).to eq 'Content-Location' expect(t.value).to eq 'photo.jpg' end it "should render an encoded field" do t = Mail::ContentLocationField.new('photo.jpg') expect(t.encoded).to eq "Content-Location: photo.jpg\r\n" end it "should render a decoded field" do t = Mail::ContentLocationField.new('photo.jpg') expect(t.decoded).to eq 'photo.jpg' end end describe "parsing the value" do it "should return an encoding string unquoted" do t = Mail::ContentLocationField.new('"A quoted filename.jpg"') expect(t.location).to eq 'A quoted filename.jpg' end end end mail-2.6.4/spec/mail/fields/content_transfer_encoding_field_spec.rb000066400000000000000000000110521267453234600255300ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentTransferEncodingField do # Content-Transfer-Encoding Header Field # # Many media types which could be usefully transported via email are # represented, in their "natural" format, as 8bit character or binary # data. Such data cannot be transmitted over some transfer protocols. # For example, RFC 821 (SMTP) restricts mail messages to 7bit US-ASCII # data with lines no longer than 1000 characters including any trailing # CRLF line separator. # # It is necessary, therefore, to define a standard mechanism for # encoding such data into a 7bit short line format. Proper labelling # of unencoded material in less restrictive formats for direct use over # less restrictive transports is also desireable. This document # specifies that such encodings will be indicated by a new "Content- # Transfer-Encoding" header field. This field has not been defined by # any previous standard. # # 6.1. Content-Transfer-Encoding Syntax # # The Content-Transfer-Encoding field's value is a single token # specifying the type of encoding, as enumerated below. Formally: # # encoding := "Content-Transfer-Encoding" ":" mechanism # # mechanism := "7bit" / "8bit" / "binary" / # "quoted-printable" / "base64" / # ietf-token / x-token # # These values are not case sensitive -- Base64 and BASE64 and bAsE64 # are all equivalent. An encoding type of 7BIT requires that the body # # is already in a 7bit mail-ready representation. This is the default # value -- that is, "Content-Transfer-Encoding: 7BIT" is assumed if the # Content-Transfer-Encoding header field is not present. # describe "initialization" do it "should initialize" do expect { Mail::ContentTransferEncodingField.new("Content-Transfer-Encoding: 7bit") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::ContentTransferEncodingField.new('Content-Transfer-Encoding: 7bit') expect(t.name).to eq 'Content-Transfer-Encoding' expect(t.value).to eq '7bit' end it "should accept a string without the field name" do t = Mail::ContentTransferEncodingField.new('7bit') expect(t.name).to eq 'Content-Transfer-Encoding' expect(t.value).to eq '7bit' end it "should render an encoded field" do t = Mail::ContentTransferEncodingField.new('7bit') expect(t.encoded).to eq "Content-Transfer-Encoding: 7bit\r\n" end it "should render a decoded field" do t = Mail::ContentTransferEncodingField.new('7bit') expect(t.decoded).to eq '7bit' end end describe "parsing the value" do it "should return an encoding string" do ["7bit", "8bit", "binary", 'quoted-printable', "base64"].each do |encoding| t = Mail::ContentTransferEncodingField.new(encoding) expect(t.encoding).to eq encoding end end it "should treat 7bits/7-bit and 8bits/8-bit as 7bit and 8bit" do %w(7bits 7-bit).each do |mechanism| expect(Mail::ContentTransferEncodingField.new(mechanism).encoding).to eq '7bit' end %w(8bits 8-bit).each do |mechanism| expect(Mail::ContentTransferEncodingField.new(mechanism).encoding).to eq '8bit' end end it "should handle any valid 'x-token' value" do t = Mail::ContentTransferEncodingField.new('X-This-is_MY-encoding') expect(t.encoding).to eq 'x-this-is_my-encoding' end it "should handle an x-encoding" do t = Mail::ContentTransferEncodingField.new("x-uuencode") expect(t.encoding).to eq "x-uuencode" end it "should handle an ietf encoding (practically, any token)" do t = Mail::ContentTransferEncodingField.new("ietf-token") expect(t.encoding).to eq "ietf-token" end it "should replace the existing value" do t = Mail::ContentTransferEncodingField.new("7bit") t.parse("quoted-printable") expect(t.encoding).to eq 'quoted-printable' end it "should raise an error on bogus values" do expect { Mail::ContentTransferEncodingField.new("broken@foo") }.to raise_error(Mail::Field::ParseError) end it "should handle an empty content transfer encoding" do t = Mail::ContentTransferEncodingField.new("") expect(t.encoding).to eq "" end it "should handle a hyphen" do t = Mail::ContentTransferEncodingField.new('7-bit') expect(t.decoded).to eq '7bit' t = Mail::ContentTransferEncodingField.new('8-bit') expect(t.decoded).to eq '8bit' end end end mail-2.6.4/spec/mail/fields/content_type_field_spec.rb000066400000000000000000000765141267453234600230350ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ContentTypeField do # Content-Type Header Field # # The purpose of the Content-Type field is to describe the data # contained in the body fully enough that the receiving user agent can # pick an appropriate agent or mechanism to present the data to the # user, or otherwise deal with the data in an appropriate manner. The # value in this field is called a media type. # # HISTORICAL NOTE: The Content-Type header field was first defined in # RFC 1049. RFC 1049 used a simpler and less powerful syntax, but one # that is largely compatible with the mechanism given here. # # The Content-Type header field specifies the nature of the data in the # body of an entity by giving media type and subtype identifiers, and # by providing auxiliary information that may be required for certain # media types. After the media type and subtype names, the remainder # of the header field is simply a set of parameters, specified in an # attribute=value notation. The ordering of parameters is not # significant. # # In general, the top-level media type is used to declare the general # type of data, while the subtype specifies a specific format for that # type of data. Thus, a media type of "image/xyz" is enough to tell a # user agent that the data is an image, even if the user agent has no # knowledge of the specific image format "xyz". Such information can # be used, for example, to decide whether or not to show a user the raw # data from an unrecognized subtype -- such an action might be # reasonable for unrecognized subtypes of text, but not for # unrecognized subtypes of image or audio. For this reason, registered # subtypes of text, image, audio, and video should not contain embedded # information that is really of a different type. Such compound # formats should be represented using the "multipart" or "application" # types. # # Parameters are modifiers of the media subtype, and as such do not # fundamentally affect the nature of the content. The set of # meaningful parameters depends on the media type and subtype. Most # parameters are associated with a single specific subtype. However, a # given top-level media type may define parameters which are applicable # to any subtype of that type. Parameters may be required by their # defining content type or subtype or they may be optional. MIME # implementations must ignore any parameters whose names they do not # recognize. # # For example, the "charset" parameter is applicable to any subtype of # "text", while the "boundary" parameter is required for any subtype of # the "multipart" media type. # # There are NO globally-meaningful parameters that apply to all media # types. Truly global mechanisms are best addressed, in the MIME # model, by the definition of additional Content-* header fields. # # An initial set of seven top-level media types is defined in RFC 2046. # Five of these are discrete types whose content is essentially opaque # as far as MIME processing is concerned. The remaining two are # composite types whose contents require additional handling by MIME # processors. # # This set of top-level media types is intended to be substantially # complete. It is expected that additions to the larger set of # supported types can generally be accomplished by the creation of new # subtypes of these initial types. In the future, more top-level types # may be defined only by a standards-track extension to this standard. # If another top-level type is to be used for any reason, it must be # given a name starting with "X-" to indicate its non-standard status # and to avoid a potential conflict with a future official name. # describe "initialization" do it "should initialize" do expect { Mail::ContentTypeField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do c = Mail::ContentTypeField.new('Content-Type: text/plain') expect(c.name).to eq 'Content-Type' expect(c.value).to eq 'text/plain' end it "should accept a string without the field name" do c = Mail::ContentTypeField.new('text/plain') expect(c.name).to eq 'Content-Type' expect(c.value).to eq 'text/plain' end it "should accept a nil value and generate a content_type" do c = Mail::ContentTypeField.new('Content-Type', nil) expect(c.name).to eq 'Content-Type' expect(c.value).not_to be_nil end it "should render encoded" do c = Mail::ContentTypeField.new('Content-Type: text/plain') expect(c.encoded).to eq "Content-Type: text/plain\r\n" end it "should render encoded with parameters" do c = Mail::ContentTypeField.new('text/plain; charset=US-ASCII; format=flowed') expect(c.encoded).to eq %Q{Content-Type: text/plain;\r\n\scharset=US-ASCII;\r\n\sformat=flowed\r\n} end it "should render quoted values encoded" do c = Mail::ContentTypeField.new('text/plain; example="foo bar"') expect(c.encoded).to eq %Q{Content-Type: text/plain;\r\n\sexample="foo bar"\r\n} end it "should render decoded" do c = Mail::ContentTypeField.new('text/plain; charset=US-ASCII; format=flowed') expect(c.decoded).to eq 'text/plain; charset=US-ASCII; format=flowed' end it "should render quoted values decoded" do c = Mail::ContentTypeField.new('text/plain; example="foo bar"') expect(c.decoded).to eq 'text/plain; example="foo bar"' end it "should render " do c = Mail::ContentTypeField.new('message/delivery-status') expect(c.main_type).to eq 'message' expect(c.sub_type).to eq 'delivery-status' end it "should wrap a filename in double quotation marks only if the filename contains spaces and does not already have double quotation marks" do c = Mail::ContentTypeField.new('text/plain; name=This is a bad filename.txt') expect(c.value).to eq 'text/plain; name="This is a bad filename.txt"' c = Mail::ContentTypeField.new('image/jpg; name=some.jpg; size=100') expect(c.value).to eq 'image/jpg; name=some.jpg; size=100' c = Mail::ContentTypeField.new('text/plain; name="Bad filename but at least it is wrapped in quotes.txt"') expect(c.value).to eq 'text/plain; name="Bad filename but at least it is wrapped in quotes.txt"' end it "should only wrap filenames in double quotation marks" do c = Mail::ContentTypeField.new("image/jpg;\r\n\sname=some .jpg\r\n\ssize=100") expect(c.value).to eq %Q{image/jpg;\r\n\sname="some .jpg"\r\n\ssize=100} end end describe "instance methods" do it "should return a content_type" do c = Mail::ContentTypeField.new('text/plain') expect(c.content_type).to eq 'text/plain' end it "should return a content_type for the :string method" do c = Mail::ContentTypeField.new('text/plain') expect(c.string).to eq 'text/plain' end it "should return a main_type" do c = Mail::ContentTypeField.new('text/plain') expect(c.main_type).to eq 'text' end it "should return a sub_type" do c = Mail::ContentTypeField.new('text/plain') expect(c.main_type).to eq 'text' end it "should return a parameter as a hash" do c = Mail::ContentTypeField.new('text/plain; charset=US-ASCII') expect(c.parameters).to eql({"charset" => 'US-ASCII'}) end it "should return multiple parameters as a hash" do c = Mail::ContentTypeField.new('text/plain; charset=US-ASCII; format=flowed') expect(c.parameters).to eql({"charset" => 'US-ASCII', "format" => 'flowed'}) end it "should return boundry parameters" do c = Mail::ContentTypeField.new('multipart/mixed; boundary=Apple-Mail-13-196941151') expect(c.parameters).to eql({"boundary" => 'Apple-Mail-13-196941151'}) end it "should be indifferent with the access" do c = Mail::ContentTypeField.new('multipart/mixed; boundary=Apple') expect(c.parameters[:boundary]).to eq "Apple" expect(c.parameters['boundary']).to eq "Apple" end end describe "class methods" do it "should give back an initialized instance with a unique boundary" do boundary = Mail::ContentTypeField.with_boundary('multipart/mixed') expect(boundary.encoded).to match(%r{Content-Type: multipart/mixed;\r\n\sboundary="--==_mimepart_[\w]+_[\w]+"\r\n}) end it "should give back an initialized instance with different type with a unique boundary" do boundary = Mail::ContentTypeField.with_boundary('multipart/alternative') expect(boundary.encoded).to match(%r{Content-Type: multipart/alternative;\r\n\sboundary="--==_mimepart_[\w]+_[\w]+"\r\n}) end it "should give unique boundaries" do boundary1 = Mail::ContentTypeField.with_boundary('multipart/alternative').parameters['boundary'] 0.upto(250) do boundary2 = Mail::ContentTypeField.with_boundary('multipart/alternative').parameters['boundary'] expect(boundary1).not_to eq(boundary2) end end end describe "Testing a bunch of email Content-Type fields" do it "should handle 'application/octet-stream; name*=iso-2022-jp'ja'01%20Quien%20Te%20Dij%8aat.%20Pitbull.mp3'" do string = %q{application/octet-stream; name*=iso-2022-jp'ja'01%20Quien%20Te%20Dij%8aat.%20Pitbull.mp3} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/octet-stream' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'octet-stream' expect(c.parameters).to eql({'name*' => "iso-2022-jp'ja'01%20Quien%20Te%20Dij%8aat.%20Pitbull.mp3"}) end it "should handle 'application/pdf;'" do string = %q{application/pdf;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/pdf' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'pdf' expect(c.parameters).to eql({}) end it "should handle 'application/pdf; name=\"broken.pdf\"'" do string = %q{application/pdf; name="broken.pdf"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/pdf' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'pdf' expect(c.parameters).to eql({"name" => "broken.pdf"}) end it "should handle 'application/pkcs7-signature;'" do string = %q{application/pkcs7-signature;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/pkcs7-signature' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'pkcs7-signature' expect(c.parameters).to eql({}) end it "should handle 'application/pkcs7-signature; name=smime.p7s'" do string = %q{application/pkcs7-signature; name=smime.p7s} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/pkcs7-signature' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'pkcs7-signature' expect(c.parameters).to eql({"name" => "smime.p7s"}) end it "should handle 'application/x-gzip; NAME=blah.gz'" do string = %q{application/x-gzip; NAME=blah.gz} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'application/x-gzip' expect(c.main_type).to eq 'application' expect(c.sub_type).to eq 'x-gzip' expect(c.parameters).to eql({"NAME" => "blah.gz"}) end it "should handle 'image/jpeg'" do string = %q{image/jpeg} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'image/jpeg' expect(c.main_type).to eq 'image' expect(c.sub_type).to eq 'jpeg' expect(c.parameters).to eql({}) end it "should handle 'image/jpeg'" do string = %q{image/jpeg} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'image/jpeg' expect(c.main_type).to eq 'image' expect(c.sub_type).to eq 'jpeg' expect(c.parameters).to eql({}) end it "should handle 'image/jpeg;'" do string = %q{image/jpeg} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'image/jpeg' expect(c.main_type).to eq 'image' expect(c.sub_type).to eq 'jpeg' expect(c.parameters).to eql({}) end it "should handle 'image/png;'" do string = %q{image/png} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'image/png' expect(c.main_type).to eq 'image' expect(c.sub_type).to eq 'png' expect(c.parameters).to eql({}) end it "should handle 'message/delivery-status'" do string = %q{message/delivery-status} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'message/delivery-status' expect(c.main_type).to eq 'message' expect(c.sub_type).to eq 'delivery-status' expect(c.parameters).to eql({}) end it "should handle 'message/rfc822'" do string = %q{message/rfc822} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'message/rfc822' expect(c.main_type).to eq 'message' expect(c.sub_type).to eq 'rfc822' expect(c.parameters).to eql({}) end it "should handle 'multipart/alternative;'" do string = %q{multipart/alternative;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({}) end it "should handle 'multipart/alternative; boundary=\"----=_NextPart_000_0093_01C81419.EB75E850\"'" do string = %q{multipart/alternative; boundary="----=_NextPart_000_0093_01C81419.EB75E850"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" =>"----=_NextPart_000_0093_01C81419.EB75E850"}) end it "should handle 'multipart/alternative; boundary=----=_NextPart_000_0093_01C81419.EB75E850'" do string = %q{multipart/alternative; boundary="----=_NextPart_000_0093_01C81419.EB75E850"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" =>"----=_NextPart_000_0093_01C81419.EB75E850"}) end it "should handle 'Multipart/Alternative;boundary=MuLtIpArT_BoUnDaRy'" do string = %q{Multipart/Alternative; boundary=MuLtIpArT_BoUnDaRy} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" =>"MuLtIpArT_BoUnDaRy"}) end it "should handle 'Multipart/Alternative;boundary=MuLtIpArT_BoUnDaRy'" do string = %q{Multipart/Alternative;boundary=MuLtIpArT_BoUnDaRy} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" =>"MuLtIpArT_BoUnDaRy"}) end it %(should handle 'multipart/alternative; boundary="----jkhkjgyurlkmn789809";; charset="us-ascii"') do string = %(multipart/alternative; boundary="----jkhkjgyurlkmn789809";; charset="us-ascii") c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.parameters['boundary']).to eq('----jkhkjgyurlkmn789809') end it "should handle 'multipart/mixed'" do string = %q{multipart/mixed} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/mixed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'mixed' expect(c.parameters).to eql({}) end it "should handle 'multipart/mixed;'" do string = %q{multipart/mixed;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/mixed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'mixed' expect(c.parameters).to eql({}) end it "should handle 'multipart/mixed; boundary=Apple-Mail-13-196941151'" do string = %q{multipart/mixed; boundary=Apple-Mail-13-196941151} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/mixed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'mixed' expect(c.parameters).to eql({"boundary" => "Apple-Mail-13-196941151"}) end it "should handle 'multipart/mixed; boundary=mimepart_427e4cb4ca329_133ae40413c81ef'" do string = %q{multipart/mixed; boundary=mimepart_427e4cb4ca329_133ae40413c81ef} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/mixed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'mixed' expect(c.parameters).to eql({"boundary" => "mimepart_427e4cb4ca329_133ae40413c81ef"}) end it "should handle 'multipart/report; report-type=delivery-status;'" do string = %q{multipart/report; report-type=delivery-status;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/report' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'report' expect(c.parameters).to eql({"report-type" => "delivery-status"}) end it "should handle 'multipart/signed;'" do string = %q{multipart/signed;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/signed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'signed' expect(c.parameters).to eql({}) end it "should handle 'text/enriched;'" do string = %q{text/enriched;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/enriched' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'enriched' expect(c.parameters).to eql({}) end it "should handle 'text/html;'" do string = %q{text/html;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/html' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'html' expect(c.parameters).to eql({}) end it "should handle 'text/html; charset=iso-8859-1;'" do string = %q{text/html; charset=iso-8859-1;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/html' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'html' expect(c.parameters).to eql({"charset" => 'iso-8859-1'}) end it "should handle 'TEXT/PLAIN; charset=ISO-8859-1;'" do string = %q{TEXT/PLAIN; charset=ISO-8859-1;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'ISO-8859-1'}) end it "should handle 'text/plain'" do string = %q{text/plain} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({}) end it "should handle 'text/plain;'" do string = %q{text/plain;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({}) end it "should handle 'text/plain; charset=ISO-8859-1'" do string = %q{text/plain; charset=ISO-8859-1} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'ISO-8859-1'}) end it "should handle 'text/plain; charset=ISO-8859-1;'" do string = %q{text/plain; charset=ISO-8859-1; format=flowed} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'ISO-8859-1', "format" => 'flowed'}) end it "should handle 'text/plain; charset=us-ascii;'" do string = %q{text/plain; charset=us-ascii} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'us-ascii'}) end it "should handle 'text/plain; charset=US-ASCII; format=flowed'" do string = %q{text/plain; charset=US-ASCII; format=flowed} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'US-ASCII', "format" => 'flowed'}) end it "should handle 'text/plain; charset=US-ASCII; format=flowed'" do string = %q{text/plain; charset=US-ASCII; format=flowed} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'US-ASCII', "format" => 'flowed'}) end it "should handle 'text/plain; charset=utf-8'" do string = %q{text/plain; charset=utf-8} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'utf-8'}) end it "should handle 'text/plain; charset=utf-8'" do string = %q{text/plain; charset=X-UNKNOWN} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/plain' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'plain' expect(c.parameters).to eql({"charset" => 'X-UNKNOWN'}) end it "should handle 'text/x-ruby-script;'" do string = %q{text/x-ruby-script;} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/x-ruby-script' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'x-ruby-script' expect(c.parameters).to eql({}) end it "should handle 'text/x-ruby-script; name=\"hello.rb\"'" do string = %q{text/x-ruby-script; name="hello.rb"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'text/x-ruby-script' expect(c.main_type).to eq 'text' expect(c.sub_type).to eq 'x-ruby-script' expect(c.parameters).to eql({"name" => 'hello.rb'}) end it "should handle 'multipart/mixed; boundary=\"=_NextPart_Lycos_15031600484464_ID\"" do string = %q{multipart/mixed; boundary="=_NextPart_Lycos_15031600484464_ID"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/mixed' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'mixed' expect(c.parameters).to eql({"boundary" => '=_NextPart_Lycos_15031600484464_ID'}) end it "should handle 'multipart/alternative; boundary=----=_=NextPart_000_0093_01C81419.EB75E850" do string = %q{multipart/alternative; boundary=----=_=NextPart_000_0093_01C81419.EB75E850} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" => '----=_=NextPart_000_0093_01C81419.EB75E850'}) end it "should handle 'multipart/alternative; boundary=\"----=_=NextPart_000_0093_01C81419.EB75E850\"" do string = %q{multipart/alternative; boundary="----=_=NextPart_000_0093_01C81419.EB75E850"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/alternative' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'alternative' expect(c.parameters).to eql({"boundary" => '----=_=NextPart_000_0093_01C81419.EB75E850'}) end it "should handle 'multipart/related;boundary=1_4626B816_9F1690;Type=\"application/smil\";Start=\"\"'" do string = %q{multipart/related;boundary=1_4626B816_9F1690;Type="application/smil";Start=""} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'multipart/related' expect(c.main_type).to eq 'multipart' expect(c.sub_type).to eq 'related' expect(c.parameters).to eql({"boundary" => '1_4626B816_9F1690', "Type" => 'application/smil', "Start" => ''}) end it "should handle 'IMAGE/JPEG; name=\"IM 006.jpg\"'" do string = %q{IMAGE/JPEG; name="IM 006.jpg"} c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'image/jpeg' expect(c.main_type).to eq 'image' expect(c.sub_type).to eq 'jpeg' expect(c.parameters).to eql({"name" => "IM 006.jpg"}) end it "should handle 'unknown/unknown'" do string = %(unknown/unknown; charset=iso-8859-1; name=IMSTP19.gif) c = Mail::ContentTypeField.new(string) expect(c.content_type).to eq 'unknown/unknown' expect(c.main_type).to eq 'unknown' expect(c.sub_type).to eq 'unknown' expect(c.parameters).to eql('charset' => 'iso-8859-1', 'name' => 'IMSTP19.gif') end end describe "finding a filename" do it "should locate a filename if there is a filename" do string = %q{application/octet-stream; filename=mikel.jpg} c = Mail::ContentTypeField.new(string) expect(c.filename).to eq 'mikel.jpg' end it "should locate a name if there is no filename" do string = %q{application/octet-stream; name=mikel.jpg} c = Mail::ContentTypeField.new(string) expect(c.filename).to eq 'mikel.jpg' end it "should locate an encoded name as a filename" do string = %q{application/octet-stream; name*=iso-2022-jp'ja'01%20Quien%20Te%20Dij%91at.%20Pitbull.mp3} c = Mail::ContentTypeField.new(string) if RUBY_VERSION >= '1.9' expected = "01 Quien Te Dij\221at. Pitbull.mp3".dup.force_encoding(Encoding::BINARY) result = c.filename.force_encoding(Encoding::BINARY) else expected = "01 Quien Te Dij\221at. Pitbull.mp3" result = c.filename end expect(expected).to eq result end it "should encode a non us-ascii filename" do @original = $KCODE if RUBY_VERSION < '1.9' Mail.defaults do param_encode_language('jp') end c = Mail::ContentTypeField.new('application/octet-stream') string = "01 Quien Te Dij\221at. Pitbull.mp3" case when RUBY_VERSION >= '1.9.3' string = string.dup.force_encoding('SJIS') result = %Q{Content-Type: application/octet-stream;\r\n\sfilename*=windows-31j'jp'01%20Quien%20Te%20Dij%91%61t.%20Pitbull.mp3\r\n} when RUBY_VERSION >= '1.9' string = string.dup.force_encoding('SJIS') result = %Q{Content-Type: application/octet-stream;\r\n\sfilename*=shift_jis'jp'01%20Quien%20Te%20Dij%91%61t.%20Pitbull.mp3\r\n} else $KCODE = 'SJIS' result = %Q{Content-Type: application/octet-stream;\r\n\sfilename*=sjis'jp'01%20Quien%20Te%20Dij%91at.%20Pitbull.mp3\r\n} end c.filename = string expect(c.parameters).to eql({"filename" => string}) expect(c.encoded).to eq result $KCODE = @original if RUBY_VERSION < '1.9' end end describe "handling badly formated content-type fields" do it "should handle missing sub-type on a text content type" do c = Mail::ContentTypeField.new('Content-Type: text') expect(c.content_type).to eq 'text/plain' end it "should handle missing ; after content-type" do c = Mail::ContentTypeField.new('Content-Type: multipart/mixed boundary="----=_NextPart_000_000F_01C17754.8C3CAF30"') expect(c.content_type).to eq 'multipart/mixed' expect(c.parameters['boundary']).to eq '----=_NextPart_000_000F_01C17754.8C3CAF30' end end describe "initializing with an array" do it "should initialize with an array" do c = Mail::ContentTypeField.new(['text', 'html', {'charset' => 'UTF-8'}]) expect(c.content_type).to eq 'text/html' expect(c.parameters['charset']).to eq 'UTF-8' end it "should allow many parameters to be passed in" do c = Mail::ContentTypeField.new(['text', 'html', {"format"=>"flowed", "charset"=>"utf-8"}]) expect(c.content_type).to eq 'text/html' expect(c.parameters['charset']).to eq 'utf-8' expect(c.parameters['format']).to eq 'flowed' end end describe "special case values needing sanity" do it "should handle 'text/plain;ISO-8559-1'" do c = Mail::ContentTypeField.new('text/plain;ISO-8559-1') expect(c.string).to eq 'text/plain' expect(c.parameters['charset']).to eq 'iso-8559-1' end it "should handle 'text/plain; charset = \"iso-8859-1\"'" do c = Mail::ContentTypeField.new('text/plain; charset = "iso-8859-1"') expect(c.string).to eq 'text/plain' expect(c.parameters['charset']).to eq 'iso-8859-1' end it "should handle text; params" do c = Mail::ContentTypeField.new('text; charset=utf-8') expect(c.string).to eq 'text/plain' expect(c.parameters['charset']).to eq 'utf-8' end it 'should handle text/html; charset="charset="GB2312""' do c = Mail::ContentTypeField.new('text/html; charset="charset="GB2312""') expect(c.string).to eq 'text/html' expect(c.parameters['charset']).to eq 'gb2312' end it "should handle application/octet-stream; name=archiveshelp1[1].htm" do c = Mail::ContentTypeField.new('application/octet-stream; name=archiveshelp1[1].htm') expect(c.string).to eq 'application/octet-stream' expect(c.parameters['name']).to eq 'archiveshelp1[1].htm' end it 'should handle text/plain;; format="flowed"' do c = Mail::ContentTypeField.new('text/plain;; format="flowed"') expect(c.string).to eq 'text/plain' expect(c.parameters['format']).to eq 'flowed' end it 'set an empty content type to text/plain' do c = Mail::ContentTypeField.new('') expect(c.string).to eq 'text/plain' end it "should just ignore illegal params like audio/x-midi;\r\n\sname=Part .exe" do c = Mail::ContentTypeField.new("audio/x-midi;\r\n\sname=Part .exe") expect(c.string).to eq 'audio/x-midi' expect(c.parameters['name']).to eq nil end it "should handle: rfc822; format=flowed; charset=iso-8859-15" do c = Mail::ContentTypeField.new("rfc822; format=flowed; charset=iso-8859-15") expect(c.string).to eq 'text/plain' expect(c.parameters['format']).to eq 'flowed' expect(c.parameters['charset']).to eq 'iso-8859-15' end it "should just get the mime type if all else fails with some real garbage" do c = Mail::ContentTypeField.new("text/html; format=flowed; charset=iso-8859-15 Mime-Version: 1.0") expect(c.string).to eq 'text/html' end it "shouldn't include separating semicolon in parameter value when sanitizing" do c = Mail::ContentTypeField.new(%Q{Multipart/Related;boundary=boundary123?WUT; type="application/xml";}) expect(c.parameters['boundary']).to eq 'boundary123?WUT' end end end mail-2.6.4/spec/mail/fields/date_field_spec.rb000066400000000000000000000062231267453234600212250ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::DateField do # The origination date field consists of the field name "Date" followed # by a date-time specification. # # orig-date = "Date:" date-time CRLF # # The origination date specifies the date and time at which the creator # of the message indicated that the message was complete and ready to # enter the mail delivery system. For instance, this might be the time # that a user pushes the "send" or "submit" button in an application # program. In any case, it is specifically not intended to convey the # time that the message is actually transported, but rather the time at # which the human or other creator of the message has put the message # into its final form, ready for transport. (For example, a portable # computer user who is not connected to a network might queue a message # for delivery. The origination date is intended to contain the date # and time that the user queued the message, not the time when the user # connected to the network to send the message.) describe "initialization" do it "should initialize" do expect { Mail::DateField.new("12 Aug 2009 00:00:02 GMT") }.not_to raise_error end it "should be able to tell the time" do expect(Mail::DateField.new("12 Aug 2009 00:00:02 GMT").date_time.class).to eq DateTime end it "should mix in the CommonAddress module" do expect(Mail::DateField.included_modules).to include(Mail::CommonDate) end it "should accept a string with the field name" do t = Mail::DateField.new('Date: 12 Aug 2009 00:00:02 GMT') expect(t.name).to eq 'Date' expect(t.value).to eq 'Wed, 12 Aug 2009 00:00:02 +0000' expect(t.date_time).to eq ::DateTime.parse('12 Aug 2009 00:00:02 GMT') end it "should accept a string without the field name" do t = Mail::DateField.new('12 Aug 2009 00:00:02 GMT') expect(t.name).to eq 'Date' expect(t.value).to eq 'Wed, 12 Aug 2009 00:00:02 +0000' expect(t.date_time).to eq ::DateTime.parse('12 Aug 2009 00:00:02 GMT') end it "should accept nil as a value" do t = Mail::DateField.new(nil) expect(t.date_time).not_to be_nil end it "should allow us to encode an date field" do field = Mail::DateField.new('12 Aug 2009 00:00:02 GMT') expect(field.encoded).to eq "Date: Wed, 12 Aug 2009 00:00:02 +0000\r\n" end it "should allow us to decode an address field" do field = Mail::DateField.new('12 Aug 2009 00:00:02 GMT') expect(field.decoded).to eq "Wed, 12 Aug 2009 00:00:02 +0000" end it "should be able to parse a really bad spacing example" do field = Mail::DateField.new("Fri, 21 Nov 1997 09(comment): 55 : 06 -0600") expect(field.decoded).to eq "Fri, 21 Nov 1997 09:55:06 -0600" end it "should give today's date if no date is specified" do now = DateTime.now expect(DateTime).to receive(:now).at_least(:once).and_return(now) expect(Mail::DateField.new.date_time).to eq ::DateTime.parse(now.to_s) end end end mail-2.6.4/spec/mail/fields/envelope_spec.rb000066400000000000000000000030261267453234600207600ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::Envelope do # From RFC4155 The application/mbox Media Type # # o Each message in the mbox database MUST be immediately preceded # by a single separator line, which MUST conform to the following # syntax: # # The exact character sequence of "From"; # # a single Space character (0x20); # # the email address of the message sender (as obtained from the # message envelope or other authoritative source), conformant # with the "addr-spec" syntax from RFC 2822; # # a single Space character; # # a timestamp indicating the UTC date and time when the message # was originally received, conformant with the syntax of the # traditional UNIX 'ctime' output sans timezone (note that the # use of UTC precludes the need for a timezone indicator); # # an end-of-line marker. it "should initialize" do expect { Mail::Envelope.new('mikel@test.lindsaar.net Mon May 2 16:07:05 2005') }.not_to raise_error end describe "accessor methods" do it "should return the address" do envelope = Mail::Envelope.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") expect(envelope.from).to eq "mikel@test.lindsaar.net" end it "should return the date_time" do envelope = Mail::Envelope.new("mikel@test.lindsaar.net Mon Aug 17 00:39:21 2009") expect(envelope.date).to eq ::DateTime.parse("Mon Aug 17 00:39:21 2009") end end end mail-2.6.4/spec/mail/fields/from_field_spec.rb000066400000000000000000000064761267453234600212650ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # from = "From:" mailbox-list CRLF describe Mail::FromField do describe "initialization" do it "should initialize" do expect { Mail::FromField.new("From: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::FromField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::FromField.new('From: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'From' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::FromField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'From' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oFromurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::FromField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::FromField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::FromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::FromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::FromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "From: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end it "should return the encoded line" do t = Mail::FromField.new("bob@me.com") expect(t.encoded).to eq "From: bob@me.com\r\n" end it "should return the decoded line" do t = Mail::FromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.decoded).to eq "sam@me.com, my_group: mikel@me.com, bob@you.com;" end end it "should handle non ascii" do t = Mail::FromField.new('"Foo áëô îü" ') expect(t.decoded).to eq '"Foo áëô îü" ' expect(t.encoded).to eq "From: =?UTF-8?B?Rm9vIMOhw6vDtCDDrsO8?= \r\n" end it "should work without quotes" do t = Mail::FromField.new('Foo áëô îü ') expect(t.encoded).to eq "From: Foo =?UTF-8?B?w6HDq8O0?= =?UTF-8?B?IMOuw7w=?= \r\n" expect(t.decoded).to eq '"Foo áëô îü" ' end end mail-2.6.4/spec/mail/fields/in_reply_to_field_spec.rb000066400000000000000000000077731267453234600226460ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # The "In-Reply-To:" field will contain the contents of the "Message- # ID:" field of the message to which this one is a reply (the "parent # message"). If there is more than one parent message, then the "In- # Reply-To:" field will contain the contents of all of the parents' # "Message-ID:" fields. If there is no "Message-ID:" field in any of # the parent messages, then the new message will have no "In-Reply-To:" # field. describe Mail::InReplyToField do describe "initialization" do it "should initialize" do expect { Mail::InReplyToField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::InReplyToField.new('In-Reply-To: <1234@test.lindsaar.net>') expect(t.name).to eq 'In-Reply-To' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should accept a string without the field name" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net>') expect(t.name).to eq 'In-Reply-To' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should provide encoded" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net>') expect(t.encoded).to eq "In-Reply-To: <1234@test.lindsaar.net>\r\n" end it "should handle many encoded message IDs" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net> <4567@test.lindsaar.net>') expect(t.encoded).to eq "In-Reply-To: <1234@test.lindsaar.net>\r\n <4567@test.lindsaar.net>\r\n" end it "should handle an array of message IDs" do t = Mail::InReplyToField.new(['<1234@test.lindsaar.net>', '<4567@test.lindsaar.net>']) expect(t.encoded).to eq "In-Reply-To: <1234@test.lindsaar.net>\r\n <4567@test.lindsaar.net>\r\n" end it "should provide decoded" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net>') expect(t.decoded).to eq "<1234@test.lindsaar.net>" end it "should handle many decoded message IDs" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net> <4567@test.lindsaar.net>') expect(t.decoded).to eq '<1234@test.lindsaar.net> <4567@test.lindsaar.net>' end it "should handle an empty value" do t = Mail::InReplyToField.new('') expect(t.name).to eq 'In-Reply-To' expect(t.decoded).to eq nil end end describe "handlign multiple message ids" do it "should handle many message IDs" do t = Mail::InReplyToField.new('<1234@test.lindsaar.net> <4567@test.lindsaar.net>') expect(t.name).to eq 'In-Reply-To' expect(t.message_ids).to eq ['1234@test.lindsaar.net', '4567@test.lindsaar.net'] end end it "should output lines shorter than 998 chars" do k = Mail::InReplyToField.new(' ') lines = k.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 998 } end end mail-2.6.4/spec/mail/fields/keywords_field_spec.rb000066400000000000000000000067541267453234600221700ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::KeywordsField do describe "initializing" do it "should initialize" do expect { Mail::KeywordsField.new("this, is, email") }.not_to raise_error end it "should accept a string with the field name" do k = Mail::KeywordsField.new('Keywords: these are keywords, so there') expect(k.name).to eq 'Keywords' expect(k.value).to eq 'these are keywords, so there' end it "should accept a string with the field name" do k = Mail::KeywordsField.new('these are keywords, so there') expect(k.name).to eq 'Keywords' expect(k.value).to eq 'these are keywords, so there' end end describe "giving a list of keywords" do it "should return a list of keywords" do k = Mail::KeywordsField.new('these are keywords, so there') expect(k.keywords).to eq ['these are keywords', 'so there'] end it "should handle phrases" do k = Mail::KeywordsField.new('"these, are keywords", so there') expect(k.keywords).to eq ['these, are keywords', 'so there'] end it "should handle comments" do k = Mail::KeywordsField.new('"these, are keywords", so there (This is an irrelevant comment)') expect(k.keywords).to eq ['these, are keywords', 'so there (This is an irrelevant comment)'] end it "should handle comments" do k = Mail::KeywordsField.new('"these, are keywords", so there (This is an irrelevant comment)') expect(k.keywords).to eq ['these, are keywords', 'so there (This is an irrelevant comment)'] end it "should handle comments in quotes" do k = Mail::KeywordsField.new('"these, are keywords (another comment to be ignored)", so there (This is an irrelevant comment)') expect(k.keywords).to eq ['these, are keywords (another comment to be ignored)', 'so there (This is an irrelevant comment)'] end end describe "encoding and decoding" do it "should encode" do k = Mail::KeywordsField.new('these are keywords, so there') expect(k.encoded).to eq "Keywords: these are keywords,\r\n so there\r\n" end it "should decode" do k = Mail::KeywordsField.new('these are keywords, so there') expect(k.decoded).to eq "these are keywords, so there" end end it "should output lines shorter than 998 chars" do k = Mail::KeywordsField.new('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed placerat euismod velit nec convallis. Cras bibendum mattis arcu a tincidunt. Nullam ac orci vitae massa elementum ultricies ultricies nec quam. Praesent eleifend viverra semper. Sed id ultricies ipsum. Pellentesque sed nunc mauris, at varius sem. Curabitur pretium pellentesque velit, eget pellentesque dolor interdum eget. Duis ac lectus nec arcu pharetra lobortis. Integer risus felis, convallis ut feugiat quis, imperdiet ut sapien. Nullam imperdiet leo nec lectus imperdiet mollis. Proin nec lectus id erat pellentesque pretium vitae sit amet massa. Proin interdum pellentesque mi, at tristique sem facilisis ut. Donec enim mauris, viverra ut lacinia pharetra, elementum nec mi. Ut at interdum massa. Integer placerat tortor at tellus lobortis a mattis massa ultricies. Vivamus nec dolor at justo fringilla laoreet rhoncus fermentum lectus. Praesent tincidunt congue mauris vitae aliquam. Mauris arcu mauris, faucibus sed turpis duis.') lines = k.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 998 } end end mail-2.6.4/spec/mail/fields/message_id_field_spec.rb000066400000000000000000000133321267453234600224070ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # 3.6.4. Identification fields # # Though optional, every message SHOULD have a "Message-ID:" field. # Furthermore, reply messages SHOULD have "In-Reply-To:" and # "References:" fields as appropriate, as described below. # # The "Message-ID:" field contains a single unique message identifier. # The "References:" and "In-Reply-To:" field each contain one or more # unique message identifiers, optionally separated by CFWS. # # The message identifier (msg-id) is similar in syntax to an angle-addr # construct without the internal CFWS. # # message-id = "Message-ID:" msg-id CRLF # # in-reply-to = "In-Reply-To:" 1*msg-id CRLF # # references = "References:" 1*msg-id CRLF # # msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] # # id-left = dot-atom-text / no-fold-quote / obs-id-left # # id-right = dot-atom-text / no-fold-literal / obs-id-right # # no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE # # no-fold-literal = "[" *(dtext / quoted-pair) "]" # # The "Message-ID:" field provides a unique message identifier that # refers to a particular version of a particular message. The # uniqueness of the message identifier is guaranteed by the host that # generates it (see below). This message identifier is intended to be # machine readable and not necessarily meaningful to humans. A message # identifier pertains to exactly one instantiation of a particular # message; subsequent revisions to the message each receive new message # identifiers. # # Note: There are many instances when messages are "changed", but those # changes do not constitute a new instantiation of that message, and # therefore the message would not get a new message identifier. For # example, when messages are introduced into the transport system, they # are often prepended with additional header fields such as trace # fields (described in section 3.6.7) and resent fields (described in # section 3.6.6). The addition of such header fields does not change # the identity of the message and therefore the original "Message-ID:" # field is retained. In all cases, it is the meaning that the sender # of the message wishes to convey (i.e., whether this is the same # message or a different message) that determines whether or not the # "Message-ID:" field changes, not any particular syntactic difference # that appears (or does not appear) in the message. describe Mail::MessageIdField do describe "initialization" do it "should initialize" do expect { Mail::MessageIdField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do m = Mail::MessageIdField.new('Message-ID: <1234@test.lindsaar.net>') expect(m.name).to eq 'Message-ID' expect(m.value).to eq '<1234@test.lindsaar.net>' expect(m.message_id).to eq '1234@test.lindsaar.net' end it "should accept a string without the field name" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m.name).to eq 'Message-ID' expect(m.value).to eq '<1234@test.lindsaar.net>' expect(m.message_id).to eq '1234@test.lindsaar.net' end it "should accept a nil value and generate a message_id" do m = Mail::MessageIdField.new(nil) expect(m.name).to eq 'Message-ID' expect(m.value).not_to be_nil end end describe "ensuring only one message ID" do it "should not accept a string with multiple message IDs but only return the first" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net> <4567@test.lindsaar.net>') expect(m.name).to eq 'Message-ID' expect(m.to_s).to eq '<1234@test.lindsaar.net>' expect(m.message_id).to eq '1234@test.lindsaar.net' expect(m.message_ids).to eq ['1234@test.lindsaar.net'] end it "should change the message id if given a new message id" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m.to_s).to eq '<1234@test.lindsaar.net>' m.value = '<4567@test.lindsaar.net>' expect(m.to_s).to eq '<4567@test.lindsaar.net>' end end describe "instance methods" do it "should provide to_s" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m.to_s).to eq '<1234@test.lindsaar.net>' expect(m.message_id.to_s).to eq '1234@test.lindsaar.net' end it "should provide encoded" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m.encoded).to eq "Message-ID: <1234@test.lindsaar.net>\r\n" end it "should provide decoded" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m.decoded).to eq "<1234@test.lindsaar.net>" end it "should respond to :responsible_for?" do m = Mail::MessageIdField.new('<1234@test.lindsaar.net>') expect(m).to respond_to(:responsible_for?) end end describe "generating a message id" do it "should generate a message ID if it has no value" do m = Mail::MessageIdField.new expect(Mail::Utilities.blank?(m.message_id)).not_to be_truthy end it "should generate a random message ID" do m = Mail::MessageIdField.new 1.upto(100) do expect(m.message_id).not_to eq(Mail::MessageIdField.new.message_id) end end end describe "weird message IDs" do it "should be able to parse <000701c874a6$3df7eaf0$b9e7c0d0$@geille@fiscon.com>" do m = Mail::MessageIdField.new('<000701c874a6$3df7eaf0$b9e7c0d0$@geille@fiscon.com>') expect(m.message_id).to eq '000701c874a6$3df7eaf0$b9e7c0d0$@geille@fiscon.com' end end end mail-2.6.4/spec/mail/fields/mime_version_field_spec.rb000066400000000000000000000144431267453234600230070ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::MimeVersionField do # MIME-Version Header Field # # Since RFC 822 was published in 1982, there has really been only one # format standard for Internet messages, and there has been little # perceived need to declare the format standard in use. This document # is an independent specification that complements RFC 822. Although # the extensions in this document have been defined in such a way as to # be compatible with RFC 822, there are still circumstances in which it # might be desirable for a mail-processing agent to know whether a # message was composed with the new standard in mind. # # Therefore, this document defines a new header field, "MIME-Version", # which is to be used to declare the version of the Internet message # body format standard in use. # # Messages composed in aMimeVersionordance with this document MUST include such # a header field, with the following verbatim text: # # MIME-Version: 1.0 # # The presence of this header field is an assertion that the message # has been composed in compliance with this document. # # Since it is possible that a future document might extend the message # format standard again, a formal BNF is given for the content of the # MIME-Version field: # # version := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT # # Thus, future format specifiers, which might replace or extend "1.0", # are constrained to be two integer fields, separated by a period. If # a message is received with a MIME-version value other than "1.0", it # cannot be assumed to conform with this document. # # Note that the MIME-Version header field is required at the top level # of a message. It is not required for each body part of a multipart # entity. It is required for the embedded headers of a body of type # "message/rfc822" or "message/partial" if and only if the embedded # message is itself claimed to be MIME-conformant. # # It is not possible to fully specify how a mail reader that conforms # with MIME as defined in this document should treat a message that # might arrive in the future with some value of MIME-Version other than # "1.0". # # It is also worth noting that version control for specific media types # is not aMimeVersionomplished using the MIME-Version mechanism. In particular, # some formats (such as application/postscript) have version numbering # conventions that are internal to the media format. Where such # conventions exist, MIME does nothing to supersede them. Where no # such conventions exist, a MIME media type might use a "version" # parameter in the content-type field if necessary. # # NOTE TO IMPLEMENTORS: When checking MIME-Version values any RFC 822 # comment strings that are present must be ignored. In particular, the # following four MIME-Version fields are equivalent: # # MIME-Version: 1.0 # # MIME-Version: 1.0 (produced by MetaSend Vx.x) # # MIME-Version: (produced by MetaSend Vx.x) 1.0 # # MIME-Version: 1.(produced by MetaSend Vx.x)0 # # In the absence of a MIME-Version field, a receiving mail user agent # (whether conforming to MIME requirements or not) may optionally # choose to interpret the body of the message aMimeVersionording to local # conventions. Many such conventions are currently in use and it # should be noted that in practice non-MIME messages can contain just # about anything. # # It is impossible to be certain that a non-MIME mail message is # actually plain text in the US-ASCII character set since it might well # be a message that, using some set of nonstandard local conventions # that predate MIME, includes text in another character set or non- # textual data presented in a manner that cannot be automatically # recognized (e.g., a uuencoded compressed UNIX tar file). describe "initialization" do it "should initialize" do expect { Mail::MimeVersionField.new("1.0") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::MimeVersionField.new('Mime-Version: 1.0') expect(t.name).to eq 'Mime-Version' expect(t.value).to eq '1.0' end it "should accept a string without the field name" do t = Mail::MimeVersionField.new('1.0') expect(t.name).to eq 'Mime-Version' expect(t.value).to eq '1.0' end end describe "parsing a version string" do it "should get a major value" do t = Mail::MimeVersionField.new('1.0') expect(t.major).to eq 1 end it "should get a minor value" do t = Mail::MimeVersionField.new('1.0') expect(t.minor).to eq 0 end it "should get a version string" do t = Mail::MimeVersionField.new('1.0') expect(t.version).to eq '1.0' end it "should handle comments before the major version" do t = Mail::MimeVersionField.new('(This is a comment) 1.0') expect(t.version).to eq '1.0' end it "should handle comments before the major version without space" do t = Mail::MimeVersionField.new('(This is a comment)1.0') expect(t.version).to eq '1.0' end it "should handle comments after the major version without space" do t = Mail::MimeVersionField.new('1(This is a comment).0') expect(t.version).to eq '1.0' end it "should handle comments before the minor version without space" do t = Mail::MimeVersionField.new('1.(This is a comment)0') expect(t.version).to eq '1.0' end it "should handle comments after the minor version without space" do t = Mail::MimeVersionField.new('1.0(This is a comment)') expect(t.version).to eq '1.0' end it "should handle comments after the minor version" do t = Mail::MimeVersionField.new('1.0 (This is a comment)') expect(t.version).to eq '1.0' end it "should accept nil as a value" do t = Mail::MimeVersionField.new(nil) expect(t.version).not_to be_nil end it "should provide an encoded value" do t = Mail::MimeVersionField.new('1.0 (This is a comment)') expect(t.encoded).to eq "Mime-Version: 1.0\r\n" end it "should provide an decoded value" do t = Mail::MimeVersionField.new('1.0 (This is a comment)') expect(t.decoded).to eq '1.0' end end end mail-2.6.4/spec/mail/fields/received_field_spec.rb000066400000000000000000000071371267453234600221030ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::ReceivedField do it "should initialize" do expect { Mail::ReceivedField.new("Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)") }.not_to raise_error end it "should be able to tell the time" do expect(Mail::ReceivedField.new("Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)").date_time.class).to eq DateTime end it "should accept a string with the field name" do t = Mail::ReceivedField.new('Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)') expect(t.name).to eq 'Received' expect(t.value).to eq 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)' expect(t.info).to eq 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ' expect(t.date_time).to eq ::DateTime.parse('10 May 2005 17:26:50 +0000 (GMT)') end it "should accept a string without the field name" do t = Mail::ReceivedField.new('from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)') expect(t.name).to eq 'Received' expect(t.value).to eq 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)' expect(t.info).to eq 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ' expect(t.date_time).to eq ::DateTime.parse('10 May 2005 17:26:50 +0000 (GMT)') end it "should provide an encoded value" do t = Mail::ReceivedField.new('from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)') expect(t.encoded).to eq "Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000\r\n" end it "should provide an encoded value with correct timezone" do t = Mail::ReceivedField.new('from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 -0500 (EST)') expect(t.encoded).to eq "Received: from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 -0500\r\n" end it "should provide an decoded value" do t = Mail::ReceivedField.new('from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000 (GMT)') expect(t.decoded).to eq 'from localhost (localhost [127.0.0.1]) by xxx.xxxxx.com (Postfix) with ESMTP id 50FD3A96F for ; Tue, 10 May 2005 17:26:50 +0000' end it "should handle empty name-value lists with a comment only (qmail style)" do t = Mail::ReceivedField.new('(qmail 24365 invoked by uid 99); 25 Jan 2011 12:31:11 -0000') expect(t.info).to eq '(qmail 24365 invoked by uid 99)' end it "should handle a blank value" do t = Mail::ReceivedField.new('') expect(t.decoded).to eq '' expect(t.encoded).to eq "Received: \r\n" end end mail-2.6.4/spec/mail/fields/references_field_spec.rb000066400000000000000000000067071267453234600224400ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # The "References:" field will contain the contents of the parent's # "References:" field (if any) followed by the contents of the parent's # "Message-ID:" field (if any). If the parent message does not contain # a "References:" field but does have an "In-Reply-To:" field # containing a single message identifier, then the "References:" field # will contain the contents of the parent's "In-Reply-To:" field # followed by the contents of the parent's "Message-ID:" field (if # any). If the parent has none of the "References:", "In-Reply-To:", # or "Message-ID:" fields, then the new message will have no # "References:" field. describe Mail::ReferencesField do it "should initialize" do expect { Mail::ReferencesField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::ReferencesField.new('References: <1234@test.lindsaar.net>') expect(t.name).to eq 'References' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should accept a string without the field name" do t = Mail::ReferencesField.new('<1234@test.lindsaar.net>') expect(t.name).to eq 'References' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should accept multiple message ids" do t = Mail::ReferencesField.new('<1234@test.lindsaar.net> <5678@test.lindsaar.net>') expect(t.name).to eq 'References' expect(t.value).to eq '<1234@test.lindsaar.net> <5678@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' expect(t.message_ids).to eq ['1234@test.lindsaar.net', '5678@test.lindsaar.net'] expect(t.to_s).to eq '<1234@test.lindsaar.net> <5678@test.lindsaar.net>' end it "should accept an array of message ids" do t = Mail::ReferencesField.new(['<1234@test.lindsaar.net>', '<5678@test.lindsaar.net>']) expect(t.encoded).to eq "References: <1234@test.lindsaar.net>\r\n <5678@test.lindsaar.net>\r\n" end it "should accept no message ids" do t = Mail::ReferencesField.new('') expect(t.name).to eq 'References' expect(t.decoded).to eq nil end it "should output lines shorter than 998 chars" do k = Mail::ReferencesField.new(' ') lines = k.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 998 } end end mail-2.6.4/spec/mail/fields/reply_to_field_spec.rb000066400000000000000000000047051267453234600221500ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # reply-to = "Reply-To:" address-list CRLF # describe Mail::ReplyToField do describe "initialization" do it "should initialize" do expect { Mail::ReplyToField.new("Reply-To: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ReplyToField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ReplyToField.new('Reply-To: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Reply-To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ReplyToField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Reply-To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oReplyTours in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ReplyToField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ReplyToField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ReplyToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ReplyToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ReplyToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Reply-To: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end end end mail-2.6.4/spec/mail/fields/resent_bcc_field_spec.rb000066400000000000000000000047571267453234600224310ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # resent-bcc = "Resent-Bcc:" (address-list / [CFWS]) CRLF describe Mail::ResentBccField do describe "initialization" do it "should initialize" do expect { Mail::ResentBccField.new("Resent-Bcc: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ResentBccField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ResentBccField.new('Resent-Bcc: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Bcc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ResentBccField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Bcc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oResentBccurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ResentBccField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ResentBccField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ResentBccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ResentBccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ResentBccField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Resent-Bcc: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end end end mail-2.6.4/spec/mail/fields/resent_cc_field_spec.rb000066400000000000000000000047231267453234600222600ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # resent-cc = "Resent-Cc:" address-list CRLF describe Mail::ResentCcField do describe "initialization" do it "should initialize" do expect { Mail::ResentCcField.new("Resent-Cc: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ResentCcField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ResentCcField.new('Resent-Cc: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Cc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ResentCcField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Cc' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oResentCcurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ResentCcField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ResentCcField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ResentCcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ResentCcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ResentCcField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Resent-Cc: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end end end mail-2.6.4/spec/mail/fields/resent_date_field_spec.rb000066400000000000000000000026141267453234600226050ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::ResentDateField do it "should initialize" do expect { Mail::ResentDateField.new("12 Aug 2009 00:00:02 GMT") }.not_to raise_error end it "should be able to tell the time" do expect(Mail::ResentDateField.new("12 Aug 2009 00:00:02 GMT").date_time.class).to eq DateTime end it "should mix in the CommonAddress module" do expect(Mail::ResentDateField.included_modules).to include(Mail::CommonDate) end it "should accept a string with the field name" do t = Mail::ResentDateField.new('Resent-Date: 12 Aug 2009 00:00:02 GMT') expect(t.name).to eq 'Resent-Date' expect(t.value).to eq 'Wed, 12 Aug 2009 00:00:02 +0000' expect(t.date_time).to eq ::DateTime.parse('12 Aug 2009 00:00:02 GMT') end it "should accept a string without the field name" do t = Mail::ResentDateField.new('12 Aug 2009 00:00:02 GMT') expect(t.name).to eq 'Resent-Date' expect(t.value).to eq 'Wed, 12 Aug 2009 00:00:02 +0000' expect(t.date_time).to eq ::DateTime.parse('12 Aug 2009 00:00:02 GMT') end it "should give today's date if no date is specified" do now = DateTime.now expect(DateTime).to receive(:now).at_least(:once).and_return(now) t = Mail::ResentDateField.new expect(t.name).to eq 'Resent-Date' expect(t.date_time).to eq ::DateTime.parse(now.to_s) end end mail-2.6.4/spec/mail/fields/resent_from_field_spec.rb000066400000000000000000000047651267453234600226440ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # resent-from = "Resent-From:" mailbox-list CRLF describe Mail::ResentFromField do describe "initialization" do it "should initialize" do expect { Mail::ResentFromField.new("Resent-From: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ResentFromField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ResentFromField.new('Resent-From: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-From' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ResentFromField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-From' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oResentFromurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ResentFromField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ResentFromField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ResentFromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ResentFromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ResentFromField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Resent-From: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end end end mail-2.6.4/spec/mail/fields/resent_message_id_field_spec.rb000066400000000000000000000037621267453234600237750ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::ResentMessageIdField do it "should initialize" do expect { Mail::ResentMessageIdField.new("<1234@test.lindsaar.net>") }.not_to raise_error end it "should accept a string with the field name" do t = Mail::ResentMessageIdField.new('Resent-Message-ID: <1234@test.lindsaar.net>') expect(t.name).to eq 'Resent-Message-ID' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should accept a string without the field name" do t = Mail::ResentMessageIdField.new('<1234@test.lindsaar.net>') expect(t.name).to eq 'Resent-Message-ID' expect(t.value).to eq '<1234@test.lindsaar.net>' expect(t.message_id).to eq '1234@test.lindsaar.net' end it "should output lines shorter than 998 chars" do k = Mail::ResentMessageIdField.new(' ') lines = k.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 998 } end end mail-2.6.4/spec/mail/fields/resent_sender_field_spec.rb000066400000000000000000000041301267453234600231430ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # resent-sender = "Resent-Sender:" mailbox CRLF describe Mail::ResentSenderField do describe "initialization" do it "should initialize" do expect { Mail::ResentSenderField.new("Resent-Sender: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ResentSenderField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ResentSenderField.new('Resent-Sender: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Sender' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ResentSenderField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-Sender' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oResentSenderurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ResentSenderField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ResentSenderField.new('Mikel Lindsaar ') expect(t.address.to_s).to eq 'Mikel Lindsaar ' end it "should return the formatted line on to_s" do t = Mail::ResentSenderField.new('Mikel Lindsaar ') expect(t.value).to eq 'Mikel Lindsaar ' end it "should return the encoded line" do t = Mail::ResentSenderField.new('Mikel Lindsaar ') expect(t.encoded).to eq "Resent-Sender: Mikel Lindsaar \r\n" end end end mail-2.6.4/spec/mail/fields/resent_to_field_spec.rb000066400000000000000000000047231267453234600223150ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' # # resent-to = "Resent-To:" address-list CRLF describe Mail::ResentToField do describe "initialization" do it "should initialize" do expect { Mail::ResentToField.new("Resent-To: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ResentToField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ResentToField.new('Resent-To: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ResentToField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'Resent-To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oResentTours in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ResentToField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ResentToField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ResentToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ResentToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ResentToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "Resent-To: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end end end mail-2.6.4/spec/mail/fields/return_path_field_spec.rb000066400000000000000000000032301267453234600226360ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::ReturnPathField do it "should allow you to specify a field" do rp = Mail::ReturnPathField.new('Return-Path: mikel@test.lindsaar.net') expect(rp.address).to eq 'mikel@test.lindsaar.net' end it "should encode the addr_spec in <>" do rp = Mail::ReturnPathField.new('Return-Path: mikel@test.lindsaar.net') expect(rp.encoded).to eq "Return-Path: \r\n" end it "should accept <>" do rp = Mail::ReturnPathField.new('<>') expect(rp.encoded).to eq "Return-Path: <>\r\n" end it "should set the return path" do mail = Mail.new do to "to@someemail.com" from "from@someemail.com" subject "Can't set the return-path" return_path "bounce@someemail.com" message_id "<1234@someemail.com>" body "body" end expect(mail.return_path).to eq "bounce@someemail.com" end it "should set the return path" do mail = Mail.new do to "to@someemail.com" from "from@someemail.com" subject "Can't set the return-path" return_path "bounce@someemail.com" message_id "<1234@someemail.com>" body "body" end encoded_mail = Mail.new(mail.encoded) expect(encoded_mail.return_path).to eq "bounce@someemail.com" end it "should wrap the return path addr_spec in <>" do mail = Mail.new do to "to@someemail.com" from "from@someemail.com" subject "Can't set the return-path" return_path "bounce@someemail.com" message_id "<1234@someemail.com>" body "body" end expect(mail.encoded).to match(//) end end mail-2.6.4/spec/mail/fields/sender_field_spec.rb000066400000000000000000000042631267453234600215720ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::SenderField do # sender = "Sender:" mailbox CRLF # describe "initialization" do it "should initialize" do expect { Mail::SenderField.new("Sender: Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::SenderField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::SenderField.new('Sender: Mikel Lindsaar ') expect(t.name).to eq 'Sender' expect(t.value).to eq 'Mikel Lindsaar ' end it "should accept a string without the field name" do t = Mail::SenderField.new('Mikel Lindsaar ') expect(t.name).to eq 'Sender' expect(t.value).to eq 'Mikel Lindsaar ' end it "should reject headers with multiple mailboxes" do pending 'Sender accepts an address list now, but should only accept a single address' expect { Mail::SenderField.new('Sender: Mikel Lindsaar , "Bob Smith" ') }.to raise_error(Mail::Field::ParseError) end end # Actual testing of CommonAddress methods oSenderurs in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::SenderField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::SenderField.new('Mikel Lindsaar ') expect(t.address.to_s).to eq 'Mikel Lindsaar ' end it "should return the formatted line on to_s" do t = Mail::SenderField.new('Mikel Lindsaar ') expect(t.value).to eq 'Mikel Lindsaar ' end it "should return the encoded line" do t = Mail::SenderField.new('Mikel Lindsaar ') expect(t.encoded).to eq "Sender: Mikel Lindsaar \r\n" end end end mail-2.6.4/spec/mail/fields/structured_field_spec.rb000066400000000000000000000040161267453234600225120ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::StructuredField do describe "initialization" do it "should be instantiated" do expect {Mail::StructuredField.new("From", "bob@me.com")}.not_to raise_error end end describe "manipulation" do before(:each) do @field = Mail::StructuredField.new("From", "bob@me.com") end it "should allow us to set a text value at initialization" do expect{Mail::StructuredField.new("From", "bob@me.com")}.not_to raise_error end it "should provide access to the text of the field once set" do expect(@field.value).to eq "bob@me.com" end it "should provide a means to change the value" do @field.value = "bob@you.com" expect(@field.value).to eq "bob@you.com" end end describe "displaying encoded field and decoded value" do before(:each) do @field = Mail::FromField.new("bob@me.com") end it "should provide a to_s function that returns the decoded string" do expect(@field.to_s).to eq "bob@me.com" end it "should return '' on to_s if there is no value" do @field.value = nil expect(@field.encoded).to eq '' end it "should give an encoded value ready to insert into an email" do expect(@field.encoded).to eq "From: bob@me.com\r\n" end it "should return an empty string on encoded if it has no value" do @field.value = nil expect(@field.encoded).to eq '' end it "should return the field name and value in proper format when called to_s" do expect(@field.encoded).to eq "From: bob@me.com\r\n" end end describe "structured field template methods" do it "should raise an error if attempting to call :encoded or :decoded on the parent StructuredField class" do field = Mail::StructuredField.new expect { field.encoded }.to raise_error(NoMethodError) expect { field.decoded }.to raise_error(NoMethodError) end end end mail-2.6.4/spec/mail/fields/to_field_spec.rb000066400000000000000000000071751267453234600207410ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::ToField do # # The "To:" field contains the address(es) of the primary recipient(s) # of the message. describe "initialization" do it "should initialize" do expect { Mail::ToField.new("Mikel") }.not_to raise_error end it "should mix in the CommonAddress module" do expect(Mail::ToField.included_modules).to include(Mail::CommonAddress) end it "should accept a string with the field name" do t = Mail::ToField.new('To: Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end it "should accept a string without the field name" do t = Mail::ToField.new('Mikel Lindsaar , "Bob Smith" ') expect(t.name).to eq 'To' expect(t.value).to eq 'Mikel Lindsaar , "Bob Smith" ' end end # Actual testing of CommonAddress methods oTours in the address field spec file describe "instance methods" do it "should return an address" do t = Mail::ToField.new('Mikel Lindsaar ') expect(t.formatted).to eq ['Mikel Lindsaar '] end it "should return two addresses" do t = Mail::ToField.new('Mikel Lindsaar , Ada Lindsaar ') expect(t.formatted.first).to eq 'Mikel Lindsaar ' expect(t.addresses.last).to eq 'ada@test.lindsaar.net' end it "should return one address and a group" do t = Mail::ToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses[0]).to eq 'sam@me.com' expect(t.addresses[1]).to eq 'mikel@me.com' expect(t.addresses[2]).to eq 'bob@you.com' end it "should return the formatted line on to_s" do t = Mail::ToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.value).to eq 'sam@me.com, my_group: mikel@me.com, bob@you.com;' end it "should return the encoded line" do t = Mail::ToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.encoded).to eq "To: sam@me.com, \r\n\smy_group: mikel@me.com, \r\n\sbob@you.com;\r\n" end it "should return the decoded line" do t = Mail::ToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.decoded).to eq "sam@me.com, my_group: mikel@me.com, bob@you.com;" end it "should get multiple address out from a group list" do t = Mail::ToField.new('sam@me.com, my_group: mikel@me.com, bob@you.com;') expect(t.addresses).to eq ["sam@me.com", "mikel@me.com", "bob@you.com"] end it "should handle commas in the address" do t = Mail::ToField.new('"Long, stupid email address" ') expect(t.addresses).to eq ["mikel@test.lindsaar.net"] end it "should handle commas in the address for multiple fields" do t = Mail::ToField.new('"Long, stupid email address" , "Another, really, really, long, stupid email address" ') expect(t.addresses).to eq ["mikel@test.lindsaar.net", "bob@test.lindsaar.net"] end end it "should not crash if it can't understand a name" do t = Mail.new('To: <"Undisclosed-Recipient:"@msr19.hinet.net;>') expect { t.encoded }.not_to raise_error expect(t.encoded).to match(/To\:\s<"Undisclosed\-Recipient\:"@msr19\.hinet\.net;>\r\n/) end end mail-2.6.4/spec/mail/fields/unstructured_field_spec.rb000066400000000000000000000302561267453234600230620ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::UnstructuredField do describe "initialization" do it "should be instantiated" do expect {Mail::UnstructuredField.new("Name", "Value")}.not_to raise_error end end describe "manipulation" do before(:each) do @field = Mail::UnstructuredField.new("Subject", "Hello Frank") end it "should allow us to set a text value at initialization" do expect {Mail::UnstructuredField.new("Subject", "Value")}.not_to raise_error end it "should provide access to the text of the field once set" do expect(@field.value).to eq "Hello Frank" end it "should provide a means to change the value" do @field.value = "Goodbye Frank" expect(@field.value).to eq "Goodbye Frank" end end describe "displaying encoded field and decoded value" do before(:each) do @field = Mail::UnstructuredField.new("Subject", "Hello Frank") end it "should provide a to_s function that returns the field name and value" do expect(@field.value).to eq "Hello Frank" end it "should return '' on to_s if there is no value" do @field.value = nil expect(@field.to_s).to eq '' end it "should give an encoded value ready to insert into an email" do expect(@field.encoded).to eq "Subject: Hello Frank\r\n" end it "should return nil on encoded if it has no value" do @field.value = nil expect(@field.encoded).to eq '' end it "should handle array" do @field = Mail::UnstructuredField.new("To", ['mikel@example.com', 'bob@example.com']) expect(@field.encoded).to eq "To: mikel@example.com, bob@example.com\r\n" end it "should handle string" do @field.value = 'test' expect(@field.encoded).to eq "Subject: test\r\n" end it "should give an decoded value ready to insert into an email" do expect(@field.decoded).to eq "Hello Frank" end it "should return a nil on decoded if it has no value" do @field.value = nil expect(@field.decoded).to eq nil end it "should just add the CRLF at the end of the line" do @field = Mail::SubjectField.new("Subject: =?utf-8?Q?testing_testing_=D6=A4?=") result = "Subject: =?UTF-8?Q?testing_testing_=D6=A4?=\r\n" expect(@field.encoded).to eq result expect(@field.decoded).to eq "testing testing \326\244" end it "should do encoded-words encoding correctly without extra equal sign" do @field = Mail::SubjectField.new("testing testing æøå") result = "Subject: =?UTF-8?Q?testing_testing_=C3=A6=C3=B8=C3=A5?=\r\n" expect(@field.encoded).to eq result expect(@field.decoded).to eq "testing testing æøå" end it "should encode the space between two adjacent encoded-words" do @field = Mail::SubjectField.new("Her er æ ø å") result = "Subject: =?UTF-8?Q?Her_er_=C3=A6_=C3=B8_=C3=A5?=\r\n" expect(@field.encoded).to eq result expect(@field.decoded).to eq "Her er æ ø å" end it "should encode additional special characters inside encoded-word-encoded strings" do string = %Q(Her er æ()<>@,;:\\"/[]?.=) @field = Mail::SubjectField.new(string) result = %Q(Subject: =?UTF-8?Q?Her_er_=C3=A6=28=29<>@,;:\\=22/[]=3F.=3D?=\r\n) expect(@field.encoded).to eq result expect(@field.decoded).to eq string end if !'1.9'.respond_to?(:force_encoding) it "shouldn't get fooled into encoding on 1.8 due to an unrelated Encoding constant" do begin Mail::UnstructuredField::Encoding = 'derp' expect(@field.encoded).to eq "Subject: Hello Frank\r\n" ensure Mail::UnstructuredField.send :remove_const, :Encoding end end end end describe "folding" do it "should not fold itself if it is 78 chracters long" do @field = Mail::UnstructuredField.new("Subject", "This is a subject header message that is _exactly_ 78 characters....") expect(@field.encoded).to eq "Subject: This is a subject header message that is _exactly_ 78 characters....\r\n" end it "should fold itself if it is 79 chracters long" do @field = Mail::UnstructuredField.new("Subject", "This is a subject header message that is absolutely 79 characters long") result = "Subject: This is a subject header message that is absolutely 79 characters\r\n\slong\r\n" expect(@field.encoded).to eq result end it "should fold itself if it is 997 chracters long" do @field = Mail::UnstructuredField.new("Subject", "This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. This is a subject header message that is going to be 997 characters long. And this makes it 997....") lines = @field.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 78 } end it "should fold itself if it is 998 characters long" do value = "This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. This is a subject header message that is going to be 998 characters long. And this makes it 998 long" @field = Mail::UnstructuredField.new("Subject", value) lines = @field.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 78 } end it "should fold itself if it is 999 characters long" do value = "This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. This is a subject header message that is going to be 999 characters long. And this makes it 999 long." @field = Mail::UnstructuredField.new("Subject", value) lines = @field.encoded.split("\r\n\s") lines.each { |line| expect(line.length).to be < 78 } end it "should fold itself if it is non us-ascii" do @original = $KCODE if RUBY_VERSION < '1.9' string = "This is あ really long string This is あ really long string This is あ really long string This is あ really long string This is あ really long string" @field = Mail::UnstructuredField.new("Subject", string) if string.respond_to?(:force_encoding) string = string.dup.force_encoding('UTF-8') else $KCODE = 'u' end result = "Subject: =?UTF-8?Q?This_is_=E3=81=82_really_long_string_This_is_=E3=81=82?=\r\n\s=?UTF-8?Q?_really_long_string_This_is_=E3=81=82_really_long_string_This_is?=\r\n\s=?UTF-8?Q?_=E3=81=82_really_long_string_This_is_=E3=81=82_really_long?=\r\n\s=?UTF-8?Q?_string?=\r\n" expect(@field.encoded).to eq result expect(@field.decoded).to eq string $KCODE = @original if RUBY_VERSION < '1.9' end it "should fold properly with my actual complicated header" do @original = $KCODE if RUBY_VERSION < '1.9' string = %|{"unique_args": {"mailing_id":147,"account_id":2}, "to": ["larspind@gmail.com"], "category": "mailing", "filters": {"domainkeys": {"settings": {"domain":1,"enable":1}}}, "sub": {"{{open_image_url}}": ["http://betaling.larspind.local/O/token/147/Mailing::FakeRecipient"], "{{name}}": ["[FIRST NAME]"], "{{signup_reminder}}": ["(her kommer til at stå hvornår folk har skrevet sig op ...)"], "{{unsubscribe_url}}": ["http://betaling.larspind.local/U/token/147/Mailing::FakeRecipient"], "{{email}}": ["larspind@gmail.com"], "{{link:308}}": ["http://betaling.larspind.local/L/308/0/Mailing::FakeRecipient"], "{{confirm_url}}": [""], "{{ref}}": ["[REF]"]}}| @field = Mail::UnstructuredField.new("X-SMTPAPI", string) if string.respond_to?(:force_encoding) string = string.dup.force_encoding('UTF-8') else $KCODE = 'u' end result = "X-SMTPAPI: =?UTF-8?Q?{=22unique=5Fargs=22:_{=22mailing=5Fid=22:147,=22a?=\r\n =?UTF-8?Q?ccount=5Fid=22:2},_=22to=22:_[=22larspind@gmail.com=22],_=22categ?=\r\n =?UTF-8?Q?ory=22:_=22mailing=22,_=22filters=22:_{=22domainkeys=22:_{=22sett?=\r\n =?UTF-8?Q?ings=22:_{=22domain=22:1,=22enable=22:1}}},_=22sub=22:_{=22{{op?=\r\n =?UTF-8?Q?en=5Fimage=5Furl}}=22:_[=22http://betaling.larspind.local/O?=\r\n =?UTF-8?Q?/token/147/Mailing::FakeRecipient=22],_=22{{name}}=22:_[=22[FIRST?=\r\n =?UTF-8?Q?_NAME]=22],_=22{{signup=5Freminder}}=22:_[=22=28her_kommer_til_at?=\r\n =?UTF-8?Q?_st=C3=A5_hvorn=C3=A5r_folk_har_skrevet_sig_op_...=29=22],?=\r\n =?UTF-8?Q?_=22{{unsubscribe=5Furl}}=22:_[=22http://betaling.larspind.?=\r\n =?UTF-8?Q?local/U/token/147/Mailing::FakeRecipient=22],_=22{{email}}=22:?=\r\n =?UTF-8?Q?_[=22larspind@gmail.com=22],_=22{{link:308}}=22:_[=22http://beta?=\r\n =?UTF-8?Q?ling.larspind.local/L/308/0/Mailing::FakeRecipient=22],_=22{{con?=\r\n =?UTF-8?Q?firm=5Furl}}=22:_[=22=22],_=22{{ref}}=22:_[=22[REF]=22]}}?=\r\n" expect(@field.encoded).to eq result expect(@field.decoded).to eq string $KCODE = @original if RUBY_VERSION < '1.9' end it "should fold properly with continuous spaces around the linebreak" do @field = Mail::UnstructuredField.new("Subject", "This is a header that has continuous spaces around line break point, which should be folded properly") result = "Subject: This is a header that has continuous spaces around line break point,\s\r\n\s\s\s\swhich should be folded properly\r\n" expect(@field.encoded).to eq result end end describe "encoding non QP safe chars" do it "should encode an ascii string that has carriage returns if asked to" do result = "Subject: =0Aasdf=0A\r\n" @field = Mail::UnstructuredField.new("Subject", "\nasdf\n") expect(@field.encoded).to eq result end end describe "iso-2022-jp Subject" do it "should encoded with ISO-2022-JP encoding" do @field = Mail::UnstructuredField.new("Subject", "あいうえお") @field.charset = 'iso-2022-jp' expect = (RUBY_VERSION < '1.9') ? "Subject: =?ISO-2022-JP?Q?=E3=81=82=E3=81=84=E3=81=86=E3=81=88=E3=81=8A?=\r\n" : "Subject: =?ISO-2022-JP?Q?=1B$B$=22$$$&$=28$*=1B=28B?=\r\n" expect(@field.encoded).to eq expect end end end mail-2.6.4/spec/mail/header_spec.rb000066400000000000000000000633111267453234600171300ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Header do describe "initialization" do it "should instantiate empty" do expect { Mail::Header.new }.not_to raise_error end it "should instantiate with a string passed in" do expect { Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") }.not_to raise_error end end describe "copying" do it "should instantiate with a string passed in" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") copy = header.dup expect(copy.to_a).to eq(header.to_a) expect(copy[:to]).to eq(header[:to]) end end describe "instance methods" do it "should save away the raw source of the header that it is passed" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header.raw_source).to eq "To: Mikel\r\nFrom: bob\r\n" end it "should say if it has a message_id field defined" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header).not_to be_has_message_id end it "should say if it has a message_id field defined" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\nMessage-ID: 1234") expect(header).to be_has_message_id end it "should say if it has a content_id field defined" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header).not_to be_has_content_id end it "should say if it has a content_id field defined" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\nContent-ID: <1234@me.com>") expect(header).to be_has_content_id end it "should know its own charset" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\nContent-ID: <1234@me.com>") expect(header.charset).to eq nil end it "should know its own charset if set" do header = Mail::Header.new header['content-type'] = 'text/plain; charset=utf-8' expect(header.charset).to eq 'utf-8' end it "should not unset previously set charset if content-type is set without charset" do header = Mail::Header.new(nil, 'utf-8') header['content-type'] = 'text/plain' expect(header.charset).to eq 'utf-8' end it "shouldn't die when queried for a charset and the content-type header is invalid" do header = Mail::Header.new header['Content-Type'] = 'invalid/invalid; charset="iso-8859-1"' expect { header.charset }.not_to raise_error end it "should be Enumerable" do header = Mail::Header.new("To: James Random\r\nFrom: Santa Claus\r\n") expect(header.find {|f| f.responsible_for?('From') }).to be_a(Mail::Field) end end describe "creating fields" do it "should recognise a bcc field" do header = Mail::Header.new header['bcc'] = 'mikel@test.lindsaar.net' expect(header['bcc'].field.class).to eq Mail::BccField end it "should recognise a cc field" do header = Mail::Header.new header['cc'] = 'mikel@test.lindsaar.net' expect(header['cc'].field.class).to eq Mail::CcField end it "should recognise a content-description field" do header = Mail::Header.new header['content-description'] = 'Text' expect(header['content-description'].field.class).to eq Mail::ContentDescriptionField end it "should recognise a content-disposition field" do header = Mail::Header.new header['content-disposition'] = 'attachment; filename=File' expect(header['content-disposition'].field.class).to eq Mail::ContentDispositionField end it "should recognise an inline content-disposition field" do header = Mail::Header.new header['content-disposition'] = 'inline' expect(header['content-disposition'].field.class).to eq Mail::ContentDispositionField end it "should recognise a content-id field" do header = Mail::Header.new header['content-id'] = '<1234@test.lindsaar.net>' expect(header['content-id'].field.class).to eq Mail::ContentIdField end it "should recognise a content-transfer-encoding field" do header = Mail::Header.new header['content-transfer-encoding'] = '7bit' expect(header['content-transfer-encoding'].field.class).to eq Mail::ContentTransferEncodingField end it "should recognise a content-type field" do header = Mail::Header.new header['content-type'] = 'text/plain' expect(header['content-type'].field.class).to eq Mail::ContentTypeField end it "should recognise a date field" do header = Mail::Header.new header['date'] = 'Fri, 21 Nov 1997 09:55:06 -0600' expect(header['date'].field.class).to eq Mail::DateField end it "should recognise a from field" do header = Mail::Header.new header['from'] = 'mikel@test.lindsaar.net' expect(header['from'].field.class).to eq Mail::FromField end it "should recognise a in-reply-to field" do header = Mail::Header.new header['in-reply-to'] = '<1234@test.lindsaar.net>' expect(header['in-reply-to'].field.class).to eq Mail::InReplyToField end it "should recognise a keywords field" do header = Mail::Header.new header['keywords'] = 'mikel test lindsaar net' expect(header['keywords'].field.class).to eq Mail::KeywordsField end it "should recognise a message-id field" do header = Mail::Header.new header['message-id'] = '<1234@test.lindsaar.net>' expect(header['message-id'].field.class).to eq Mail::MessageIdField end it "should recognise a mime-version field" do header = Mail::Header.new header['mime-version'] = '1.0' expect(header['mime-version'].field.class).to eq Mail::MimeVersionField end it "should recognise a received field" do header = Mail::Header.new header['received'] = 'from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id C1B953B4CB6 for ; Tue, 10 May 2005 15:27:05 -0500' expect(header['received'].field.class).to eq Mail::ReceivedField end it "should recognise a references field" do header = Mail::Header.new header['references'] = '<1234@test.lindsaar.net>' expect(header['references'].field.class).to eq Mail::ReferencesField end it "should recognise a reply-to field" do header = Mail::Header.new header['reply-to'] = 'mikel@test.lindsaar.net' expect(header['reply-to'].field.class).to eq Mail::ReplyToField end it "should recognise a resent-bcc field" do header = Mail::Header.new header['resent-bcc'] = 'mikel@test.lindsaar.net' expect(header['resent-bcc'].field.class).to eq Mail::ResentBccField end it "should recognise a resent-cc field" do header = Mail::Header.new header['resent-cc'] = 'mikel@test.lindsaar.net' expect(header['resent-cc'].field.class).to eq Mail::ResentCcField end it "should recognise a resent-date field" do header = Mail::Header.new header['resent-date'] = 'Fri, 21 Nov 1997 09:55:06 -0600' expect(header['resent-date'].field.class).to eq Mail::ResentDateField end it "should recognise a resent-from field" do header = Mail::Header.new header['resent-from'] = 'mikel@test.lindsaar.net' expect(header['resent-from'].field.class).to eq Mail::ResentFromField end it "should recognise a resent-message-id field" do header = Mail::Header.new header['resent-message-id'] = '<1234@mail.baci.local>' expect(header['resent-message-id'].field.class).to eq Mail::ResentMessageIdField end it "should recognise a resent-sender field" do header = Mail::Header.new header['resent-sender'] = 'mikel@test.lindsaar.net' expect(header['resent-sender'].field.class).to eq Mail::ResentSenderField end it "should recognise a resent-to field" do header = Mail::Header.new header['resent-to'] = 'mikel@test.lindsaar.net' expect(header['resent-to'].field.class).to eq Mail::ResentToField end it "should recognise a return-path field" do header = Mail::Header.new header['return-path'] = '' expect(header['return-path'].field.class).to eq Mail::ReturnPathField end it "should recognise a sender field" do header = Mail::Header.new header['sender'] = 'mikel@test.lindsaar.net' expect(header['sender'].field.class).to eq Mail::SenderField end it "should recognise a to field" do header = Mail::Header.new header['to'] = 'mikel@test.lindsaar.net' expect(header['to'].field.class).to eq Mail::ToField end it "should maintain header case" do header = Mail::Header.new header['User-Agent'] = 'My funky mailer' expect(header.encoded).to match(/^User-Agent: /) expect(header.encoded).not_to match(/^user-agent: /) end it "should not accept field names containing colons" do expect { Mail::Header.new['a:b'] = 'c' }.to raise_error(ArgumentError) end end describe "parsing" do it "should split the header into separate fields" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header.fields.length).to eq 2 end it "should not split a wrapped header in two" do header = Mail::Header.new("To: mikel lindsaar\r\n\s\r\nFrom: bob\r\nSubject: This is\r\n a long\r\n\s \t \t \t badly formatted \r\n \t\t \t field") expect(header.fields.length).to eq 3 end # Header fields are lines composed of a field name, followed by a colon # (":"), followed by a field body, and terminated by CRLF. A field # name MUST be composed of printable US-ASCII characters (i.e., # characters that have values between 33 and 126, inclusive), except # colon. it "should accept any valid header field name" do test_name = ascii.reject { |c| c == ':' }.join expect { Mail::Header.new("#{test_name}: This is a crazy name") }.not_to raise_error end it "should not try to accept colons in header field names" do header = Mail::Header.new("Colon:in:header: oops") expect(header.fields.size).to eq 1 expect(header.fields.first.name).to eq 'Colon' expect(header['Colon'].value).to eq 'in:header: oops' end # A field body may be composed of any US-ASCII characters, # except for CR and LF. However, a field body may contain CRLF when # used in header "folding" and "unfolding" as described in section # 2.2.3. it "should accept any valid header field value" do test_value = ascii.reject { |c| c == ':' } test_value << ' ' test_value << '\r\n' expect {Mail::Header.new("header: #{test_value}")}.not_to raise_error end it "should split each field into an name and value" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header.fields[0].name).to eq "From" expect(header.fields[0].value).to eq "bob" expect(header.fields[1].name).to eq "To" expect(header.fields[1].value).to eq "Mikel" end it "should split each field into an name and value - even if whitespace is missing" do header = Mail::Header.new("To: Mikel\r\nFrom:bob\r\n") expect(header.fields[0].name).to eq "From" expect(header.fields[0].value).to eq "bob" expect(header.fields[1].name).to eq "To" expect(header.fields[1].value).to eq "Mikel" end it "should preserve the order of the fields it is given" do header = Mail::Header.new header.fields = ['From: mikel@me.com', 'To: bob@you.com', 'Subject: This is a badly formed email'] expect(header.fields[0].name).to eq 'From' expect(header.fields[1].name).to eq 'To' expect(header.fields[2].name).to eq 'Subject' end it "should allow you to reference each field and value by literal string name" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header['To'].value).to eq "Mikel" expect(header['From'].value).to eq "bob" end it "should return an array of fields if there is more than one match" do header = Mail::Header.new header.fields = ['From: mikel@me.com', 'X-Mail-SPAM: 15', 'X-Mail-SPAM: 23'] expect(header['X-Mail-SPAM'].map { |x| x.value }).to eq ['15', '23'] end it "should return nil if no value in the header" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") expect(header['Subject']).to be_nil end it "should add a new field if the field does not exist" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") header['Subject'] = "G'Day!" expect(header['Subject'].value).to eq "G'Day!" end it "should allow you to pass in an array of raw fields" do header = Mail::Header.new header.fields = ['From: mikel@test.lindsaar.net', 'To: bob@you.com'] expect(header['To'].value).to eq 'bob@you.com' expect(header['From'].value).to eq 'mikel@test.lindsaar.net' end it "should reset the value of a single-only field if it already exists" do header = Mail::Header.new("To: Mikel\r\nFrom: bob\r\n") header['To'] = 'George' expect(header['To'].value).to eq "George" end it "should allow you to delete a field by setting it to nil" do header = Mail::Header.new header.fields = ['To: bob@you.com'] expect(header.fields.length).to eq 1 header['To'] = nil expect(header.fields.length).to eq 0 end it "should delete all matching fields found if there are multiple options" do header = Mail::Header.new header.fields = ['X-SPAM: 1000', 'X-SPAM: 20'] header['X-SPAM'] = nil expect(header.fields.length).to eq 0 end it "should delete only matching fields found" do header = Mail::Header.new header.fields = ['X-SPAM: 1000', 'X-AUTHOR: Steve'] header['X-SPAM'] = nil expect(header['X-AUTHOR']).not_to be_nil expect(header.fields.length).to eq 1 end # Handle empty X-Optional header from Microsoft Exchange it "should handle an empty X-* header value" do header = Mail::Header.new("X-MS-TNEF-Correlator:\r\n") expect(header.fields.length).to eq 1 expect(header['X-MS-TNEF-Correlator'].decoded).to eq nil expect(header['X-MS-TNEF-Correlator'].encoded).to eq "X-MS-TNEF-Correlator: \r\n" end it "should accept X- option fields from MS-Exchange" do header = Mail::Header.new("X-Ms-Has-Attach:\r\nX-MS-TNEF-Correlator: \r\n") expect(header.fields.length).to eq 2 expect(header['X-Ms-Has-Attach'].decoded).to eq nil expect(header['X-Ms-Has-Attach'].encoded).to eq "X-Ms-Has-Attach: \r\n" expect(header['X-MS-TNEF-Correlator'].decoded).to eq nil expect(header['X-MS-TNEF-Correlator'].encoded).to eq "X-MS-TNEF-Correlator: \r\n" end it "should return nil if asked for the value of a non existent field" do header = Mail::Header.new expect(header['Bobs-Field']).to eq nil end it "should allow you to replace a from field" do header = Mail::Header.new expect(header['From']).to eq nil header['From'] = 'mikel@test.lindsaar.net' expect(header['From'].decoded).to eq 'mikel@test.lindsaar.net' header['From'] = 'bob@test.lindsaar.net' expect(header['From'].decoded).to eq 'bob@test.lindsaar.net' end it "should maintain the class of the field" do header = Mail::Header.new header['From'] = 'mikel@test.lindsaar.net' expect(header['From'].field.class).to eq Mail::FromField header['From'] = 'bob@test.lindsaar.net' expect(header['From'].field.class).to eq Mail::FromField end end describe "folding and unfolding" do it "should unfold a header" do header = Mail::Header.new("To: Mikel,\r\n Lindsaar, Bob") expect(header['To'].value).to eq 'Mikel, Lindsaar, Bob' end it "should remove multiple spaces during unfolding a header" do header = Mail::Header.new("To: Mikel,\r\n Lindsaar, Bob") expect(header['To'].value).to eq 'Mikel, Lindsaar, Bob' end it "should handle a crazy long folded header" do header_text =<) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700 HERE header = Mail::Header.new(header_text.gsub(/\n/, "\r\n")) expect(header['Received'].value).to eq 'from [127.0.220.158] (helo=fg-out-1718.google.com) by smtp.totallyrandom.com with esmtp (Exim 4.68) (envelope-from ) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700' end it "should convert all lonesome LFs to CRLF" do header_text =<) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700 HERE header = Mail::Header.new(header_text.gsub(/\n/, "\n")) expect(header['Received'].value).to eq 'from [127.0.220.158] (helo=fg-out-1718.google.com) by smtp.totallyrandom.com with esmtp (Exim 4.68) (envelope-from ) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700' end it "should convert all lonesome CRs to CRLF" do header_text =<) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700 HERE header = Mail::Header.new(header_text.gsub(/\n/, "\r")) expect(header['Received'].value).to eq 'from [127.0.220.158] (helo=fg-out-1718.google.com) by smtp.totallyrandom.com with esmtp (Exim 4.68) (envelope-from ) id 1K4JeQ-0005Nd-Ij for support@aaa.somewhere.com; Thu, 05 Jun 2008 10:53:29 -0700' end end describe "error handling" do it "should collect up any of its fields' errors" do header = Mail::Header.new("Content-Transfer-Encoding: vl@d\r\nReply-To: a b b") expect(Mail::Utilities.blank?(header.errors)).not_to be_truthy expect(header.errors.size).to eq 2 expect(header.errors[0][0]).to eq 'Reply-To' expect(header.errors[0][1]).to eq 'a b b' expect(header.errors[1][0]).to eq 'Content-Transfer-Encoding' expect(header.errors[1][1]).to eq 'vl@d' end end describe "handling date fields with multiple values" do it "should know which fields can only appear once" do %w[ date ].each do |field| header = Mail::Header.new header[field] = "Thu, 05 Jun 2008 10:53:29 -0700" header[field] = "Mon, 15 Nov 2010 11:05:29 -1100" expect(header[field].value).to eq "Mon, 15 Nov 2010 11:05:29 -1100" end end it "should know which fields can only appear once" do %w[ from sender reply-to to cc bcc ].each do |field| header = Mail::Header.new header[field] = "mikel@test.lindsaar.net" header[field] = "ada@test.lindsaar.net" expect(header[field].value).to eq "ada@test.lindsaar.net" end end it "should enforce appear-once rule even with mass assigned header" do header = Mail::Header.new( "Content-Type: multipart/alternative\nContent-Type: text/plain\n" ) expect(header['content-type']).not_to be_kind_of(Array) end it "should add additional fields that can appear more than once" do %w[ comments keywords x-spam].each do |field| header = Mail::Header.new header[field] = "1234" header[field] = "5678" expect(header[field].map { |x| x.value }).to eq ["1234", "5678"] end end it "should delete all references to a field" do header = Mail::Header.new header.fields = ['X-Mail-SPAM: 15', 'X-Mail-SPAM: 20'] header['X-Mail-SPAM'] = '10000' expect(header['X-Mail-SPAM'].map { |x| x.value }).to eq ['15', '20', '10000'] header['X-Mail-SPAM'] = nil expect(header['X-Mail-SPAM']).to eq nil end end describe "handling trace fields" do before(:each) do trace_header =< Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ; Sun, 8 May 2005 12:30:23 -0500 Received: from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id j48HUC213279 for ; Sun, 8 May 2005 12:30:13 -0500 Received: from conversion-xxx.xxxx.xxx.net by xxx.xxxx.xxx id <0IG600901LQ64I@xxx.xxxx.xxx> for ; Sun, 8 May 2005 12:30:12 -0500 Received: from agw1 by xxx.xxxx.xxx with ESMTP id <0IG600JFYLYCAxxx@xxxx.xxx> for ; Sun, 8 May 2005 12:30:12 -0500 TRACEHEADER @traced_header = Mail::Header.new(trace_header) end it "should instantiate one trace field object per header" do expect(@traced_header.fields.length).to eq 5 end it "should add a new received header after the other received headers if they exist" do @traced_header['To'] = "Mikel" @traced_header['Received'] = "from agw2 by xxx.xxxx.xxx; Sun, 8 May 2005 12:30:13 -0500" expect(@traced_header.fields[0].addresses).to eq ['xxx@xxxx.xxxtest'] expect(@traced_header.fields[1].info).to eq 'from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id 6AAEE3B4D23 for ' expect(@traced_header.fields[2].info).to eq 'from xxx.xxxx.xxx by xxx.xxxx.xxx with ESMTP id j48HUC213279 for ' expect(@traced_header.fields[3].info).to eq 'from conversion-xxx.xxxx.xxx.net by xxx.xxxx.xxx id <0IG600901LQ64I@xxx.xxxx.xxx> for ' expect(@traced_header.fields[5].info).to eq "from agw2 by xxx.xxxx.xxx" expect(@traced_header.fields[6].field.class).to eq Mail::ToField end end describe "encoding" do it "should output a parsed version of itself to US-ASCII on encoded and tidy up and sort correctly" do encoded = Mail::Header.new("To: Mikel\r\n\sLindsaar \r\nFrom: bob\r\n\s\r\nSubject: This is\r\n a long\r\n\s \t \t \t badly formatted \r\n \t\t \t field").encoded result = "From: bob \r\nTo: Mikel Lindsaar \r\nSubject: This is a long badly formatted field\r\n" if result.respond_to?(:encode!) result = result.dup.encode!(::Encoding::US_ASCII) expect(encoded.encoding).to eq ::Encoding::US_ASCII if encoded.respond_to?(:encoding) end expect(encoded).to eq result end if '1.9'.respond_to?(:force_encoding) it "should blow up on encoding mismatches" do junk = "Subject: \xAF".dup.force_encoding(::Encoding::ASCII_8BIT) header = Mail::Header.new(junk, 'utf-8') expect { header.encoded }.to raise_error(Encoding::UndefinedConversionError) end end end describe "detecting required fields" do it "should not say it has a message id if it doesn't" do expect(Mail::Header.new).not_to be_has_message_id end it "should say it has a message id if it does" do expect(Mail::Header.new('Message-ID: 1234')).to be_has_message_id end it "should not say it has a date if it doesn't" do expect(Mail::Header.new).not_to be_has_date end it "should say it has a date id if it does" do expect(Mail::Header.new('Date: Mon, 24 Nov 1997 14:22:01 -0800')).to be_has_date end it "should not say it has a mime-version if it doesn't" do expect(Mail::Header.new).not_to be_has_mime_version end it "should say it has a date id if it does" do expect(Mail::Header.new('Mime-Version: 1.0')).to be_has_mime_version end end describe "mime version handling" do it "should return the mime version of the email" do header = Mail::Header.new("Mime-Version: 1.0") expect(header['mime-version'].value).to eq '1.0' end it "should return nil if no mime-version header field" do header = Mail::Header.new('To: bob') expect(header['mime_version']).to eq nil end it "should return the transfer-encoding of the email" do header = Mail::Header.new("Content-Transfer-Encoding: Base64") expect(header['content-transfer-encoding'].value).to eq 'Base64' end it "should return nil if no transfer-encoding header field" do header = Mail::Header.new expect(header['content-transfer-encoding']).to eq nil end it "should return the content-description of the email" do header = Mail::Header.new("Content-Description: This is a description") expect(header['Content-Description'].value).to eq 'This is a description' end it "should return nil if no content-description header field" do header = Mail::Header.new expect(header['Content-Description']).to eq nil end end describe "configuration option .maximum_amount" do it "should be 1000 by default" do expect(Mail::Header.maximum_amount).to eq(1000) end it "should limit amount of parsed headers" do old_maximum_amount = Mail::Header.maximum_amount begin Mail::Header.maximum_amount = 10 begin $VERBOSE, old_verbose = nil, $VERBOSE header = Mail::Header.new("X-SubscriberID: 345\n" * 11) expect(header.fields.size).to eq(10) ensure $VERBOSE = old_verbose end ensure Mail::Header.maximum_amount = old_maximum_amount end end end end mail-2.6.4/spec/mail/mail_spec.rb000066400000000000000000000020121267453234600166110ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "mail" do it "should be able to be instantiated" do expect { Mail }.not_to raise_error end it "should be able to make a new email" do expect(Mail.new.class).to eq Mail::Message end it "should accept headers and body" do # Full tests in Message Spec message = Mail.new do from 'mikel@me.com' to 'mikel@you.com' subject 'Hello there Mikel' body 'This is a body of text' end expect(message.from).to eq ['mikel@me.com'] expect(message.to).to eq ['mikel@you.com'] expect(message.subject).to eq 'Hello there Mikel' expect(message.body.to_s).to eq 'This is a body of text' end it "should read a file" do wrap_method = Mail.read(fixture('emails', 'plain_emails', 'raw_email.eml')).to_s file_method = Mail.new(File.open(fixture('emails', 'plain_emails', 'raw_email.eml'), 'rb', &:read)).to_s expect(wrap_method).to eq file_method end end mail-2.6.4/spec/mail/message_spec.rb000066400000000000000000002534231267453234600173310ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe Mail::Message do def basic_email "To: mikel\r\nFrom: bob\r\nSubject: Hello!\r\n\r\nemail message\r\n" end describe "initialization" do it "should instantiate empty" do expect(Mail::Message.new.class).to eq Mail::Message end it "should return a basic email" do mail = Mail.new mail = Mail.new(mail.to_s) expect(Mail::Utilities.blank?(mail.date)).not_to be_truthy expect(Mail::Utilities.blank?(mail.message_id)).not_to be_truthy expect(mail.mime_version).to eq "1.0" expect(mail.content_type).to eq "text/plain" expect(mail.content_transfer_encoding).to eq "7bit" expect(Mail::Utilities.blank?(mail.subject)).to be_truthy expect(Mail::Utilities.blank?(mail.body)).to be_truthy end it "should instantiate with a string" do expect(Mail::Message.new(basic_email).class).to eq Mail::Message end it "should allow us to pass it a block" do mail = Mail::Message.new do from 'mikel@me.com' to 'lindsaar@you.com' end expect(mail.from).to eq ['mikel@me.com'] expect(mail.to).to eq ['lindsaar@you.com'] end it "should initialize a body and header class even if called with nothing to begin with" do mail = Mail::Message.new expect(mail.header.class).to eq Mail::Header expect(mail.body.class).to eq Mail::Body end it "should not report basic emails as bounced" do expect(Mail::Message.new).not_to be_bounced end it "should be able to parse a basic email" do expect { Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml')) }.not_to raise_error end it "should be able to parse an email with @ in display name" do message = Mail.read(fixture('emails', 'plain_emails', 'raw_email_with_at_display_name.eml')) expect(message.to).to eq ["smith@gmail.com", "raasdnil@gmail.com", "tom@gmail.com"] end it "should be able to parse an email with only blank lines as body" do expect { Mail.read(fixture('emails', 'error_emails', 'missing_body.eml')) }.not_to raise_error end it "should be able to parse an email with a funky date header" do # TODO: This spec should actually do something expect { Mail.read(fixture('emails', 'error_emails', 'bad_date_header2.eml')) } end it 'should be able to invoke subject on a funky subject header' do Mail.read(fixture('emails', 'error_emails', 'bad_subject.eml')).subject end it 'should use default charset' do begin Mail::Message.default_charset, old = 'iso-8859-1', Mail::Message.default_charset expect(Mail::Message.new.charset).to eq 'iso-8859-1' ensure Mail::Message.default_charset = old end end it 'should be able to parse an email missing an encoding' do Mail.read(fixture('emails', 'error_emails', 'must_supply_encoding.eml')) end it "should be able to parse every email example we have without raising an exception" do emails = Dir.glob( fixture('emails/**/*') ).delete_if { |f| File.directory?(f) } allow(STDERR).to receive(:puts) # Don't want to get noisy about any warnings errors = false expected_failures = [] emails.each do |email| begin Mail.read(email) rescue => e unless expected_failures.include?(email) puts "Failed on email #{email}" puts "Failure was:\n#{e}\n\n" errors = true end end end expect(errors).to be_falsey end it "should be able to parse a large email without raising an exception" do m = Mail.new m.add_file(:filename => "attachment.data", :content => "a" * (8 * 1024 * 1024)) raw_email = "From jamis_buck@byu.edu Mon May 2 16:07:05 2005\r\n#{m.to_s}" expect { Mail::Message.new(raw_email) }.not_to raise_error end it "should not raise a warning on having non US-ASCII characters in the header (should just handle it)" do expect(STDERR).not_to receive(:puts) Mail.read(fixture('emails', 'plain_emails', 'raw_email_string_in_date_field.eml')) end it "should raise a warning (and keep parsing) on having an incorrectly formatted header" do expect(STDERR).to receive(:puts).with("WARNING: Could not parse (and so ignoring) 'quite Delivered-To: xxx@xxx.xxx'") Mail.read(fixture('emails', 'plain_emails', 'raw_email_incorrect_header.eml')).to_s end it "should read in an email message and basically parse it" do mail = Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml')) expect(mail.to).to eq ["raasdnil@gmail.com"] end it "should not fail parsing message with caps in content_type" do mail = Mail.read(fixture('emails', 'plain_emails', 'mix_caps_content_type.eml')) expect(mail.content_type).to eq 'text/plain; charset=iso-8859-1' expect(mail.main_type).to eq 'text' expect(mail.sub_type).to eq 'plain' end it "should be able to pass an empty reply-to header" do mail = Mail.read(fixture('emails', 'error_emails', 'empty_in_reply_to.eml')) expect(Mail::Utilities.blank?(mail.in_reply_to)).to be_truthy end describe "YAML serialization" do before(:each) do # Ensure specs don't randomly fail due to messages being generated 1 second apart time = DateTime.now allow(DateTime).to receive(:now).and_return(time) @yaml_mail = Mail::Message.new(:to => 'someone@somewhere.com', :cc => 'someoneelse@somewhere.com', :bcc => 'someonesecret@somewhere.com', :body => 'body', :subject => 'subject') @smtp_settings = { :address=>"smtp.somewhere.net", :port=>"587", :domain=>"somewhere.net", :user_name=>"someone@somewhere.net", :password=>"password", :authentication=>:plain, :enable_starttls_auto => true, :openssl_verify_mode => nil, :ssl=>nil, :tls=>nil } @yaml_mail.delivery_method :smtp, @smtp_settings end it "should serialize the basic information to YAML" do yaml = @yaml_mail.to_yaml yaml_output = YAML.load(yaml) expect(yaml_output['headers']['To']).to eq "someone@somewhere.com" expect(yaml_output['headers']['Cc']).to eq "someoneelse@somewhere.com" expect(yaml_output['headers']['Subject']).to eq "subject" expect(yaml_output['headers']['Bcc']).to eq "someonesecret@somewhere.com" expect(yaml_output['@body_raw']).to eq "body" expect(Mail::Utilities.blank?(yaml_output['@delivery_method'])).not_to be_truthy end it "should deserialize after serializing" do deserialized = Mail::Message.from_yaml(@yaml_mail.to_yaml) expect(deserialized).to eq @yaml_mail expect(deserialized.delivery_method.settings).to eq @smtp_settings end it "should serialize a Message with a custom delivery_handler" do @yaml_mail.delivery_handler = DeliveryAgent yaml = @yaml_mail.to_yaml yaml_output = YAML.load(yaml) expect(yaml_output['delivery_handler']).to eq "DeliveryAgent" end it "should load a serialized delivery handler" do @yaml_mail.delivery_handler = DeliveryAgent deserialized = Mail::Message.from_yaml(@yaml_mail.to_yaml) expect(deserialized.delivery_handler).to eq DeliveryAgent end it "should not deserialize a delivery_handler that does not exist" do yaml = @yaml_mail.to_yaml yaml_hash = YAML.load(yaml) yaml_hash['delivery_handler'] = "NotARealClass" deserialized = Mail::Message.from_yaml(yaml_hash.to_yaml) expect(deserialized.delivery_handler).to be_nil end it "should handle multipart mail" do @yaml_mail.add_part Mail::Part.new(:content_type => 'text/html', :body => 'body') deserialized = Mail::Message.from_yaml(@yaml_mail.to_yaml) expect(deserialized).to be_multipart deserialized.parts.each {|part| expect(part).to be_a(Mail::Part)} expect(deserialized.parts.map(&:body)).to eq(['body', 'body']) end end describe "splitting" do it "should split the body from the header" do message = Mail::Message.new("To: Example \r\n\r\nHello there\r\n") expect(message.decoded).to eq("Hello there\n") end it "should split when the body starts with a space" do message = Mail::Message.new("To: Example \r\n\r\n Hello there\r\n") expect(message.decoded).to eq(" Hello there\n") end it "should split if the body starts with an empty line" do message = Mail::Message.new("To: Example \r\n\r\n\r\nHello there\r\n") expect(message.decoded).to eq("\nHello there\n") end it "should split if the body starts with a blank line" do message = Mail::Message.new("To: Example \r\n\r\n\t\r\nHello there\r\n") expect(message.decoded).to eq("\t\nHello there\n") end it 'should split after headers that contain "\r\n "' do message = Mail::Message.new("To: Example\r\n \r\n\r\n Hello there\r\n") expect(message.decoded).to eq(" Hello there\n") end it 'should split only once if there are "\r\n\r\n"s in the body' do message = Mail::Message.new("To: Example \r\n\r\nHello\r\n\r\nthere\r\n") expect(message.decoded).to eq("Hello\n\nthere\n") end # N.B. this is not in any RFCs it "should split on a line with whitespace on it" do message = Mail::Message.new("To: Example \r\n \r\nHello there\r\n") expect(message.decoded).to eq("Hello there\n") end end end describe "envelope line handling" do it "should respond to 'envelope from'" do expect(Mail::Message.new).to respond_to(:envelope_from) end it "should strip off the envelope from field if present" do message = Mail.read(fixture('emails', 'plain_emails', 'raw_email.eml')) expect(message.envelope_from).to eq "jamis_buck@byu.edu" expect(message.envelope_date).to eq ::DateTime.parse("Mon May 2 16:07:05 2005") end it "should strip off the envelope from field if present" do message = Mail.read(fixture('emails', 'plain_emails', 'raw_email.eml')) expect(message.raw_envelope).to eq "jamis_buck@byu.edu Mon May 2 16:07:05 2005" expect(message.from).to eq ["jamis@37signals.com"] end it "should not cause any problems if there is no envelope from present" do message = Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml')) expect(message.from).to eq ["test@lindsaar.net"] end it "should ignore a plain text body that starts with ^From" do m = Mail::Message.new("From: mikel@test.lindsaar.net\r\n\r\nThis is a way to break mail by putting\r\nFrom at the start of a body\r\nor elsewhere.") expect(m.from).not_to be_nil expect(m.from).to eq ['mikel@test.lindsaar.net'] end it "should handle a multipart message that has ^From in it" do m = Mail.read(fixture('emails', 'error_emails', 'cant_parse_from.eml')) expect(m.from).not_to be_nil expect(m.from).to eq ["News@InsideApple.Apple.com"] expect(m).to be_multipart end end describe "accepting a plain text string email" do it "should accept some email text to parse and return an email" do mail = Mail::Message.new(basic_email) expect(mail.class).to eq Mail::Message end it "should set a raw source instance variable to equal the passed in message" do mail = Mail::Message.new(basic_email) expect(mail.raw_source).to eq basic_email end it "should set the raw source instance variable to '' if no message is passed in" do mail = Mail::Message.new expect(mail.raw_source).to eq "" end it "should give the header class the header to parse" do header = Mail::Header.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!") expect(Mail::Header).to receive(:new).with("To: mikel\r\nFrom: bob\r\nSubject: Hello!", 'UTF-8').and_return(header) Mail::Message.new(basic_email) end it "should give the header class the header to parse even if there is no body" do header = Mail::Header.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!") expect(Mail::Header).to receive(:new).with("To: mikel\r\nFrom: bob\r\nSubject: Hello!", 'UTF-8').and_return(header) Mail::Message.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!") end it "should give the body class the body to parse" do body = Mail::Body.new("email message") expect(Mail::Body).to receive(:new).with("email message\r\n").and_return(body) mail = Mail::Message.new(basic_email) mail.body #body calculates now lazy so need to ask for it end it "should still ask the body for a new instance even though these is nothing to parse, yet" do body = Mail::Body.new('') expect(Mail::Body).to receive(:new).and_return(body) Mail::Message.new("To: mikel\r\nFrom: bob\r\nSubject: Hello!") end it "should give the header the part before the line without spaces and the body the part without" do header = Mail::Header.new("To: mikel") body = Mail::Body.new("G'Day!") expect(Mail::Header).to receive(:new).with("To: mikel", 'UTF-8').and_return(header) expect(Mail::Body).to receive(:new).with("G'Day!").and_return(body) mail = Mail::Message.new("To: mikel\r\n\r\nG'Day!") mail.body #body calculates now lazy so need to ask for it end it "should give allow for whitespace on the gap line between header and body" do header = Mail::Header.new("To: mikel") body = Mail::Body.new("G'Day!") expect(Mail::Header).to receive(:new).with("To: mikel", 'UTF-8').and_return(header) expect(Mail::Body).to receive(:new).with("G'Day!").and_return(body) mail = Mail::Message.new("To: mikel\r\n \r\nG'Day!") mail.body #body calculates now lazy so need to ask for it end it "should allow for whitespace at the start of the email" do mail = Mail.new("\r\n\r\nFrom: mikel\r\n\r\nThis is the body") expect(mail.body.to_s).to eq 'This is the body' expect(mail.from).to eq ['mikel'] end it "should read in an email message with the word 'From' in it multiple times and parse it" do mail = Mail.read(fixture('emails', 'mime_emails', 'two_from_in_message.eml')) expect(mail.to).not_to be_nil expect(mail.to).to eq ["tester2@test.com"] end it "should parse non-UTF8 sources" do raw_message = File.read(fixture('emails', 'multi_charset', 'japanese_iso_2022.eml')) original_encoding = raw_message.encoding if raw_message.respond_to?(:encoding) mail = Mail.new(raw_message) expect(mail.to).to eq ["raasdnil@gmail.com"] expect(mail.decoded).to eq "すみません。\n\n" expect(raw_message.encoding).to eq original_encoding if raw_message.respond_to?(:encoding) end it "should parse sources with charsets that we know but Ruby doesn't" do raw_message = File.read(fixture('emails', 'multi_charset', 'ks_c_5601-1987.eml')) original_encoding = raw_message.encoding if raw_message.respond_to?(:encoding) mail = Mail.new(raw_message) expect(mail.decoded).to eq "스티해\n" expect(raw_message.encoding).to eq original_encoding if raw_message.respond_to?(:encoding) end if '1.9+'.respond_to?(:encoding) it "should be able to normalize CRLFs on non-UTF8 encodings" do File.open(fixture('emails', 'multi_charset', 'japanese_shift_jis.eml')) do |io| mail = Mail.new(io.read) expect(mail.raw_source.encoding).to eq Encoding::BINARY end end end if '1.9+'.respond_to?(:encoding) it "should be able to normalize CRLFs on non-UTF8 encodings" do File.open(fixture('emails', 'multi_charset', 'japanese_shift_jis.eml')) do |io| mail = Mail.new(io.read) expect(mail.raw_source.encoding).to eq Encoding::BINARY end end end end describe "directly setting values of a message" do describe "accessing fields directly" do before(:each) do @mail = Mail::Message.new end it "should allow you to grab field objects if you really want to" do expect(@mail.header_fields.class).to eq Mail::FieldList end it "should give you back the fields in the header" do @mail['bar'] = 'abcd' expect(@mail.header_fields.length).to eq 1 @mail['foo'] = '4321' expect(@mail.header_fields.length).to eq 2 end it "should delete a field if it is set to nil" do @mail['foo'] = '4321' expect(@mail.header_fields.length).to eq 1 @mail['foo'] = nil expect(@mail.header_fields.length).to eq 0 end end describe "with :method=" do before(:each) do @mail = Mail::Message.new end it "should return the to field" do @mail.to = "mikel" expect(@mail.to).to eq ["mikel"] end it "should return the from field" do @mail.from = "bob" expect(@mail.from).to eq ["bob"] end it "should return the subject" do @mail.subject = "Hello!" expect(@mail.subject).to eq "Hello!" end it "should return the body decoded with to_s" do @mail.body "email message\r\n" expect(@mail.body.to_s).to eq "email message\n" end it "should return the body encoded if asked for" do @mail.body "email message\r\n" expect(@mail.body.encoded).to eq "email message\r\n" end it "should return the body decoded if asked for" do @mail.body "email message\r\n" expect(@mail.body.decoded).to eq "email message\n" end end describe "with :method(value)" do before(:each) do @mail = Mail::Message.new end it "should return the to field" do @mail.to "mikel" expect(@mail.to).to eq ["mikel"] end it "should return the from field" do @mail.from "bob" expect(@mail.from).to eq ["bob"] end it "should return the subject" do @mail.subject "Hello!" expect(@mail.subject).to eq "Hello!" end it "should return the body decoded with to_s" do @mail.body "email message\r\n" expect(@mail.body.to_s).to eq "email message\n" end it "should return the body encoded if asked for" do @mail.body "email message\r\n" expect(@mail.body.encoded).to eq "email message\r\n" end it "should return the body decoded if asked for" do @mail.body "email message\r\n" expect(@mail.body.decoded).to eq "email message\n" end end describe "setting arbitrary headers" do before(:each) do @mail = Mail::Message.new end it "should allow you to set them" do expect {@mail['foo'] = 1234}.not_to raise_error end it "should allow you to read arbitrary headers" do @mail['foo'] = 1234 expect(@mail['foo'].value.to_s).to eq '1234' end it "should instantiate a new Header" do @mail['foo'] = 1234 expect(@mail.header_fields.first.class).to eq Mail::Field end end describe "replacing header values" do it "should allow you to replace a from field" do mail = Mail.new expect(mail.from).to eq nil mail.from = 'mikel@test.lindsaar.net' expect(mail.from).to eq ['mikel@test.lindsaar.net'] mail.from = 'bob@test.lindsaar.net' expect(mail.from).to eq ['bob@test.lindsaar.net'] end it "should maintain the class of the field" do mail = Mail.new mail.from = 'mikel@test.lindsaar.net' expect(mail[:from].field.class).to eq Mail::FromField mail.from = 'bob@test.lindsaar.net' expect(mail[:from].field.class).to eq Mail::FromField end end describe "setting headers" do it "should accept them in block form" do message = Mail.new do bcc 'mikel@bcc.lindsaar.net' cc 'mikel@cc.lindsaar.net' comments 'this is a comment' date '12 Aug 2009 00:00:01 GMT' from 'mikel@from.lindsaar.net' in_reply_to '<1234@in_reply_to.lindsaar.net>' keywords 'test, "of the new mail", system' message_id '<1234@message_id.lindsaar.net>' received 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' references '<1234@references.lindsaar.net>' reply_to 'mikel@reply-to.lindsaar.net' resent_bcc 'mikel@resent-bcc.lindsaar.net' resent_cc 'mikel@resent-cc.lindsaar.net' resent_date '12 Aug 2009 00:00:03 GMT' resent_from 'mikel@resent-from.lindsaar.net' resent_message_id '<1234@resent_message_id.lindsaar.net>' resent_sender 'mikel@resent-sender.lindsaar.net' resent_to 'mikel@resent-to.lindsaar.net' sender 'mikel@sender.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' content_type 'text/plain; charset=UTF-8' content_transfer_encoding '7bit' content_description 'This is a test' content_disposition 'attachment; filename=File' content_id '<1234@message_id.lindsaar.net>' mime_version '1.0' body 'This is a body of text' end expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should accept them in assignment form" do message = Mail.new message.bcc = 'mikel@bcc.lindsaar.net' message.cc = 'mikel@cc.lindsaar.net' message.comments = 'this is a comment' message.date = '12 Aug 2009 00:00:01 GMT' message.from = 'mikel@from.lindsaar.net' message.in_reply_to = '<1234@in_reply_to.lindsaar.net>' message.keywords = 'test, "of the new mail", system' message.message_id = '<1234@message_id.lindsaar.net>' message.received = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' message.references = '<1234@references.lindsaar.net>' message.reply_to = 'mikel@reply-to.lindsaar.net' message.resent_bcc = 'mikel@resent-bcc.lindsaar.net' message.resent_cc = 'mikel@resent-cc.lindsaar.net' message.resent_date = '12 Aug 2009 00:00:03 GMT' message.resent_from = 'mikel@resent-from.lindsaar.net' message.resent_message_id = '<1234@resent_message_id.lindsaar.net>' message.resent_sender = 'mikel@resent-sender.lindsaar.net' message.resent_to = 'mikel@resent-to.lindsaar.net' message.sender = 'mikel@sender.lindsaar.net' message.subject = 'Hello there Mikel' message.to = 'mikel@to.lindsaar.net' message.content_type = 'text/plain; charset=UTF-8' message.content_transfer_encoding = '7bit' message.content_description = 'This is a test' message.content_disposition = 'attachment; filename=File' message.content_id = '<1234@message_id.lindsaar.net>' message.mime_version = '1.0' message.body = 'This is a body of text' expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should accept them in key, value form as symbols" do message = Mail.new message[:bcc] = 'mikel@bcc.lindsaar.net' message[:cc] = 'mikel@cc.lindsaar.net' message[:comments] = 'this is a comment' message[:date] = '12 Aug 2009 00:00:01 GMT' message[:from] = 'mikel@from.lindsaar.net' message[:in_reply_to] = '<1234@in_reply_to.lindsaar.net>' message[:keywords] = 'test, "of the new mail", system' message[:message_id] = '<1234@message_id.lindsaar.net>' message[:received] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' message[:references] = '<1234@references.lindsaar.net>' message[:reply_to] = 'mikel@reply-to.lindsaar.net' message[:resent_bcc] = 'mikel@resent-bcc.lindsaar.net' message[:resent_cc] = 'mikel@resent-cc.lindsaar.net' message[:resent_date] = '12 Aug 2009 00:00:03 GMT' message[:resent_from] = 'mikel@resent-from.lindsaar.net' message[:resent_message_id] = '<1234@resent_message_id.lindsaar.net>' message[:resent_sender] = 'mikel@resent-sender.lindsaar.net' message[:resent_to] = 'mikel@resent-to.lindsaar.net' message[:sender] = 'mikel@sender.lindsaar.net' message[:subject] = 'Hello there Mikel' message[:to] = 'mikel@to.lindsaar.net' message[:content_type] = 'text/plain; charset=UTF-8' message[:content_transfer_encoding] = '7bit' message[:content_description] = 'This is a test' message[:content_disposition] = 'attachment; filename=File' message[:content_id] = '<1234@message_id.lindsaar.net>' message[:mime_version]= '1.0' message[:body] = 'This is a body of text' expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should accept them in key, value form as strings" do message = Mail.new message['bcc'] = 'mikel@bcc.lindsaar.net' message['cc'] = 'mikel@cc.lindsaar.net' message['comments'] = 'this is a comment' message['date'] = '12 Aug 2009 00:00:01 GMT' message['from'] = 'mikel@from.lindsaar.net' message['in_reply_to'] = '<1234@in_reply_to.lindsaar.net>' message['keywords'] = 'test, "of the new mail", system' message['message_id'] = '<1234@message_id.lindsaar.net>' message['received'] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' message['references'] = '<1234@references.lindsaar.net>' message['reply_to'] = 'mikel@reply-to.lindsaar.net' message['resent_bcc'] = 'mikel@resent-bcc.lindsaar.net' message['resent_cc'] = 'mikel@resent-cc.lindsaar.net' message['resent_date'] = '12 Aug 2009 00:00:03 GMT' message['resent_from'] = 'mikel@resent-from.lindsaar.net' message['resent_message_id'] = '<1234@resent_message_id.lindsaar.net>' message['resent_sender'] = 'mikel@resent-sender.lindsaar.net' message['resent_to'] = 'mikel@resent-to.lindsaar.net' message['sender'] = 'mikel@sender.lindsaar.net' message['subject'] = 'Hello there Mikel' message['to'] = 'mikel@to.lindsaar.net' message['content_type'] = 'text/plain; charset=UTF-8' message['content_transfer_encoding'] = '7bit' message['content_description'] = 'This is a test' message['content_disposition'] = 'attachment; filename=File' message['content_id'] = '<1234@message_id.lindsaar.net>' message['mime_version'] = '1.0' message['body'] = 'This is a body of text' expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should accept them as a hash with symbols" do message = Mail.new({ :bcc => 'mikel@bcc.lindsaar.net', :cc => 'mikel@cc.lindsaar.net', :comments => 'this is a comment', :date => '12 Aug 2009 00:00:01 GMT', :from => 'mikel@from.lindsaar.net', :in_reply_to => '<1234@in_reply_to.lindsaar.net>', :keywords => 'test, "of the new mail", system', :message_id => '<1234@message_id.lindsaar.net>', :received => 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT', :references => '<1234@references.lindsaar.net>', :reply_to => 'mikel@reply-to.lindsaar.net', :resent_bcc => 'mikel@resent-bcc.lindsaar.net', :resent_cc => 'mikel@resent-cc.lindsaar.net', :resent_date => '12 Aug 2009 00:00:03 GMT', :resent_from => 'mikel@resent-from.lindsaar.net', :resent_message_id => '<1234@resent_message_id.lindsaar.net>', :resent_sender => 'mikel@resent-sender.lindsaar.net', :resent_to => 'mikel@resent-to.lindsaar.net', :sender => 'mikel@sender.lindsaar.net', :subject => 'Hello there Mikel', :to => 'mikel@to.lindsaar.net', :content_type => 'text/plain; charset=UTF-8', :content_transfer_encoding => '7bit', :content_description => 'This is a test', :content_disposition => 'attachment; filename=File', :content_id => '<1234@message_id.lindsaar.net>', :mime_version => '1.0', :body => 'This is a body of text' }) expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should accept them as a hash with strings" do message = Mail.new({ 'bcc' => 'mikel@bcc.lindsaar.net', 'cc' => 'mikel@cc.lindsaar.net', 'comments' => 'this is a comment', 'date' => '12 Aug 2009 00:00:01 GMT', 'from' => 'mikel@from.lindsaar.net', 'in_reply_to' => '<1234@in_reply_to.lindsaar.net>', 'keywords' => 'test, "of the new mail", system', 'message_id' => '<1234@message_id.lindsaar.net>', 'received' => 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT', 'references' => '<1234@references.lindsaar.net>', 'reply_to' => 'mikel@reply-to.lindsaar.net', 'resent_bcc' => 'mikel@resent-bcc.lindsaar.net', 'resent_cc' => 'mikel@resent-cc.lindsaar.net', 'resent_date' => '12 Aug 2009 00:00:03 GMT', 'resent_from' => 'mikel@resent-from.lindsaar.net', 'resent_message_id' => '<1234@resent_message_id.lindsaar.net>', 'resent_sender' => 'mikel@resent-sender.lindsaar.net', 'resent_to' => 'mikel@resent-to.lindsaar.net', 'sender' => 'mikel@sender.lindsaar.net', 'subject' => 'Hello there Mikel', 'to' => 'mikel@to.lindsaar.net', 'content_type' => 'text/plain; charset=UTF-8', 'content_transfer_encoding' => '7bit', 'content_description' => 'This is a test', 'content_disposition' => 'attachment; filename=File', 'content_id' => '<1234@message_id.lindsaar.net>', 'mime_version' => '1.0', 'body' => 'This is a body of text' }) expect(message.bcc).to eq ['mikel@bcc.lindsaar.net'] expect(message.cc).to eq ['mikel@cc.lindsaar.net'] expect(message.comments).to eq 'this is a comment' expect(message.date).to eq DateTime.parse('12 Aug 2009 00:00:01 GMT') expect(message.from).to eq ['mikel@from.lindsaar.net'] expect(message.in_reply_to).to eq '1234@in_reply_to.lindsaar.net' expect(message.keywords).to eq ["test", "of the new mail", "system"] expect(message.message_id).to eq '1234@message_id.lindsaar.net' expect(message.received.date_time).to eq DateTime.parse('12 Aug 2009 00:00:02 GMT') expect(message.references).to eq '1234@references.lindsaar.net' expect(message.reply_to).to eq ['mikel@reply-to.lindsaar.net'] expect(message.resent_bcc).to eq ['mikel@resent-bcc.lindsaar.net'] expect(message.resent_cc).to eq ['mikel@resent-cc.lindsaar.net'] expect(message.resent_date).to eq DateTime.parse('12 Aug 2009 00:00:03 GMT') expect(message.resent_from).to eq ['mikel@resent-from.lindsaar.net'] expect(message.resent_message_id).to eq '1234@resent_message_id.lindsaar.net' expect(message.resent_sender).to eq ['mikel@resent-sender.lindsaar.net'] expect(message.resent_to).to eq ['mikel@resent-to.lindsaar.net'] expect(message.sender).to eq 'mikel@sender.lindsaar.net' expect(message.subject).to eq 'Hello there Mikel' expect(message.to).to eq ['mikel@to.lindsaar.net'] expect(message.content_type).to eq 'text/plain; charset=UTF-8' expect(message.content_transfer_encoding).to eq '7bit' expect(message.content_description).to eq 'This is a test' expect(message.content_disposition).to eq 'attachment; filename=File' expect(message.content_id).to eq '<1234@message_id.lindsaar.net>' expect(message.mime_version).to eq '1.0' expect(message.body.to_s).to eq 'This is a body of text' end it "should let you set custom headers with a :headers => {hash}" do message = Mail.new(:headers => {'custom-header' => 'mikel'}) expect(message['custom-header'].decoded).to eq 'mikel' end it "should assign the body to a part on creation" do message = Mail.new do part({:content_type=>"multipart/alternative", :content_disposition=>"inline", :body=>"Nothing to see here."}) end expect(message.parts.first.body.decoded).to eq "Nothing to see here." end it "should not overwrite bodies on creation" do message = Mail.new do part({:content_type=>"multipart/alternative", :content_disposition=>"inline", :body=>"Nothing to see here."}) do |p| p.part :content_type => "text/html", :body => "test HTML
    " end end expect(message.parts.first.parts[0].body.decoded).to eq "Nothing to see here." expect(message.parts.first.parts[1].body.decoded).to eq "test HTML
    " expect(message.encoded).to match %r{Nothing to see here\.} expect(message.encoded).to match %r{test HTML
    } end it "should allow you to init on an array of addresses from a hash" do mail = Mail.new(:to => ['test1@lindsaar.net', 'Mikel ']) expect(mail.to).to eq ['test1@lindsaar.net', 'test2@lindsaar.net'] end it "should allow you to init on an array of addresses directly" do mail = Mail.new mail.to = ['test1@lindsaar.net', 'Mikel '] expect(mail.to).to eq ['test1@lindsaar.net', 'test2@lindsaar.net'] end it "should allow you to init on an array of addresses directly" do mail = Mail.new mail[:to] = ['test1@lindsaar.net', 'Mikel '] expect(mail.to).to eq ['test1@lindsaar.net', 'test2@lindsaar.net'] end end end describe "making a copy of a message with dup" do def message_should_have_default_values(message) expect(message.bcc).to eq nil expect(message.cc).to eq nil expect(message.comments).to eq nil expect(message.date).to eq nil expect(message.from).to eq nil expect(message.in_reply_to).to eq nil expect(message.keywords).to eq nil expect(message.message_id).to eq nil expect(message.received).to eq nil expect(message.references).to eq nil expect(message.reply_to).to eq nil expect(message.resent_bcc).to eq nil expect(message.resent_cc).to eq nil expect(message.resent_date).to eq nil expect(message.resent_from).to eq nil expect(message.resent_message_id).to eq nil expect(message.resent_sender).to eq nil expect(message.resent_to).to eq nil expect(message.sender).to eq nil expect(message.subject).to eq nil expect(message.to).to eq nil expect(message.content_type).to eq nil expect(message.content_transfer_encoding).to eq nil expect(message.content_description).to eq nil expect(message.content_disposition).to eq nil expect(message.content_id).to eq nil expect(message.mime_version).to eq nil expect(message.body.to_s).to eq '' end it "its headers should not be changed when you change the headers of the original" do message = Mail.new message_copy = message.dup message_should_have_default_values message message_should_have_default_values message_copy message[:bcc] = 'mikel@bcc.lindsaar.net' message[:cc] = 'mikel@cc.lindsaar.net' message[:comments] = 'this is a comment' message[:date] = '12 Aug 2009 00:00:01 GMT' message[:from] = 'mikel@from.lindsaar.net' message[:in_reply_to] = '<1234@in_reply_to.lindsaar.net>' message[:keywords] = 'test, "of the new mail", system' message[:message_id] = '<1234@message_id.lindsaar.net>' message[:received] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' message[:references] = '<1234@references.lindsaar.net>' message[:reply_to] = 'mikel@reply-to.lindsaar.net' message[:resent_bcc] = 'mikel@resent-bcc.lindsaar.net' message[:resent_cc] = 'mikel@resent-cc.lindsaar.net' message[:resent_date] = '12 Aug 2009 00:00:03 GMT' message[:resent_from] = 'mikel@resent-from.lindsaar.net' message[:resent_message_id] = '<1234@resent_message_id.lindsaar.net>' message[:resent_sender] = 'mikel@resent-sender.lindsaar.net' message[:resent_to] = 'mikel@resent-to.lindsaar.net' message[:sender] = 'mikel@sender.lindsaar.net' message[:subject] = 'Hello there Mikel' message[:to] = 'mikel@to.lindsaar.net' message[:content_type] = 'text/plain; charset=UTF-8' message[:content_transfer_encoding] = '7bit' message[:content_description] = 'This is a test' message[:content_disposition] = 'attachment; filename=File' message[:content_id] = '<1234@message_id.lindsaar.net>' message[:mime_version]= '1.0' message[:body] = 'This is a body of text' message_should_have_default_values message_copy end def message_headers_should_match(message, other) expect(message.bcc).to eq other.bcc expect(message.cc).to eq other.cc expect(message.comments).to eq other.comments expect(message.date).to eq other.date expect(message.from).to eq other.from expect(message.in_reply_to).to eq other.in_reply_to expect(message.keywords).to eq other.keywords expect(message.message_id).to eq other.message_id expect(message.received).to eq other.received expect(message.references).to eq other.references expect(message.reply_to).to eq other.reply_to expect(message.resent_bcc).to eq other.resent_bcc expect(message.resent_cc).to eq other.resent_cc expect(message.resent_date).to eq other.resent_date expect(message.resent_from).to eq other.resent_from expect(message.resent_message_id).to eq other.resent_message_id expect(message.resent_sender).to eq other.resent_sender expect(message.resent_to).to eq other.resent_to expect(message.sender).to eq other.sender expect(message.subject).to eq other.subject expect(message.to).to eq other.to expect(message.content_type).to eq other.content_type expect(message.content_transfer_encoding).to eq other.content_transfer_encoding expect(message.content_description).to eq other.content_description expect(message.content_disposition).to eq other.content_disposition expect(message.content_id).to eq other.content_id expect(message.mime_version).to eq other.mime_version expect(message.body.to_s).to eq other.body.to_s end it "its headers should be copies of the headers of the original" do message = Mail.new message[:bcc] = 'mikel@bcc.lindsaar.net' message[:cc] = 'mikel@cc.lindsaar.net' message[:comments] = 'this is a comment' message[:date] = '12 Aug 2009 00:00:01 GMT' message[:from] = 'mikel@from.lindsaar.net' message[:in_reply_to] = '<1234@in_reply_to.lindsaar.net>' message[:keywords] = 'test, "of the new mail", system' message[:message_id] = '<1234@message_id.lindsaar.net>' message[:received] = 'from machine.example by x.y.test; 12 Aug 2009 00:00:02 GMT' message[:references] = '<1234@references.lindsaar.net>' message[:reply_to] = 'mikel@reply-to.lindsaar.net' message[:resent_bcc] = 'mikel@resent-bcc.lindsaar.net' message[:resent_cc] = 'mikel@resent-cc.lindsaar.net' message[:resent_date] = '12 Aug 2009 00:00:03 GMT' message[:resent_from] = 'mikel@resent-from.lindsaar.net' message[:resent_message_id] = '<1234@resent_message_id.lindsaar.net>' message[:resent_sender] = 'mikel@resent-sender.lindsaar.net' message[:resent_to] = 'mikel@resent-to.lindsaar.net' message[:sender] = 'mikel@sender.lindsaar.net' message[:subject] = 'Hello there Mikel' message[:to] = 'mikel@to.lindsaar.net' message[:content_type] = 'text/plain; charset=UTF-8' message[:content_transfer_encoding] = '7bit' message[:content_description] = 'This is a test' message[:content_disposition] = 'attachment; filename=File' message[:content_id] = '<1234@message_id.lindsaar.net>' message[:mime_version]= '1.0' message[:body] = 'This is a body of text' message_copy = message.dup message_headers_should_match message_copy, message end end describe "handling missing required fields:" do describe "every email" do describe "Message-ID" do it "should say if it has a message id" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail).not_to be_has_message_id end it "should preserve any message id that you pass it if add_message_id is called explicitly" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_message_id("") expect(mail.to_s).to match(/Message-ID: \r\n/) end it "should generate a random message ID if nothing is passed to add_message_id" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_message_id expect(mail.to_s).to match(/Message-ID: <[\w]+@#{::Socket.gethostname}.mail>\r\n/) end it "should make an email and inject a message ID if none was set if told to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail.to_s =~ /Message-ID: <.+@.+.mail>/i).not_to be_nil end it "should add the message id to the message permanently once sent to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.to_s expect(mail).to be_has_message_id end it "should add a body part if it is missing" do mail = Mail.new mail.to_s expect(mail.body.class).to eq Mail::Body end end describe "Date" do it "should say if it has a date" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail).not_to be_has_date end it "should preserve any date that you pass it if add_date is called explicitly" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_date("Mon, 24 Nov 1997 14:22:01 -0800") expect(mail.to_s).to match(/Date: Mon, 24 Nov 1997 14:22:01 -0800/) end it "should generate a current date if nothing is passed to add_date" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_date expect(mail.to_s).to match(/Date: \w{3}, [\s\d]\d \w{3} \d{4} \d{2}:\d{2}:\d{2} [-+]?\d{4}\r\n/) end it "should make an email and inject a date if none was set if told to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail.to_s).to match(/Date: \w{3}, [\s\d]\d \w{3} \d{4} \d{2}:\d{2}:\d{2} [-+]?\d{4}\r\n/) end it "should add the date to the message permanently once sent to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.to_s expect(mail).to be_has_date end end end describe "mime emails" do describe "mime-version" do it "should say if it has a mime-version" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail).not_to be_has_mime_version end it "should preserve any mime version that you pass it if add_mime_version is called explicitly" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_mime_version("3.0 (This is an unreal version number)") expect(mail.to_s).to match(/Mime-Version: 3.0\r\n/) end it "should generate a mime version if nothing is passed to add_date" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.add_mime_version expect(mail.to_s).to match(/Mime-Version: 1.0\r\n/) end it "should make an email and inject a mime_version if none was set if told to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail.to_s).to match(/Mime-Version: 1.0\r\n/) end it "should add the mime version to the message permanently once sent to_s" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end mail.to_s expect(mail).to be_has_mime_version end end describe "content type" do it "should say if it has a content type" do mail = Mail.new('Content-Type: text/plain') expect(mail).to be_has_content_type end it "should say if it does not have a content type" do mail = Mail.new expect(mail).not_to be_has_content_type end it "should say if it has a charset" do mail = Mail.new('Content-Type: text/plain; charset=US-ASCII') expect(mail).to be_has_charset end it "should say if it has a charset" do mail = Mail.new('Content-Type: text/plain') expect(mail).not_to be_has_charset end it "should not raise a warning if there is no charset defined and only US-ASCII chars" do body = "This is plain text US-ASCII" mail = Mail.new mail.body = body expect(STDERR).not_to receive(:puts) mail.to_s end it "should set the content type to text/plain; charset=us-ascii" do body = "This is plain text US-ASCII" mail = Mail.new mail.body = body mail.to_s =~ %r{Content-Type: text/plain; charset=US-ASCII} end it "should not set the charset if the file is an attachment" do body = "This is plain text US-ASCII" mail = Mail.new mail.body = body mail.content_disposition = 'attachment; filename="foo.jpg"' mail.to_s =~ %r{Content-Type: text/plain;\r\n} end it "should not set the charset if the content_type is not text" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.content_type = "image/png" mail.to_s.should_not =~ %r{Content-Type: image/png;\s+charset=UTF-8} end it "should raise a warning if there is no content type and there is non ascii chars and default to text/plain, UTF-8" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.content_transfer_encoding = "8bit" expect(STDERR).to receive(:puts).with(/Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect./m) mail.to_s =~ %r{Content-Type: text/plain; charset=UTF-8} end it "should raise a warning if there is no charset parameter and there is non ascii chars and default to text/plain, UTF-8" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.content_type = "text/plain" mail.content_transfer_encoding = "8bit" expect(STDERR).to receive(:puts).with(/Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect./m) mail.to_s =~ %r{Content-Type: text/plain; charset=UTF-8} end it "should not raise a warning if there is no charset parameter and the content-type is not text" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.content_type = "image/png" mail.content_transfer_encoding = "8bit" STDERR.should_not_receive(:puts) mail.to_s end it "should not raise a warning if there is a charset defined and there is non ascii chars" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.content_transfer_encoding = "8bit" mail.content_type = "text/plain; charset=UTF-8" expect(STDERR).not_to receive(:puts) mail.to_s end it "should be able to set a content type with an array and hash" do mail = Mail.new mail.content_type = ["text", "plain", { :charset => 'US-ASCII' }] expect(mail[:content_type].encoded).to eq %Q[Content-Type: text/plain;\r\n\scharset=US-ASCII\r\n] expect(mail.content_type_parameters).to eql({"charset" => "US-ASCII"}) end it "should be able to set a content type with an array and hash with a non-usascii field" do mail = Mail.new mail.content_type = ["text", "plain", { :charset => 'UTF-8' }] expect(mail[:content_type].encoded).to eq %Q[Content-Type: text/plain;\r\n\scharset=UTF-8\r\n] expect(mail.content_type_parameters).to eql({"charset" => "UTF-8"}) end it "should allow us to specify a content type in a block" do mail = Mail.new { content_type ["text", "plain", { "charset" => "UTF-8" }] } expect(mail.content_type_parameters).to eql({"charset" => "UTF-8"}) end end describe "content-transfer-encoding" do it "should use 7bit for only US-ASCII chars" do body = "This is plain text US-ASCII" mail = Mail.new mail.body = body expect(mail.to_s).to match(%r{Content-Transfer-Encoding: 7bit}) end it "should use QP transfer encoding for 7bit text with lines longer than 998 octets" do body = "a" * 999 mail = Mail.new mail.charset = "UTF-8" mail.body = body expect(mail.to_s).to match(%r{Content-Transfer-Encoding: quoted-printable}) end it "should use QP transfer encoding for 8bit text with only a few 8bit characters" do body = "Maxfeldstraße 5, 90409 Nürnberg" mail = Mail.new mail.charset = "UTF-8" mail.body = body expect(mail.to_s).to match(%r{Content-Transfer-Encoding: quoted-printable}) end it "should use base64 transfer encoding for 8-bit text with lots of 8bit characters" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.charset = "UTF-8" mail.body = body mail.content_type = "text/plain; charset=utf-8" expect(mail).to be_has_content_type expect(mail).to be_has_charset expect(mail.to_s).to match(%r{Content-Transfer-Encoding: base64}) end it "should not use 8bit transfer encoding when 8bit is allowed" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.charset = "UTF-8" mail.body = body mail.content_type = "text/plain; charset=utf-8" mail.transport_encoding = "8bit" expect(mail.to_s).to match(%r{Content-Transfer-Encoding: 8bit}) end end end end describe "output" do it "should make an email and allow you to call :to_s on it to get a string" do mail = Mail.new do from 'mikel@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'This is a test email' body 'This is a body of the email' end expect(mail.to_s).to match(/From: mikel@test.lindsaar.net\r\n/) expect(mail.to_s).to match(/To: you@test.lindsaar.net\r\n/) expect(mail.to_s).to match(/Subject: This is a test email\r\n/) expect(mail.to_s).to match(/This is a body of the email/) end it "should raise an error and message if you try and call decoded on a multipart email" do mail = Mail.new do to 'mikel@test.lindsaar.net' from 'bob@test.lindsaar.net' subject 'Multipart email' text_part do body 'This is plain text' end html_part do content_type 'text/html; charset=UTF-8' body '

    This is HTML

    ' end end expect { mail.decoded }.to raise_error(NoMethodError, 'Can not decode an entire message, try calling #decoded on the various fields and body or parts if it is a multipart message.') end it "should return the decoded body if you call decode and the message is not multipart" do mail = Mail.new do content_transfer_encoding 'base64' body "VGhlIGJvZHk=\n" end expect(mail.decoded).to eq "The body" end describe "decoding bodies" do it "should not change a body on decode if not given an encoding type to decode" do mail = Mail.new do body "The=3Dbody" end expect(mail.body.decoded).to eq "The=3Dbody" expect(mail.body.encoded).to eq "The=3Dbody" end it "should change a body on decode if given an encoding type to decode" do mail = Mail.new do content_transfer_encoding 'quoted-printable' body "The=3Dbody" end expect(mail.body.decoded).to eq "The=body" expect(mail.body.encoded).to eq "The=3Dbody=\r\n" end it "should change a body on decode if given an encoding type to decode" do mail = Mail.new do content_transfer_encoding 'base64' body "VGhlIGJvZHk=\n" end expect(mail.body.decoded).to eq "The body" expect(mail.body.encoded).to eq "VGhlIGJvZHk=\r\n" end it 'should not strip the raw mail source in case the trailing \r\n is meaningful' do expect(Mail.new("Content-Transfer-Encoding: quoted-printable;\r\n\r\nfoo=\r\nbar=\r\nbaz=\r\n").decoded).to eq 'foobarbaz' end end end describe "text messages" do def message_with_iso_8859_1_charset "From: test@example.com\r\n"+ "Content-Type: text/plain; charset=iso-8859-1\r\n"+ "Content-Transfer-Encoding: quoted-printable\r\n"+ "Date: Tue, 27 Sep 2011 16:59:48 +0100 (BST)\r\n"+ "Subject: test\r\n\r\n"+ "Am=E9rica" end def with_encoder(encoder) old, Mail::Ruby19.charset_encoder = Mail::Ruby19.charset_encoder, encoder yield ensure Mail::Ruby19.charset_encoder = old end let(:message){ Mail.new(message_with_iso_8859_1_charset) } it "should be decoded using content type charset" do expect(message.decoded).to eq "América" end it "should respond true to text?" do expect(message.text?).to eq true end if RUBY_VERSION > "1.9" it "uses the Ruby19 charset encoder" do with_encoder(Mail::Ruby19::BestEffortCharsetEncoder.new) do message = Mail.new("Content-Type: text/plain;\r\n charset=windows-1258\r\nContent-Transfer-Encoding: base64\r\n\r\nSGkglg==\r\n") expect(message.decoded).to eq("Hi –") end end end end describe "helper methods" do describe "==" do before(:each) do # Ensure specs don't randomly fail due to messages being generated 1 second apart time = DateTime.now expect(DateTime).to receive(:now).at_least(:once).and_return(time) end it "should be implemented" do expect { Mail.new == Mail.new }.not_to raise_error end it "should ignore the message id value if both have a nil message id" do m1 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there") m2 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there") expect(m1).to eq m2 # confirm there are no side-effects in the comparison expect(m1.message_id).to be_nil expect(m2.message_id).to be_nil end it "should ignore the message id value if self has a nil message id" do m1 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there") m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there") expect(m1).to eq m2 # confirm there are no side-effects in the comparison expect(m1.message_id).to be_nil expect(m2.message_id).to eq '1234@test.lindsaar.net' end it "should ignore the message id value if other has a nil message id" do m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there") m2 = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Yo!\r\n\r\nHello there") expect(m1).to eq m2 # confirm there are no side-effects in the comparison expect(m1.message_id).to eq '1234@test.lindsaar.net' expect(m2.message_id).to be_nil end it "should not be == if both emails have different Message IDs" do m1 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <4321@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there") m2 = Mail.new("To: mikel@test.lindsaar.net\r\nMessage-ID: <1234@test.lindsaar.net>\r\nSubject: Yo!\r\n\r\nHello there") expect(m1).not_to eq m2 # confirm there are no side-effects in the comparison expect(m1.message_id).to eq '4321@test.lindsaar.net' expect(m2.message_id).to eq '1234@test.lindsaar.net' end end it "should implement the spaceship operator on the date field" do now = Time.now mail1 = Mail.new do date(now) end mail2 = Mail.new do date(now - 10) # Make mail2 10 seconds 'older' end expect([mail2, mail1].sort).to eq [mail2, mail1] end it "should have a destinations method" do mail = Mail.new do to 'mikel@test.lindsaar.net' cc 'bob@test.lindsaar.net' bcc 'sam@test.lindsaar.net' end expect(mail.destinations.length).to eq 3 end it "should have a from_addrs method" do mail = Mail.new do from 'mikel@test.lindsaar.net' end expect(mail.from_addrs.length).to eq 1 end it "should have a from_addrs method that is empty if nil" do mail = Mail.new do end expect(mail.from_addrs.length).to eq 0 end it "should have a to_addrs method" do mail = Mail.new do to 'mikel@test.lindsaar.net' end expect(mail.to_addrs.length).to eq 1 end it "should have a to_addrs method that is empty if nil" do mail = Mail.new do end expect(mail.to_addrs.length).to eq 0 end it "should have a cc_addrs method" do mail = Mail.new do cc 'bob@test.lindsaar.net' end expect(mail.cc_addrs.length).to eq 1 end it "should have a cc_addrs method that is empty if nil" do mail = Mail.new do end expect(mail.cc_addrs.length).to eq 0 end it "should have a bcc_addrs method" do mail = Mail.new do bcc 'sam@test.lindsaar.net' end expect(mail.bcc_addrs.length).to eq 1 end it "should have a bcc_addrs method that is empty if nil" do mail = Mail.new do end expect(mail.bcc_addrs.length).to eq 0 end it "should give destinations even if some of the fields are blank" do mail = Mail.new do to 'mikel@test.lindsaar.net' end expect(mail.destinations.length).to eq 1 end it "should be able to encode with only one destination" do mail = Mail.new do to 'mikel@test.lindsaar.net' end mail.encoded end end describe "nested parts" do it "should provide a way to instantiate a new part as you go down" do mail = Mail.new do to 'mikel@test.lindsaar.net' subject "nested multipart" from "test@example.com" content_type "multipart/mixed" part :content_type => "multipart/alternative", :content_disposition => "inline", :headers => { "foo" => "bar" } do |p| p.part :content_type => "text/plain", :body => "test text\nline #2" p.part :content_type => "text/html", :body => "test HTML
    \nline #2" end end expect(mail.parts.first).to be_multipart expect(mail.parts.first.parts.length).to eq 2 expect(mail.parts.first.parts[0][:content_type].string).to eq "text/plain" expect(mail.parts.first.parts[0].body.decoded).to eq "test text\nline #2" expect(mail.parts.first.parts[1][:content_type].string).to eq "text/html" expect(mail.parts.first.parts[1].body.decoded).to eq "test HTML
    \nline #2" end end describe "deliver" do it "should return self after delivery" do mail = Mail.new mail.perform_deliveries = false expect(mail.deliver).to eq mail end class DeliveryAgent def self.deliver_mail(mail) end end it "should pass self to a delivery agent" do mail = Mail.new mail.delivery_handler = DeliveryAgent expect(DeliveryAgent).to receive(:deliver_mail).with(mail) mail.deliver end class ObserverAgent def self.delivered_email(mail) end end it "should inform observers that the mail was sent" do mail = Mail.new(:from => 'bob@example.com', :to => 'bobette@example.com') mail.delivery_method :test Mail.register_observer(ObserverAgent) expect(ObserverAgent).to receive(:delivered_email).with(mail) mail.deliver end it "should allow observers to be unregistered" do mail = Mail.new(:from => 'bob@example.com', :to => 'bobette@example.com') mail.delivery_method :test Mail.register_observer(ObserverAgent) Mail.unregister_observer(ObserverAgent) expect(ObserverAgent).not_to receive(:delivered_email).with(mail) mail.deliver end it "should inform observers that the mail was sent, even if a delivery agent is used" do mail = Mail.new mail.delivery_handler = DeliveryAgent Mail.register_observer(ObserverAgent) expect(ObserverAgent).to receive(:delivered_email).with(mail) mail.deliver end class InterceptorAgent @@intercept = false def self.intercept=(val) @@intercept = val end def self.delivering_email(mail) if @@intercept mail.to = 'bob@example.com' end end end it "should pass to the interceptor the email just before it gets sent" do mail = Mail.new(:from => 'bob@example.com', :to => 'bobette@example.com') mail.delivery_method :test Mail.register_interceptor(InterceptorAgent) expect(InterceptorAgent).to receive(:delivering_email).with(mail) InterceptorAgent.intercept = true mail.deliver InterceptorAgent.intercept = false end it "should let the interceptor that the mail was sent" do mail = Mail.new(:from => 'bob@example.com', :to => 'bobette@example.com') mail.to = 'fred@example.com' mail.delivery_method :test Mail.register_interceptor(InterceptorAgent) InterceptorAgent.intercept = true mail.deliver InterceptorAgent.intercept = false expect(mail.to).to eq ['bob@example.com'] end it "should allow interceptors to be unregistered" do mail = Mail.new(:from => 'bob@example.com', :to => 'bobette@example.com') mail.to = 'fred@example.com' mail.delivery_method :test Mail.register_interceptor(InterceptorAgent) InterceptorAgent.intercept = true Mail.unregister_interceptor(InterceptorAgent) mail.deliver InterceptorAgent.intercept = false expect(mail.to).to eq ['fred@example.com'] end end describe "error handling" do it "should collect up any of its fields' errors" do mail = Mail.new("Content-Transfer-Encoding: vl@d\r\nReply-To: a b b\r\n") expect(Mail::Utilities.blank?(mail.errors)).not_to be_truthy expect(mail.errors.size).to eq 2 expect(mail.errors[0][0]).to eq 'Reply-To' expect(mail.errors[0][1]).to eq 'a b b' expect(mail.errors[1][0]).to eq 'Content-Transfer-Encoding' expect(mail.errors[1][1]).to eq 'vl@d' end end describe "header case should be preserved" do it "should handle mail[] and keep the header case" do mail = Mail.new mail['X-Foo-Bar'] = "Some custom text" expect(mail.to_s).to match(/X-Foo-Bar: Some custom text/) end end describe "parsing emails with non usascii in the header" do it "should work" do mail = Mail.new('From: "Foo áëô îü" ') expect(mail.from).to eq ['extended@example.net'] expect(mail[:from].decoded).to eq '"Foo áëô îü" ' expect(mail[:from].encoded).to eq "From: =?UTF-8?B?Rm9vIMOhw6vDtCDDrsO8?= \r\n" end end describe "ordering messages" do it "should put all attachments as the last item" do # XXX: AFAICT, this is not actually working. The code does not appear to implement this. -- singpolyma mail = Mail.new mail.attachments['image.png'] = "\302\302\302\302" p = Mail::Part.new(:content_type => 'multipart/alternative') p.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT')) p.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT')) mail.add_part(p) mail.encoded expect(mail.parts[0].mime_type).to eq "multipart/alternative" expect(mail.parts[0].parts[0].mime_type).to eq "text/plain" expect(mail.parts[0].parts[1].mime_type).to eq "text/html" expect(mail.parts[1].mime_type).to eq "image/png" end end describe "attachment query methods" do it "shouldn't die with an invalid Content-Disposition header" do mail = Mail.new('Content-Disposition: invalid') expect { mail.attachment? }.not_to raise_error end it "shouldn't die with an invalid Content-Type header" do mail = Mail.new('Content-Type: invalid/invalid; charset="iso-8859-1"') mail.attachment? expect { mail.attachment? }.not_to raise_error end end describe "without_attachments!" do it "should delete all attachments" do emails_with_attachments = ['content_disposition', 'content_location', 'pdf', 'with_encoded_name', 'with_quoted_filename'] emails_with_attachments.each { |email| mail = Mail.read(fixture(File.join('emails', 'attachment_emails', "attachment_#{email}.eml"))) mail_length_with_attachments = mail.to_s.length expect(mail.has_attachments?).to be_truthy mail.without_attachments! mail_length_without_attachments = mail.to_s.length expect(mail_length_without_attachments).to be < mail_length_with_attachments expect(mail.has_attachments?).to be_falsey } end end describe "replying" do describe "to a basic message" do before do @mail = Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml')) end it "should create a new message" do expect(@mail.reply).to be_a_kind_of(Mail::Message) end it "should be in-reply-to the original message" do expect(@mail.reply.in_reply_to).to eq '6B7EC235-5B17-4CA8-B2B8-39290DEB43A3@test.lindsaar.net' end it "should reference the original message" do expect(@mail.reply.references).to eq '6B7EC235-5B17-4CA8-B2B8-39290DEB43A3@test.lindsaar.net' end it "should RE: the original subject" do expect(@mail.reply.subject).to eq 'RE: Testing 123' end it "should be sent to the original sender" do expect(@mail.reply.to).to eq ['test@lindsaar.net'] expect(@mail.reply[:to].to_s).to eq 'Mikel Lindsaar ' end it "should be sent from the original recipient" do expect(@mail.reply.from).to eq ['raasdnil@gmail.com'] expect(@mail.reply[:from].to_s).to eq 'Mikel Lindsaar ' end it "should accept args" do expect(@mail.reply(:from => 'Donald Ball ').from).to eq ['donald.ball@gmail.com'] end it "should accept a block" do expect(@mail.reply { from('Donald Ball ') }.from).to eq ['donald.ball@gmail.com'] end end describe "to a message with an explicit reply-to address" do before do @mail = Mail.read(fixture('emails', 'rfc2822', 'example06.eml')) end it "should be sent to the reply-to address" do expect(@mail.reply[:to].to_s).to eq '"Mary Smith: Personal Account" ' end end describe "to a message with more than one recipient" do before do @mail = Mail.read(fixture('emails', 'rfc2822', 'example03.eml')) end it "should be sent from the first to address" do expect(@mail.reply[:from].to_s).to eq 'Mary Smith ' end end describe "to a reply" do before do @mail = Mail.read(fixture('emails', 'plain_emails', 'raw_email_reply.eml')) end it "should be in-reply-to the original message" do expect(@mail.reply.in_reply_to).to eq '473FFE27.20003@xxx.org' end it "should append to the original's references list" do expect(@mail.reply[:references].message_ids).to eq ['473FF3B8.9020707@xxx.org', '348F04F142D69C21-291E56D292BC@xxxx.net', '473FFE27.20003@xxx.org'] end it "should not append another RE:" do expect(@mail.reply.subject).to eq "Re: Test reply email" end end describe "to a reply with an in-reply-to with a single message id but no references header" do before do @mail = Mail.new do in_reply_to '<1234@test.lindsaar.net>' message_id '5678@test.lindsaar.net' end end it "should have a references consisting of the in-reply-to and message_id fields" do expect(@mail.reply[:references].message_ids).to eq ['1234@test.lindsaar.net', '5678@test.lindsaar.net'] end end describe "to a reply with an in-reply-to with multiple message ids but no references header" do before do @mail = Mail.new do in_reply_to '<1234@test.lindsaar.net> <5678@test.lindsaar.net>' message_id '90@test.lindsaar.net' end end # Behavior is actually not defined in RFC2822, so we'll just leave it empty it "should have no references header" do expect(@mail.references).to be_nil end end end describe 'SMTP envelope From' do it 'should respond' do expect(Mail::Message.new).to respond_to(:smtp_envelope_from) end it 'should default to return_path, sender, or first from address' do message = Mail::Message.new do return_path 'return' sender 'sender' from 'from' end expect(message.smtp_envelope_from).to eq 'return' message.return_path = nil expect(message.smtp_envelope_from).to eq 'sender' message.sender = nil expect(message.smtp_envelope_from).to eq 'from' end it 'can be overridden' do message = Mail::Message.new { return_path 'return' } message.smtp_envelope_from = 'envelope_from' expect(message.smtp_envelope_from).to eq 'envelope_from' message.smtp_envelope_from = 'declared_from' expect(message.smtp_envelope_from).to eq 'declared_from' message.smtp_envelope_from = nil expect(message.smtp_envelope_from).to eq 'return' end end describe 'SMTP envelope To' do it 'should respond' do expect(Mail::Message.new).to respond_to(:smtp_envelope_to) end it 'should default to destinations' do message = Mail::Message.new do to 'to' cc 'cc' bcc 'bcc' end expect(message.smtp_envelope_to).to eq message.destinations end it 'can be overridden' do message = Mail::Message.new { to 'to' } message.smtp_envelope_to = 'envelope_to' expect(message.smtp_envelope_to).to eq %w(envelope_to) message.smtp_envelope_to = 'declared_to' expect(message.smtp_envelope_to).to eq %w(declared_to) message.smtp_envelope_to = nil expect(message.smtp_envelope_to).to eq %w(to) end end end mail-2.6.4/spec/mail/mime_messages_spec.rb000066400000000000000000000553371267453234600205270ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "MIME Emails" do describe "general helper methods" do it "should read a mime version from an email" do mail = Mail.new("Mime-Version: 1.0") expect(mail.mime_version).to eq '1.0' end it "should return nil if the email has no mime version" do mail = Mail.new("To: bob") expect(mail.mime_version).to eq nil end it "should read the content-transfer-encoding" do mail = Mail.new("Content-Transfer-Encoding: quoted-printable") expect(mail.content_transfer_encoding).to eq 'quoted-printable' end it "should read the content-description" do mail = Mail.new("Content-Description: This is a description") expect(mail.content_description).to eq 'This is a description' end it "should return the content-type" do mail = Mail.new("Content-Type: text/plain") expect(mail.mime_type).to eq 'text/plain' end it "should return the charset" do mail = Mail.new("Content-Type: text/plain; charset=utf-8") expect(mail.charset).to eq 'utf-8' end it "should allow you to set the charset" do mail = Mail.new mail.charset = 'utf-8' expect(mail.charset).to eq 'utf-8' end it "should return the main content-type" do mail = Mail.new("Content-Type: text/plain") expect(mail.main_type).to eq 'text' end it "should return the sub content-type" do mail = Mail.new("Content-Type: text/plain") expect(mail.sub_type).to eq 'plain' end it "should return the content-type parameters" do mail = Mail.new("Content-Type: text/plain; charset=US-ASCII; format=flowed") expect(mail.content_type_parameters).to eql({"charset" => 'US-ASCII', "format" => 'flowed'}) end it "should recognize a multipart email" do mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email7.eml')) expect(mail).to be_multipart end it "should recognize a non multipart email" do mail = Mail.read(fixture('emails', 'plain_emails', 'basic_email.eml')) expect(mail).not_to be_multipart end it "should not report the email as :attachment?" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_pdf.eml'))) expect(mail.attachment?).to eq false end it "should report the email as :attachment?" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_only_email.eml'))) expect(mail.attachment?).to eq true end it "should recognize an attachment part" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_pdf.eml'))) expect(mail).not_to be_attachment expect(mail.parts[0].attachment?).to eq false expect(mail.parts[1].attachment?).to eq true end it "should give how may (top level) parts there are" do mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email7.eml')) expect(mail.parts.length).to eq 2 end it "should give the content_type of each part" do mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email11.eml')) expect(mail.mime_type).to eq 'multipart/alternative' expect(mail.parts[0].mime_type).to eq 'text/plain' expect(mail.parts[1].mime_type).to eq 'text/enriched' end it "should report the mail :has_attachments?" do mail = Mail.read(fixture(File.join('emails', 'attachment_emails', 'attachment_pdf.eml'))) expect(mail).to be_has_attachments end it "should only split on exact boundary matches" do mail = Mail.read(fixture('emails', 'mime_emails', 'email_with_similar_boundaries.eml')) expect(mail.parts.size).to eq 2 expect(mail.parts.first.parts.size).to eq 2 expect(mail.boundary).to eq "----=_NextPart_476c4fde88e507bb8028170e8cf47c73" expect(mail.parts.first.boundary).to eq "----=_NextPart_476c4fde88e507bb8028170e8cf47c73_alt" end end describe "multipart emails" do it "should add a boundary if there is none defined and a part is added" do mail = Mail.new do part('This is a part') part('This is another part') end expect(mail.boundary).not_to be_nil end it "should not add a boundary for a message that is only an attachment" do mail = Mail.new mail.attachments['test.png'] = "2938492384923849" expect(mail.boundary).to be_nil end end describe "multipart/alternative emails" do it "should know what its boundary is if it is a multipart document" do mail = Mail.new('Content-Type: multipart/mixed; boundary="--==Boundary"') expect(mail.boundary).to eq "--==Boundary" end it "should return nil if there is no content-type defined" do mail = Mail.new expect(mail.boundary).to eq nil end it "should assign the text part and allow you to reference" do mail = Mail.new text_mail = Mail.new("This is Text") mail.text_part = text_mail expect(mail.text_part).to eq text_mail end it "should convert strings assigned to the text part into Mail::Part objects with sensible defaults" do mail = Mail.new mail.text_part = 'This is text' expect(mail.text_part.body).to eq 'This is text' expect(mail.text_part.content_type).to eq 'text/plain' end it "should not assign a nil text part" do mail = Mail.new mail.text_part = nil expect(mail.text_part).to be_nil end it "should assign the html part and allow you to reference" do mail = Mail.new html_mail = Mail.new("This is HTML") mail.html_part = html_mail expect(mail.html_part).to eq html_mail end it "should convert strings assigned to the html part into Mail::Part objects with sensible defaults" do mail = Mail.new mail.html_part = "This is HTML" expect(mail.html_part.body).to eq "This is HTML" expect(mail.html_part.content_type).to eq "text/html" end it "should not assign a nil html part" do mail = Mail.new mail.html_part = nil expect(mail.html_part).to be_nil end it "should set default content type on assigned text and html parts" do mail = Mail.new mail.text_part = Mail.new expect(mail.text_part.content_type).to eq 'text/plain' mail.html_part = Mail.new expect(mail.html_part.content_type).to eq 'text/html' end it "should set default content type on declared text and html parts" do mail = Mail.new mail.text_part { } expect(mail.text_part.content_type).to eq 'text/plain' mail.html_part { } expect(mail.html_part.content_type).to eq 'text/html' end it "should not override content type" do mail = Mail.new mail.text_part { content_type 'text/plain+foo' } expect(mail.text_part.content_type).to eq 'text/plain+foo' mail.html_part { content_type 'text/html+foo' } expect(mail.html_part.content_type).to eq 'text/html+foo' end it "should add the html part and text part" do mail = Mail.new mail.text_part = Mail::Part.new do body "This is Text" end mail.html_part = Mail::Part.new do content_type "text/html; charset=US-ASCII" body "This is HTML" end expect(mail.parts.length).to eq 2 expect(mail.parts.first.class).to eq Mail::Part expect(mail.parts.last.class).to eq Mail::Part end it "should remove the html part and back out of multipart/alternative if set to nil" do mail = Mail.new mail.text_part = Mail::Part.new mail.html_part = Mail::Part.new expect(mail.parts.length).to eq 2 mail.html_part = nil expect(mail.parts.length).to eq 1 expect(mail.boundary).to be_nil expect(mail.content_type).to be_nil end it "should remove the text part and back out of multipart/alternative if set to nil" do mail = Mail.new mail.text_part = Mail::Part.new mail.html_part = Mail::Part.new expect(mail.parts.length).to eq 2 mail.text_part = nil expect(mail.parts.length).to eq 1 expect(mail.boundary).to be_nil expect(mail.content_type).to be_nil end it "should set the content type to multipart/alternative if you assign html and text parts" do mail = Mail.new mail.text_part = Mail::Part.new do body "This is Text" end mail.html_part = Mail::Part.new do content_type "text/html; charset=US-ASCII" body "This is HTML" end expect(mail.to_s).to match(%r|Content-Type: multipart/alternative;\s+boundary="#{mail.boundary}"|) end it "should set the content type to multipart/alternative if you declare html and text parts" do mail = Mail.new mail.text_part { } mail.html_part { } expect(mail.to_s).to match(%r|Content-Type: multipart/alternative;\s+boundary="#{mail.boundary}"|) end it "should not set the content type to multipart/alternative if you declare an html part but not a text part" do mail = Mail.new mail.html_part { } expect(mail.to_s).not_to match(%r|Content-Type: multipart/alternative;\s+boundary="#{mail.boundary}"|) end it "should not set the content type to multipart/alternative if you declare a text part but not an html part" do mail = Mail.new mail.text_part { } expect(mail.to_s).not_to match(%r|Content-Type: multipart/alternative;\s+boundary="#{mail.boundary}"|) end it "should add the end boundary tag" do mail = Mail.new mail.text_part = Mail::Part.new do body "This is Text" end mail.html_part = Mail::Part.new do content_type "text/html; charset=US-ASCII" body "This is HTML" end expect(mail.to_s).to match(%r|#{mail.boundary}--|) end it "should not put message-ids into parts" do mail = Mail.new('Subject: FooBar') mail.text_part = Mail::Part.new do body "This is Text" end mail.html_part = Mail::Part.new do content_type "text/html; charset=US-ASCII" body "This is HTML" end mail.to_s expect(mail.parts.first.message_id).to be_nil expect(mail.parts.last.message_id).to be_nil end it "should create a multipart/alternative email through a block" do mail = Mail.new do to 'nicolas.fouche@gmail.com' from 'Mikel Lindsaar ' subject 'First multipart email sent with Mail' text_part do body 'This is plain text' end html_part do content_type 'text/html; charset=UTF-8' body '

    This is HTML

    ' end end expect(mail).to be_multipart expect(mail.parts.length).to eq 2 expect(mail.text_part.class).to eq Mail::Part expect(mail.text_part.body.to_s).to eq 'This is plain text' expect(mail.html_part.class).to eq Mail::Part expect(mail.html_part.body.to_s).to eq '

    This is HTML

    ' end it "should detect an html_part in an existing email" do m = Mail.new(:content_type => 'multipart/alternative') m.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT')) m.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT')) expect(m.text_part.body.decoded).to eq 'PLAIN TEXT' expect(m.html_part.body.decoded).to eq 'HTML TEXT' end it "should detect a text_part in an existing email with plain text attachment" do m = Mail.new(:content_type => 'multipart/alternative') m.add_file(fixture('attachments', 'てすと.txt')) m.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT')) m.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT')) expect(m.text_part.body.decoded).to eq 'PLAIN TEXT' expect(m.html_part.body.decoded).to eq 'HTML TEXT' end it "should detect an html_part in a multi level mime email" do m = Mail.new(:content_type => 'multipart/mixed') a = Mail::Part.new(:content_type => 'text/script', :body => '12345') p = Mail::Part.new(:content_type => 'multipart/alternative') p.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT')) p.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT')) m.add_part(p) m.add_part(a) expect(m.text_part.body.decoded).to eq 'PLAIN TEXT' expect(m.html_part.body.decoded).to eq 'HTML TEXT' end it "should only the first part on a stupidly overly complex email" do m = Mail.new(:content_type => 'multipart/mixed') a = Mail::Part.new(:content_type => 'text/script', :body => '12345') m.add_part(a) b = Mail::Part.new(:content_type => 'multipart/alternative') b.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML TEXT')) b.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN TEXT')) m.add_part(b) c = Mail::Part.new(:content_type => 'multipart/alternative') c.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML 2 TEXT')) c.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN 2 TEXT')) b.add_part(c) d = Mail::Part.new(:content_type => 'multipart/alternative') d.add_part(Mail::Part.new(:content_type => 'text/html', :body => 'HTML 3 TEXT')) d.add_part(Mail::Part.new(:content_type => 'text/plain', :body => 'PLAIN 3 TEXT')) b.add_part(d) expect(m.text_part.body.decoded).to eq 'PLAIN TEXT' expect(m.html_part.body.decoded).to eq 'HTML TEXT' end end describe "finding attachments" do it "should return an array of attachments" do mail = Mail.read(fixture('emails', 'attachment_emails', 'attachment_content_disposition.eml')) expect(mail.attachments.length).to eq 1 expect(mail.attachments.first.filename).to eq 'hello.rb' end it "should return an array of attachments" do mail = Mail.read(fixture('emails', 'mime_emails', 'raw_email_with_nested_attachment.eml')) expect(mail.attachments.length).to eq 2 expect(mail.attachments[0].filename).to eq 'byo-ror-cover.png' expect(mail.attachments[1].filename).to eq 'smime.p7s' end end describe "adding a file attachment" do it "should set to multipart/mixed if a text part and you add an attachment" do mail = Mail::Message.new mail.text_part { body("log message goes here") } mail.add_file(fixture('attachments', 'test.png')) expect(mail.mime_type).to eq 'multipart/mixed' end it "should set to multipart/mixed if you add an attachment and then a text part" do mail = Mail::Message.new mail.add_file(fixture('attachments', 'test.png')) mail.text_part { body("log message goes here") } expect(mail.mime_type).to eq 'multipart/mixed' end it "should add a part given a filename" do mail = Mail::Message.new mail.add_file(fixture('attachments', 'test.png')) expect(mail.parts.length).to eq 1 # First part is an empty text body end it "should give the part the right content type" do mail = Mail::Message.new mail.add_file(fixture('attachments', 'test.png')) expect(mail.parts.first[:content_type].content_type).to eq 'image/png' end it "should return attachment objects" do mail = Mail::Message.new mail.add_file(fixture('attachments', 'test.png')) expect(mail.attachments.first.class).to eq Mail::Part end it "should be return an aray of attachments" do mail = Mail::Message.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') add_file fixture('attachments', 'test.jpg') add_file fixture('attachments', 'test.pdf') add_file fixture('attachments', 'test.zip') end expect(mail.attachments.length).to eq 4 mail.attachments.each { |a| expect(a.class).to eq Mail::Part } end it "should return the filename of each attachment" do mail = Mail::Message.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') add_file fixture('attachments', 'test.jpg') add_file fixture('attachments', 'test.pdf') add_file fixture('attachments', 'test.zip') end expect(mail.attachments[0].filename).to eq 'test.png' expect(mail.attachments[1].filename).to eq 'test.jpg' expect(mail.attachments[2].filename).to eq 'test.pdf' expect(mail.attachments[3].filename).to eq 'test.zip' end it "should return the type/subtype of each attachment" do mail = Mail::Message.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') add_file fixture('attachments', 'test.jpg') add_file fixture('attachments', 'test.pdf') add_file fixture('attachments', 'test.zip') end expect(mail.attachments[0].mime_type).to eq 'image/png' expect(mail.attachments[1].mime_type).to eq 'image/jpeg' expect(mail.attachments[2].mime_type).to eq 'application/pdf' expect(mail.attachments[3].mime_type).to eq 'application/zip' end it "should return the content of each attachment" do mail = Mail::Message.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') add_file fixture('attachments', 'test.jpg') add_file fixture('attachments', 'test.pdf') add_file fixture('attachments', 'test.zip') end if RUBY_VERSION >= '1.9' tripped = mail.attachments[0].decoded original = File.open(fixture('attachments', 'test.png'), 'rb', &:read) expect(tripped).to eq original tripped = mail.attachments[1].decoded original = File.open(fixture('attachments', 'test.jpg'), 'rb', &:read) expect(tripped).to eq original tripped = mail.attachments[2].decoded original = File.open(fixture('attachments', 'test.pdf'), 'rb', &:read) expect(tripped).to eq original tripped = mail.attachments[3].decoded original = File.open(fixture('attachments', 'test.zip'), 'rb', &:read) expect(tripped).to eq original else expect(mail.attachments[0].decoded).to eq File.read(fixture('attachments', 'test.png')) expect(mail.attachments[1].decoded).to eq File.read(fixture('attachments', 'test.jpg')) expect(mail.attachments[2].decoded).to eq File.read(fixture('attachments', 'test.pdf')) expect(mail.attachments[3].decoded).to eq File.read(fixture('attachments', 'test.zip')) end end it "should allow you to send in file data instead of having to read it" do file_data = File.open(fixture('attachments', 'test.png'), 'rb', &:read) mail = Mail::Message.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file(:filename => 'test.png', :content => file_data) end if RUBY_VERSION >= '1.9' tripped = mail.attachments[0].decoded original = File.open(fixture('attachments', 'test.png'), 'rb', &:read) expect(tripped).to eq original else expect(mail.attachments[0].decoded).to eq File.open(fixture('attachments', 'test.png'), 'rb', &:read) end end it "should support :mime_type option" do mail = Mail::Message.new mail.add_file(:filename => 'test.png', :content => 'a', :mime_type=>'text/plain') expect(mail.attachments.first.content_type).to eq 'text/plain' end it "should be able to add a body before adding a file" do m = Mail.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' body "Attached" add_file fixture('attachments', 'test.png') end expect(m.attachments.length).to eq 1 expect(m.parts.length).to eq 2 expect(m.parts[0].body).to eq "Attached" expect(m.parts[1].filename).to eq "test.png" end it "should allow you to add a body as text part if you have added a file" do m = Mail.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') body "Attached" end expect(m.parts.length).to eq 2 expect(m.parts.first[:content_type].content_type).to eq 'image/png' expect(m.parts.last[:content_type].content_type).to eq 'text/plain' end it "should allow you to add a body as text part if you have added a file and not truncate after newlines - issue 208" do m = Mail.new do from 'mikel@from.lindsaar.net' subject 'Hello there Mikel' to 'mikel@to.lindsaar.net' add_file fixture('attachments', 'test.png') body "First Line\n\nSecond Line\n\nThird Line\n\n" #Note: trailing \n\n is stripped off by Mail::Part initialization end expect(m.parts.length).to eq 2 expect(m.parts.first[:content_type].content_type).to eq 'image/png' expect(m.parts.last[:content_type].content_type).to eq 'text/plain' expect(m.parts.last.to_s).to match(/^First Line\r\n\r\nSecond Line\r\n\r\nThird Line/) end it "should not raise a warning if there is a charset defined and there are non ascii chars in the body" do body = "This is NOT plain text ASCII − かきくけこ" mail = Mail.new mail.body = body mail.charset = 'UTF-8' mail.add_file fixture('attachments', 'test.png') expect(STDERR).not_to receive(:puts) mail.to_s end end end mail-2.6.4/spec/mail/multibyte_spec.rb000066400000000000000000000006371267453234600177200ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "multibyte/chars" do Chars = Mail::Multibyte::Chars it "should upcase" do chars = Chars.new('Laurent, où sont les tests ?') expect(chars.upcase).to eq("LAURENT, OÙ SONT LES TESTS ?") end it "should downcase" do chars = Chars.new('VĚDA A VÝZKUM') expect(chars.downcase).to eq("věda a výzkum") end end mail-2.6.4/spec/mail/multipart_report_spec.rb000066400000000000000000000072441267453234600213170ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "multipart/report emails" do it "should know if it is a multipart report type" do mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml')) expect(mail).to be_multipart_report end describe "delivery-status reports" do it "should know if it is a deliver-status report" do mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml')) expect(mail).to be_delivery_status_report end it "should find its message/delivery-status part" do mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml')) expect(mail.delivery_status_part).not_to be_nil end it "should handle a report that has a human readable message/delivery-status" do mail = Mail.read(fixture('emails', 'multipart_report_emails', 'multipart_report_multiple_status.eml')) expect(mail).to be_bounced end describe "multipart reports with more than one address" do it "should not crash" do mail1 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce1.eml')) mail2 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce2.eml')) expect { mail1.bounced? }.not_to raise_error expect { mail2.bounced? }.not_to raise_error end it "should not know that a multi address email was bounced" do mail1 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce1.eml')) mail2 = Mail.read(fixture('emails', 'multipart_report_emails', 'multi_address_bounce2.eml')) expect(mail1).to be_bounced expect(mail2).to be_bounced end end describe "temporary failure" do before(:each) do @mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_422.eml')) end it "should be bounced" do expect(@mail).not_to be_bounced end it "should say action 'delayed'" do expect(@mail.action).to eq 'delayed' end it "should give a final recipient" do expect(@mail.final_recipient).to eq 'RFC822; fraser@oooooooo.com.au' end it "should give an error code" do expect(@mail.error_status).to eq '4.2.2' end it "should give a diagostic code" do expect(@mail.diagnostic_code).to eq 'SMTP; 452 4.2.2 ... Mailbox full' end it "should give a remote-mta" do expect(@mail.remote_mta).to eq 'DNS; mail.oooooooo.com.au' end it "should be retryable" do expect(@mail).to be_retryable end end describe "permanent failure" do before(:each) do @mail = Mail.read(fixture('emails', 'multipart_report_emails', 'report_530.eml')) end it "should be bounced" do expect(@mail).to be_bounced end it "should say action 'failed'" do expect(@mail.action).to eq 'failed' end it "should give a final recipient" do expect(@mail.final_recipient).to eq 'RFC822; edwin@zzzzzzz.com' end it "should give an error code" do expect(@mail.error_status).to eq '5.3.0' end it "should give a diagostic code" do expect(@mail.diagnostic_code).to eq 'SMTP; 553 5.3.0 ... Unknown E-Mail Address' end it "should give a remote-mta" do expect(@mail.remote_mta).to eq 'DNS; mail.zzzzzz.com' end it "should be retryable" do expect(@mail).not_to be_retryable end end end end mail-2.6.4/spec/mail/network/000077500000000000000000000000001267453234600160265ustar00rootroot00000000000000mail-2.6.4/spec/mail/network/delivery_methods/000077500000000000000000000000001267453234600213745ustar00rootroot00000000000000mail-2.6.4/spec/mail/network/delivery_methods/exim_spec.rb000066400000000000000000000153601267453234600237020ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "exim delivery agent" do before(:each) do # Reset all defaults back to original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true } end end it "should send an email using exim" do Mail.defaults do delivery_method :exim end mail = Mail.new do from 'roger@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "roger@test.lindsaar.net" --', '"marcel@test.lindsaar.net" "bob@test.lindsaar.net"', mail.encoded) mail.deliver! end describe "return path" do it "should send an email with a return-path using exim" do Mail.defaults do delivery_method :exim end mail = Mail.new do to "to@test.lindsaar.net" from "from@test.lindsaar.net" sender "sender@test.lindsaar.net" subject "Can't set the return-path" return_path "return@test.lindsaar.net" message_id "<1234@test.lindsaar.net>" body "body" end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "return@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should use the sender address is no return path is specified" do Mail.defaults do delivery_method :exim end mail = Mail.new do to "to@test.lindsaar.net" from "from@test.lindsaar.net" sender "sender@test.lindsaar.net" subject "Can't set the return-path" message_id "<1234@test.lindsaar.net>" body "body" end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "sender@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should use the from address is no return path or sender are specified" do Mail.defaults do delivery_method :exim end mail = Mail.new do to "to@test.lindsaar.net" from "from@test.lindsaar.net" subject "Can't set the return-path" message_id "<1234@test.lindsaar.net>" body "body" end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "from@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should escape the return path address" do Mail.defaults do delivery_method :exim end mail = Mail.new do to 'to@test.lindsaar.net' from '"from+suffix test"@test.lindsaar.net' subject 'Can\'t set the return-path' message_id '<1234@test.lindsaar.net>' body 'body' end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "\"from+suffix test\"@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should quote the destinations to ensure leading -hyphen doesn't confuse exim" do Mail.defaults do delivery_method :exim end mail = Mail.new do to '-hyphen@test.lindsaar.net' from 'from@test.lindsaar.net' end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', '-i -t -f "from@test.lindsaar.net" --', '"-hyphen@test.lindsaar.net"', mail.encoded) mail.deliver end end it "should still send an email if the settings have been set to nil" do Mail.defaults do delivery_method :exim, :arguments => nil end mail = Mail.new do from 'from@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', ' -f "from@test.lindsaar.net" --', '"marcel@test.lindsaar.net" "bob@test.lindsaar.net"', mail.encoded) mail.deliver! end it "should escape evil haxxor attemptes" do Mail.defaults do delivery_method :exim, :arguments => nil end mail = Mail.new do from '"foo\";touch /tmp/PWNED;\""@blah.com' to 'marcel@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Exim).to receive(:call).with('/usr/sbin/exim', " -f \"\\\"foo\\\\\\\"\\;touch /tmp/PWNED\\;\\\\\\\"\\\"@blah.com\" --", '"marcel@test.lindsaar.net"', mail.encoded) mail.deliver! end it "should raise an error if no sender is defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end end mail-2.6.4/spec/mail/network/delivery_methods/file_delivery_spec.rb000066400000000000000000000073431267453234600255640ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "SMTP Delivery Method" do before(:each) do # Reset all defaults back to an original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true } end end after(:each) do files = Dir.glob(File.join(Mail.delivery_method.settings[:location], '*')) files.each do |file| File.delete(file) end end describe "general usage" do tmpdir = File.expand_path('../../../../tmp/mail', __FILE__) it "should send an email to a file" do Mail.defaults do delivery_method :file, :location => tmpdir end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end delivery = File.join(Mail.delivery_method.settings[:location], 'marcel@amont.com') expect(File.read(delivery)).to eq mail.encoded end it "should send multiple emails to multiple files" do Mail.defaults do delivery_method :file, :location => tmpdir end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com, bob@me.com' subject 'invalid RFC2822' end delivery_one = File.join(Mail.delivery_method.settings[:location], 'marcel@amont.com') delivery_two = File.join(Mail.delivery_method.settings[:location], 'bob@me.com') expect(File.read(delivery_one)).to eq mail.encoded expect(File.read(delivery_two)).to eq mail.encoded end it "should only create files based on the addr_spec of the destination" do Mail.defaults do delivery_method :file, :location => tmpdir end Mail.deliver do from 'roger@moore.com' to '"Long, stupid email address" ' subject 'invalid RFC2822' end delivery = File.join(Mail.delivery_method.settings[:location], 'mikel@test.lindsaar.net') expect(File.exist?(delivery)).to be_truthy end it "should use the base name of the file name to prevent file system traversal" do Mail.defaults do delivery_method :file, :location => tmpdir end Mail.deliver do from 'roger@moore.com' to '../../../../../../../../../../../tmp/pwn' subject 'evil hacker' end delivery = File.join(Mail.delivery_method.settings[:location], 'pwn') expect(File.exist?(delivery)).to be_truthy end it "should raise an error if no sender is defined" do Mail.defaults do delivery_method :file, :location => tmpdir end expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do Mail.defaults do delivery_method :file, :location => tmpdir end expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end end end mail-2.6.4/spec/mail/network/delivery_methods/sendmail_spec.rb000066400000000000000000000164231267453234600245350ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "sendmail delivery agent" do before(:each) do # Reset all defaults back to original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true } end end it "should send an email using sendmail" do Mail.defaults do delivery_method :sendmail end mail = Mail.new do from 'roger@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "roger@test.lindsaar.net" --', '"marcel@test.lindsaar.net" "bob@test.lindsaar.net"', mail.encoded) mail.deliver! end it "should spawn a sendmail process" do Mail.defaults do delivery_method :sendmail end mail = Mail.new do from 'roger@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Sendmail).to receive(:popen).with('/usr/sbin/sendmail -i -f "roger@test.lindsaar.net" -- "marcel@test.lindsaar.net" "bob@test.lindsaar.net"') mail.deliver! end describe 'SMTP From' do it 'should explicitly pass an envelope From address to sendmail' do Mail.defaults do delivery_method :sendmail end mail = Mail.new do to "to@test.lindsaar.net" from "from@test.lindsaar.net" subject 'Can\'t set the return-path' message_id "<1234@test.lindsaar.net>" body "body" smtp_envelope_from 'smtp_from@test.lindsaar.net' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "smtp_from@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should escape the From address" do Mail.defaults do delivery_method :sendmail end mail = Mail.new do to 'to@test.lindsaar.net' from '"from+suffix test"@test.lindsaar.net' subject 'Can\'t set the return-path' message_id '<1234@test.lindsaar.net>' body 'body' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "\"from+suffix test\"@test.lindsaar.net" --', '"to@test.lindsaar.net"', mail.encoded) mail.deliver end end describe 'SMTP To' do it 'should explicitly pass envelope To addresses to sendmail' do Mail.defaults do delivery_method :sendmail end mail = Mail.new do to "to@test.lindsaar.net" from "from@test.lindsaar.net" subject 'Can\'t set the return-path' message_id "<1234@test.lindsaar.net>" body "body" smtp_envelope_to 'smtp_to@test.lindsaar.net' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "from@test.lindsaar.net" --', '"smtp_to@test.lindsaar.net"', mail.encoded) mail.deliver end it "should escape the To address" do Mail.defaults do delivery_method :sendmail end mail = Mail.new do to '"to+suffix test"@test.lindsaar.net' from 'from@test.lindsaar.net' subject 'Can\'t set the return-path' message_id '<1234@test.lindsaar.net>' body 'body' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "from@test.lindsaar.net" --', '"\"to+suffix test\"@test.lindsaar.net"', mail.encoded) mail.deliver end it "should quote the destinations to ensure leading -hyphen doesn't confuse sendmail" do Mail.defaults do delivery_method :sendmail end mail = Mail.new do to '-hyphen@test.lindsaar.net' from 'from@test.lindsaar.net' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', '-i -f "from@test.lindsaar.net" --', '"-hyphen@test.lindsaar.net"', mail.encoded) mail.deliver end end it "should still send an email if the settings have been set to nil" do Mail.defaults do delivery_method :sendmail, :arguments => nil end mail = Mail.new do from 'from@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', ' -f "from@test.lindsaar.net" --', '"marcel@test.lindsaar.net" "bob@test.lindsaar.net"', mail.encoded) mail.deliver! end it "should escape evil haxxor attemptes" do Mail.defaults do delivery_method :sendmail, :arguments => nil end mail = Mail.new do from '"foo\";touch /tmp/PWNED;\""@blah.com' to '"foo\";touch /tmp/PWNED;\""@blah.com' subject 'invalid RFC2822' end expect(Mail::Sendmail).to receive(:call).with('/usr/sbin/sendmail', " -f \"\\\"foo\\\\\\\"\\;touch /tmp/PWNED\\;\\\\\\\"\\\"@blah.com\" --", %("\\\"foo\\\\\\\"\\;touch /tmp/PWNED\\;\\\\\\\"\\\"@blah.com"), mail.encoded) mail.deliver! end it "should raise an error if no sender is defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end end mail-2.6.4/spec/mail/network/delivery_methods/smtp_connection_spec.rb000066400000000000000000000043701267453234600261410ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "SMTP Delivery Method" do before(:each) do Mail.defaults do smtp = Net::SMTP.start('127.0.0.1', 25) delivery_method :smtp_connection, :connection => smtp end end after(:each) do Mail.delivery_method.smtp.finish end it "should send an email using open SMTP connection" do mail = Mail.deliver do from 'roger@test.lindsaar.net' to 'marcel@test.lindsaar.net, bob@test.lindsaar.net' subject 'invalid RFC2822' smtp_envelope_from 'smtp_from' smtp_envelope_to 'smtp_to' end expect(MockSMTP.deliveries[0][0]).to eq mail.encoded expect(MockSMTP.deliveries[0][1]).to eq 'smtp_from' expect(MockSMTP.deliveries[0][2]).to eq %w(smtp_to) end it "should be able to return actual SMTP protocol response" do Mail.defaults do smtp = Net::SMTP.start('127.0.0.1', 25) delivery_method :smtp_connection, :connection => smtp, :port => 587, :return_response => true end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end response = mail.deliver! expect(response).to eq 'OK' end it "should raise an error if no sender is defined" do Mail.defaults do smtp = Net::SMTP.start('127.0.0.1', 25) delivery_method :smtp_connection, :connection => smtp, :port => 587, :return_response => true end expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do Mail.defaults do smtp = Net::SMTP.start('127.0.0.1', 25) delivery_method :smtp_connection, :connection => smtp, :port => 587, :return_response => true end expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end end mail-2.6.4/spec/mail/network/delivery_methods/smtp_spec.rb000066400000000000000000000141471267453234600237250ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "SMTP Delivery Method" do before(:each) do # Reset all defaults back to original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true, :openssl_verify_mode => nil, :tls => nil, :ssl => nil } end MockSMTP.clear_deliveries end describe "general usage" do it "should send emails from given settings" do mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' smtp_envelope_from 'smtp_from' smtp_envelope_to 'smtp_to' end expect(MockSMTP.deliveries[0][0]).to eq mail.encoded expect(MockSMTP.deliveries[0][1]).to eq 'smtp_from' expect(MockSMTP.deliveries[0][2]).to eq %w(smtp_to) end it "should be able to send itself" do mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end mail.deliver! expect(MockSMTP.deliveries[0][0]).to eq mail.encoded expect(MockSMTP.deliveries[0][1]).to eq mail.from[0] expect(MockSMTP.deliveries[0][2]).to eq mail.destinations end it "should be able to return actual SMTP protocol response" do Mail.defaults do delivery_method :smtp, :address => 'smtp.mockup.com', :port => 587, :return_response => true end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end response = mail.deliver! expect(response).to eq 'OK' end end describe "enabling tls" do def redefine_verify_none(new_value) OpenSSL::SSL.send(:remove_const, :VERIFY_NONE) OpenSSL::SSL.send(:const_set, :VERIFY_NONE, new_value) end it "should use OpenSSL::SSL::VERIFY_NONE if a context" do # config can't be setup until redefined redefine_verify_none(OpenSSL::SSL::SSLContext.new) Mail.defaults do delivery_method :smtp, :address => 'smtp.mockup.com', :port => 587 end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end expect { mail.deliver! }.not_to raise_error end it "should ignore OpenSSL::SSL::VERIFY_NONE if it is 0" do # config can't be setup until redefined redefine_verify_none(0) Mail.defaults do delivery_method :smtp, :address => 'smtp.mockup.com', :port => 587 end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end expect { mail.deliver! }.not_to raise_error end end describe "enabling ssl" do def redefine_verify_none(new_value) OpenSSL::SSL.send(:remove_const, :VERIFY_NONE) OpenSSL::SSL.send(:const_set, :VERIFY_NONE, new_value) end it "should use OpenSSL::SSL::VERIFY_NONE if a context" do # config can't be setup until redefined redefine_verify_none(OpenSSL::SSL::SSLContext.new) Mail.defaults do delivery_method :smtp, :address => 'smtp.mockup.com', :port => 587, :tls => true end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end expect { mail.deliver! }.not_to raise_error end it "should ignore OpenSSL::SSL::VERIFY_NONE if it is 0" do # config can't be setup until redefined redefine_verify_none(0) Mail.defaults do delivery_method :smtp, :address => 'smtp.mockup.com', :port => 587, :tls => true end mail = Mail.deliver do from 'roger@moore.com' to 'marcel@amont.com' subject 'invalid RFC2822' end expect { mail.deliver! }.not_to raise_error end end describe "SMTP Envelope" do it "uses the envelope From and To addresses" do Mail.deliver do to "to@someemail.com" from "from@someemail.com" message_id "<1234@someemail.com>" body "body" smtp_envelope_to "smtp_to@someemail.com" smtp_envelope_from "smtp_from@someemail.com" end expect(MockSMTP.deliveries[0][1]).to eq 'smtp_from@someemail.com' expect(MockSMTP.deliveries[0][2]).to eq %w(smtp_to@someemail.com) end it "supports the null sender in the envelope from address" do Mail.deliver do to "to@someemail.com" from "from@someemail.com" message_id "<1234@someemail.com>" body "body" smtp_envelope_to "smtp_to@someemail.com" smtp_envelope_from Mail::Constants::NULL_SENDER end expect(MockSMTP.deliveries[0][1]).to eq '<>' expect(MockSMTP.deliveries[0][2]).to eq %w(smtp_to@someemail.com) end it "should raise if there is no envelope From address" do expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end end end mail-2.6.4/spec/mail/network/delivery_methods/test_mailer_spec.rb000066400000000000000000000050751267453234600252520ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "Mail::TestMailer" do before(:each) do # Reset all defaults back to original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true } Mail::TestMailer.deliveries.clear end end it "should have no deliveries when first initiated" do Mail.defaults do delivery_method :test end expect(Mail::TestMailer.deliveries).to be_empty end it "should deliver an email to the Mail::TestMailer.deliveries array" do Mail.defaults do delivery_method :test end mail = Mail.new do to 'mikel@me.com' from 'you@you.com' subject 'testing' body 'hello' end mail.deliver expect(Mail::TestMailer.deliveries.length).to eq 1 expect(Mail::TestMailer.deliveries.first).to eq mail end it "should clear the deliveries when told to" do Mail.defaults do delivery_method :test end mail = Mail.new do to 'mikel@me.com' from 'you@you.com' subject 'testing' body 'hello' end mail.deliver expect(Mail::TestMailer.deliveries.length).to eq 1 Mail::TestMailer.deliveries.clear expect(Mail::TestMailer.deliveries).to be_empty end it "should raise an error if no sender is defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do to "to@somemail.com" subject "Email with no sender" body "body" end end.to raise_error('An SMTP From address is required to send a message. Set the message smtp_envelope_from, return_path, sender, or from address.') end it "should raise an error if no recipient if defined" do Mail.defaults do delivery_method :test end expect do Mail.deliver do from "from@somemail.com" subject "Email with no recipient" body "body" end end.to raise_error('An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.') end it "should save settings passed to initialize" do expect(Mail::TestMailer.new(:setting => true).settings).to include(:setting => true) end end mail-2.6.4/spec/mail/network/retriever_methods/000077500000000000000000000000001267453234600215605ustar00rootroot00000000000000mail-2.6.4/spec/mail/network/retriever_methods/imap_spec.rb000066400000000000000000000207351267453234600240540ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "IMAP Retriever" do before(:each) do Mail.defaults do retriever_method :imap, { :address => 'localhost', :port => 993, :user_name => nil, :password => nil, :enable_ssl => true } end end describe "find with and without block" do it "should find all emails with a given block" do expect(MockIMAP).to be_disconnected messages = [] Mail.all do |message| messages << message end expect(messages.map { |m| m.raw_source }.sort).to eq MockIMAP.examples.map { |m| m.attr['RFC822']}.sort expect(MockIMAP).to be_disconnected end it "should get all emails without a given block" do expect(MockIMAP).to be_disconnected messages = Mail.all expect(messages.map { |m| m.raw_source }.sort).to eq MockIMAP.examples.map { |m| m.attr['RFC822']}.sort expect(MockIMAP).to be_disconnected end it "should get all emails and yield the imap, uid, and email when given a block of arity 3" do expect(MockIMAP).to be_disconnected messages = [] uids = [] Mail.all do |message, imap, uid| expect(MockIMAP).to be === imap messages << message uids << uid end expect(messages.map { |m| m.raw_source }.sort).to eq MockIMAP.examples.map { |m| m.attr['RFC822']}.sort expect(uids.sort).to eq MockIMAP.examples.map { |m| m.number }.sort expect(MockIMAP).to be_disconnected end end describe "find and options" do it "should handle the :count option" do messages = Mail.find(:count => :all, :what => :last, :order => :asc) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] } message = Mail.find(:count => 1, :what => :last) expect(message.raw_source).to eq MockIMAP.examples.last.attr['RFC822'] messages = Mail.find(:count => 2, :what => :last, :order => :asc) expect(messages[0..1].map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] }[-2..-1] end it "should handle the :what option" do messages = Mail.find(:count => :all, :what => :last) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] } messages = Mail.find(:count => 2, :what => :first, :order => :asc) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] }[0..1] end it "should handle the :order option" do messages = Mail.find(:order => :desc, :count => 5, :what => :last) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] }[-5..-1].reverse messages = Mail.find(:order => :asc, :count => 5, :what => :last) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] }[-5..-1] end it "should handle the :mailbox option" do Mail.find(:mailbox => 'SOME-RANDOM-MAILBOX') expect(MockIMAP.mailbox).to eq 'SOME-RANDOM-MAILBOX' end it "should handle the :uid option" do messages = Mail.find(:uid => 1) expect(messages[0].raw_source).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] }[1] end it "should find the last 10 messages by default" do messages = Mail.find expect(messages.size).to eq 10 end it "should search the mailbox 'INBOX' by default" do Mail.find expect(MockIMAP.mailbox).to eq 'INBOX' end it "should handle the delete_after_find_option" do Mail.find(:delete_after_find => false) expect(MockIMAP.examples.size).to eq 20 Mail.find(:delete_after_find => true) expect(MockIMAP.examples.size).to eq 10 Mail.find(:delete_after_find => true) { |message| } expect(MockIMAP.examples.size).to eq 10 end it "should handle the find_and_delete method" do Mail.find_and_delete(:count => 15) expect(MockIMAP.examples.size).to eq 5 end end describe "last" do it "should find the last received messages" do messages = Mail.last(:count => 5) expect(messages).to be_instance_of(Array) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822']}[-5..-1] end it "should find the last received message" do message = Mail.last expect(message.raw_source).to eq MockIMAP.examples.last.attr['RFC822'] end end describe "first" do it "should find the first received messages" do messages = Mail.first(:count => 5) expect(messages).to be_instance_of(Array) expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822']}[0..4] end it "should find the first received message" do message = Mail.first expect(message.raw_source).to eq MockIMAP.examples.first.attr['RFC822'] end end describe "all" do it "should find all messages" do messages = Mail.all expect(messages.size).to eq MockIMAP.examples.size expect(messages.map { |m| m.raw_source }).to eq MockIMAP.examples.map { |m| m.attr['RFC822'] } end end describe "delete_all" do it "should delete all messages" do Mail.all expect(Net::IMAP).to receive(:encode_utf7).once Mail.delete_all expect(MockIMAP.examples.size).to eq 0 end end describe "connection" do it "should raise an Error if no block is given" do expect { Mail.connection { |m| raise ArgumentError.new } }.to raise_error(ArgumentError) end it "should yield the connection object to the given block" do Mail.connection do |connection| expect(connection).to be_an_instance_of(MockIMAP) end end end describe "handling of options" do it "should set default options" do retrievable = Mail::IMAP.new({}) options = retrievable.send(:validate_options, {}) expect(Mail::Utilities.blank?(options[:count])).not_to be_truthy expect(options[:count]).to eq 10 expect(Mail::Utilities.blank?(options[:order])).not_to be_truthy expect(options[:order]).to eq :asc expect(Mail::Utilities.blank?(options[:what])).not_to be_truthy expect(options[:what]).to eq :first expect(Mail::Utilities.blank?(options[:mailbox])).not_to be_truthy expect(options[:mailbox]).to eq 'INBOX' end it "should not replace given configuration" do retrievable = Mail::IMAP.new({}) options = retrievable.send(:validate_options, { :mailbox => 'some/mail/box', :count => 2, :order => :asc, :what => :first }) expect(Mail::Utilities.blank?(options[:count])).not_to be_truthy expect(options[:count]).to eq 2 expect(Mail::Utilities.blank?(options[:order])).not_to be_truthy expect(options[:order]).to eq :asc expect(Mail::Utilities.blank?(options[:what])).not_to be_truthy expect(options[:what]).to eq :first expect(Mail::Utilities.blank?(options[:mailbox])).not_to be_truthy expect(options[:mailbox]).to eq 'some/mail/box' end it "should ensure utf7 conversion for mailbox names" do retrievable = Mail::IMAP.new({}) expect(Net::IMAP).to receive(:encode_utf7) { 'UTF7_STRING' } options = retrievable.send(:validate_options, { :mailbox => 'UTF8_STRING' }) expect(options[:mailbox]).to eq 'UTF7_STRING' end end describe "error handling" do it "should finish the IMAP connection if an exception is raised" do expect(MockIMAP).to be_disconnected expect { Mail.all { |m| raise ArgumentError.new } }.to raise_error(ArgumentError) expect(MockIMAP).to be_disconnected end end describe "authentication mechanism" do before(:each) do @imap = MockIMAP.new allow(MockIMAP).to receive(:new).and_return(@imap) end it "should be login by default" do expect(@imap).not_to receive(:authenticate) expect(@imap).to receive(:login).with('foo', 'secret') Mail.defaults do retriever_method :imap, {:user_name => 'foo', :password => 'secret'} end Mail.find end it "should be changeable" do expect(@imap).to receive(:authenticate).with('CRAM-MD5', 'foo', 'secret') expect(@imap).not_to receive(:login) Mail.defaults do retriever_method :imap, {:authentication => 'CRAM-MD5', :user_name => 'foo', :password => 'secret'} end Mail.find end end end mail-2.6.4/spec/mail/network/retriever_methods/pop3_spec.rb000066400000000000000000000152001267453234600237760ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "POP3 Retriever" do before(:each) do # Reset all defaults back to original state Mail.defaults do retriever_method :pop3, { :address => "localhost", :port => 995, :user_name => nil, :password => nil, :enable_ssl => true } end end describe "find with and without block" do it "should find all emails with a given block" do expect(MockPOP3).not_to be_started messages = [] Mail.all do |message| messages << message end expect(messages.map { |m| m.raw_source }.sort).to eq MockPOP3.popmails.map { |p| p.pop }.sort expect(MockPOP3).not_to be_started end it "should get all emails without a given block" do expect(MockPOP3).not_to be_started messages = [] Mail.all do |message| messages << message end expect(messages.map { |m| m.raw_source }.sort).to eq MockPOP3.popmails.map { |p| p.pop }.sort expect(MockPOP3).not_to be_started end end describe "find and options" do it "should handle the :count option" do messages = Mail.find(:count => :all, :what => :last, :order => :asc) expect(messages.map { |m| m.raw_source }.sort).to eq MockPOP3.popmails.map { |p| p.pop } message = Mail.find(:count => 1, :what => :last) expect(message.raw_source).to eq MockPOP3.popmails.map { |p| p.pop }.last messages = Mail.find(:count => 2, :what => :last, :order => :asc) expect(messages[0..1].collect {|m| m.raw_source}).to eq MockPOP3.popmails.map { |p| p.pop }[-2..-1] end it "should handle the :what option" do messages = Mail.find(:count => :all, :what => :last) expect(messages.map { |m| m.raw_source }.sort).to eq MockPOP3.popmails.map { |p| p.pop } messages = Mail.find(:count => 2, :what => :first, :order => :asc) expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop }[0..1] end it "should handle the :order option" do messages = Mail.find(:order => :desc, :count => 5, :what => :last) expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop }[-5..-1].reverse messages = Mail.find(:order => :asc, :count => 5, :what => :last) expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop }[-5..-1] end it "should find the last 10 messages by default" do messages = Mail.find expect(messages.size).to eq 10 end it "should handle the delete_after_find option" do Mail.find(:delete_after_find => false) MockPOP3.popmails.each { |message| expect(message).not_to be_deleted } Mail.find(:delete_after_find => true) MockPOP3.popmails.first(10).each { |message| expect(message).to be_deleted } MockPOP3.popmails.last(10).each { |message| expect(message).not_to be_deleted } Mail.find(:delete_after_find => true) { |message| } MockPOP3.popmails.first(10).each { |message| expect(message).to be_deleted } MockPOP3.popmails.last(10).each { |message| expect(message).not_to be_deleted } end it "should handle the find_and_delete method" do Mail.find_and_delete(:count => 15) MockPOP3.popmails.first(15).each { |message| expect(message).to be_deleted } MockPOP3.popmails.last(5).each { |message| expect(message).not_to be_deleted } end end describe "last" do it "should find the last received messages" do messages = Mail.last(:count => 5) expect(messages).to be_instance_of(Array) expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop }[-5..-1] end it "should find the last received message" do message = Mail.last expect(message).to be_instance_of(Mail::Message) expect(message.raw_source).to eq MockPOP3.popmails.last.pop end end describe "first" do it "should find the first received messages" do messages = Mail.first(:count => 5) expect(messages).to be_instance_of(Array) expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop }[0..4] end it "should find the first received message" do message = Mail.first expect(message).to be_instance_of(Mail::Message) expect(message.raw_source).to eq MockPOP3.popmails.first.pop end end describe "all" do it "should find all messages" do messages = Mail.all expect(messages.size).to eq MockPOP3.popmails.size expect(messages.map { |m| m.raw_source }).to eq MockPOP3.popmails.map { |p| p.pop } end end describe "delete_all" do it "should delete all mesages" do Mail.all Mail.delete_all expect(MockPOP3.popmails.size).to eq 0 end end describe "connection" do it "should raise an Error if no block is given" do expect { Mail.connection { |m| raise ArgumentError.new } }.to raise_error(ArgumentError) end it "should yield the connection object to the given block" do Mail.connection do |connection| expect(connection).to be_an_instance_of(MockPOP3) end end end describe "handling of options" do it "should set default options" do retrievable = Mail::POP3.new({}) options = retrievable.send(:validate_options, {}) expect(Mail::Utilities.blank?(options[:count])).not_to be_truthy expect(options[:count]).to eq 10 expect(Mail::Utilities.blank?(options[:order])).not_to be_truthy expect(options[:order]).to eq :asc expect(Mail::Utilities.blank?(options[:what])).not_to be_truthy expect(options[:what]).to eq :first end it "should not replace given configuration" do retrievable = Mail::POP3.new({}) options = retrievable.send(:validate_options, { :count => 2, :order => :asc, :what => :first }) expect(Mail::Utilities.blank?(options[:count])).not_to be_truthy expect(options[:count]).to eq 2 expect(Mail::Utilities.blank?(options[:order])).not_to be_truthy expect(options[:order]).to eq :asc expect(Mail::Utilities.blank?(options[:what])).not_to be_truthy expect(options[:what]).to eq :first end end describe "error handling" do it "should finish the POP3 connection is an exception is raised" do expect(MockPOP3).not_to be_started expect do Mail.all { |m| raise ArgumentError.new } end.to raise_error(ArgumentError) expect(MockPOP3).not_to be_started end end end mail-2.6.4/spec/mail/network/retriever_methods/test_retriever_spec.rb000066400000000000000000000063701267453234600261730ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe "Test Retriever" do before(:each) do Mail.defaults do retriever_method :test end end it "should have no emails initially" do expect(Mail.all).to be_empty end describe "all" do before do @emails = populate(15) end it "should return all emails without a block" do expect(Mail.all).to eq @emails end it "should return all emails with a block" do messages = [] Mail.all { |message| messages << message } expect(messages).to eq @emails end end describe "find" do before do @emails = populate(15) end it "should handle the :count option" do expect(Mail.find(:count => :all)).to eq @emails expect(Mail.find(:count => 1)).to eq @emails.first expect(Mail.find(:count => 5)).to eq @emails[0, 5] end it "should handle the :order option" do expect(Mail.find(:order => :asc)).to eq @emails expect(Mail.find(:order => :desc)).to eq @emails.reverse end it "should handle the :what option" do expect(Mail.find(:what => :first)).to eq @emails expect(Mail.find(:what => :first, :count => 5)).to eq @emails[0, 5] expect(Mail.find(:what => :last)).to eq @emails expect(Mail.find(:what => :last, :count => 5)).to eq @emails[10, 5] end it "should handle the both of :what and :order option with :count => 1" do expect(Mail.find(:count => 1, :what => :last, :order => :asc)).to eq @emails.last expect(Mail.find(:count => 1, :what => :first, :order => :desc)).to eq @emails.first end it "should handle the :delete_after_find option" do expect(Mail.find(:delete_after_find => false)).to eq @emails expect(Mail.find(:delete_after_find => false)).to eq @emails expect(Mail.find(:delete_after_find => true)).to eq @emails expect(Mail.find(:delete_after_find => false)).to be_empty end it "should handle the both of :delete_after_find and :count option" do expect do expect(Mail.find(:count => 5, :delete_after_find => true).size).to eq(5) end.to change { Mail.all.size }.by(-5) expect do expect(Mail.find(:count => 5, :delete_after_find => true).size).to eq(5) end.to change { Mail.all.size }.by(-5) end it "should handle the both of :count and :delete_after_find option" do 15.times do |idx| expect do expect(Mail.find(:count => 1, :delete_after_find => true)).to eq @emails[idx] end.to change { Mail.all.size }.by(-1) end expect(Mail.find(:count => 1, :delete_after_find => true)).to be_empty end it "should handle the :delete_after_find option with messages marked not for delete" do i = 0 messages = [] Mail.find(:delete_after_find => true) do |message| if i % 2 message.mark_for_delete = false messages << message end i += 1 end expect(Mail.all).to eq messages end end private def populate(count) (1..count).map do Mail.new do to 'mikel@me.com' from 'you@you.com' subject 'testing' body 'hello' end end.tap do |emails| Mail::TestRetriever.emails = emails.dup end end end mail-2.6.4/spec/mail/network_spec.rb000066400000000000000000000327371267453234600174010ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' class MyDelivery; def initialize(settings); end; end class MyRetriever; def initialize(settings); end; end describe "Mail" do before(:each) do # Reset all defaults back to original state Mail.defaults do delivery_method :smtp, { :address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true } retriever_method :pop3, { :address => "localhost", :port => 110, :user_name => nil, :password => nil, :enable_ssl => true } end end describe "default delivery and retriever methods" do it "should set the delivery method" do Mail.defaults do delivery_method :smtp end expect(Mail.delivery_method.class).to eq Mail::SMTP end it "should default to settings for smtp" do expect(Mail.delivery_method.class).to eq Mail::SMTP expect(Mail.delivery_method.settings).to eql({:address => "localhost", :port => 25, :domain => 'localhost.localdomain', :user_name => nil, :password => nil, :authentication => nil, :enable_starttls_auto => true, :openssl_verify_mode => nil, :ssl => nil, :tls => nil }) end it "should set the retriever method" do Mail.defaults do retriever_method :pop3 end expect(Mail.retriever_method.class).to eq Mail::POP3 end it "should default to settings for pop3" do expect(Mail.retriever_method.class).to eq Mail::POP3 expect(Mail.retriever_method.settings).to eql({:address => "localhost", :port => 110, :user_name => nil, :password => nil, :authentication => nil, :enable_ssl => true }) end it "should allow us to overwrite anything we need on SMTP" do Mail.defaults do delivery_method :smtp, :port => 999 end expect(Mail.delivery_method.settings[:address]).to eq 'localhost' expect(Mail.delivery_method.settings[:port]).to eq 999 end it "should allow us to overwrite anything we need on POP3" do Mail.defaults do retriever_method :pop3, :address => 'foo.bar.com' end expect(Mail.retriever_method.settings[:address]).to eq 'foo.bar.com' expect(Mail.retriever_method.settings[:port]).to eq 110 end it "should allow you to pass in your own delivery method" do Mail.defaults do delivery_method MyDelivery end expect(Mail.delivery_method.class).to eq MyDelivery end it "should ask the custom delivery agent for its settings" do mock_my_delivery = double(MyDelivery) expect(mock_my_delivery).to receive(:settings).and_return({:these_are => :settings}) expect(MyDelivery).to receive(:new).and_return(mock_my_delivery) Mail.defaults do delivery_method MyDelivery end expect(Mail.delivery_method.settings).to eql({:these_are => :settings}) end it "should allow you to pass in your own retriever method" do Mail.defaults do retriever_method MyRetriever end expect(Mail.retriever_method.class).to eq MyRetriever end it "should ask the custom retriever agent for its settings" do mock_my_retriever = double(MyRetriever) expect(mock_my_retriever).to receive(:settings).and_return({:these_are => :settings}) expect(MyRetriever).to receive(:new).and_return(mock_my_retriever) Mail.defaults do retriever_method MyRetriever end expect(Mail.retriever_method.settings).to eql({:these_are => :settings}) end end describe "instance delivery methods" do it "should copy the defaults defined by Mail.defaults" do mail = Mail.new expect(mail.delivery_method.class).to eq Mail::SMTP end it "should be able to change the delivery_method" do mail = Mail.new mail.delivery_method :file expect(mail.delivery_method.class).to eq Mail::FileDelivery end it "should be able to change the delivery_method and pass in settings" do mail = Mail.new tmpdir = File.expand_path('../../../tmp/mail', __FILE__) mail.delivery_method :file, :location => tmpdir expect(mail.delivery_method.class).to eq Mail::FileDelivery expect(mail.delivery_method.settings).to eql({:location => tmpdir}) end it "should not change the default when it changes the delivery_method" do mail1 = Mail.new mail2 = Mail.new mail1.delivery_method :file expect(Mail.delivery_method.class).to eq Mail::SMTP expect(mail1.delivery_method.class).to eq Mail::FileDelivery expect(mail2.delivery_method.class).to eq Mail::SMTP end it "should not change the default settings when it changes the delivery_method settings" do mail1 = Mail.new mail2 = Mail.new mail1.delivery_method :smtp, :address => 'my.own.address' expect(Mail.delivery_method.settings[:address]).to eq 'localhost' expect(mail1.delivery_method.settings[:address]).to eq 'my.own.address' expect(mail2.delivery_method.settings[:address]).to eq 'localhost' end end describe "retrieving emails via POP3" do it "should retrieve all emails via POP3" do messages = Mail.all expect(messages).not_to be_empty for message in messages expect(message).to be_instance_of(Mail::Message) end end end describe "sending emails via SMTP" do before(:each) do # Set the delivery method to test as the default MockSMTP.clear_deliveries end it "should deliver a mail message" do message = Mail.deliver do from 'mikel@test.lindsaar.net' to 'ada@test.lindsaar.net' subject 'Re: No way!' body 'Yeah sure' # add_file 'New Header Image', '/somefile.png' end expect(MockSMTP.deliveries[0][0]).to eq message.encoded expect(MockSMTP.deliveries[0][1]).to eq "mikel@test.lindsaar.net" expect(MockSMTP.deliveries[0][2]).to eq ["ada@test.lindsaar.net"] end it "should deliver itself" do message = Mail.new do from 'mikel@test.lindsaar.net' to 'ada@test.lindsaar.net' subject 'Re: No way!' body 'Yeah sure' # add_file 'New Header Image', '/somefile.png' end message.deliver! expect(MockSMTP.deliveries[0][0]).to eq message.encoded expect(MockSMTP.deliveries[0][1]).to eq "mikel@test.lindsaar.net" expect(MockSMTP.deliveries[0][2]).to eq ["ada@test.lindsaar.net"] end end describe "deliveries" do class MyDeliveryMethod attr_accessor :settings def initialize(values = {}); end def deliver!(message); true; end end class MyObserver def self.delivered_email(message); end end class MyDeliveryHandler def deliver_mail(mail) postman = MyDeliveryMethod.new postman.deliver!(mail) end end class MyYieldingDeliveryHandler def deliver_mail(mail) yield end end before(:each) do @message = Mail.new do from 'mikel@test.lindsaar.net' to 'ada@test.lindsaar.net' subject 'Re: No way!' body 'Yeah sure' end @message.delivery_method :test end describe "adding to Mail.deliveries" do it "should add itself to the deliveries collection on mail on delivery" do expect { @message.deliver }.to change(Mail::TestMailer.deliveries, :size).by(1) end end describe "perform_deliveries" do it "should call deliver! on the delivery method by default" do delivery_agent = MyDeliveryMethod.new expect(@message).to receive(:delivery_method).and_return(delivery_agent) expect(delivery_agent).to receive(:deliver!).with(@message) @message.deliver end it "should not call deliver if perform deliveries is set to false" do @message.perform_deliveries = false delivery_agent = MyDeliveryMethod.new expect(@message).not_to receive(:delivery_method) expect(delivery_agent).not_to receive(:deliver!) @message.deliver end it "should add to the deliveries array if perform_deliveries is true" do @message.perform_deliveries = true expect { @message.deliver }.to change(Mail::TestMailer.deliveries, :size).by(1) end it "should not add to the deliveries array if perform_deliveries is false" do @message.perform_deliveries = false expect { @message.deliver }.not_to change(Mail::TestMailer.deliveries, :size) end end describe "observers" do it "should tell its observers that it was told to deliver an email" do Mail.register_observer(MyObserver) expect(MyObserver).to receive(:delivered_email).with(@message).once @message.deliver end it "should tell its observers that it was told to deliver an email even if perform_deliveries is false" do Mail.register_observer(MyObserver) @message.perform_deliveries = false expect(MyObserver).to receive(:delivered_email).with(@message).once @message.deliver end it "should tell its observers that it was told to deliver an email even if it is using a delivery_handler" do Mail.register_observer(MyObserver) @message.delivery_handler = MyYieldingDeliveryHandler.new @message.perform_deliveries = false expect(MyObserver).to receive(:delivered_email).with(@message).once @message.deliver end end describe "raise_delivery_errors" do it "should pass on delivery errors if raised" do delivery_agent = MyDeliveryMethod.new allow(@message).to receive(:delivery_method).and_return(delivery_agent) allow(delivery_agent).to receive(:deliver!).and_raise(StandardError) expect { @message.deliver }.to raise_error(StandardError) end it "should not pass on delivery errors if raised raise_delivery_errors is set to false" do delivery_agent = MyDeliveryMethod.new allow(@message).to receive(:delivery_method).and_return(delivery_agent) @message.raise_delivery_errors = false allow(delivery_agent).to receive(:deliver!).and_raise(StandardError) expect { @message.deliver }.not_to raise_error end it "should pass through Exceptions even when raise_delivery_errors is set to false" do delivery_agent = MyDeliveryMethod.new allow(@message).to receive(:delivery_method).and_return(delivery_agent) @message.raise_delivery_errors = false allow(delivery_agent).to receive(:deliver!).and_raise(Exception) expect { @message.deliver }.to raise_error(Exception) end end describe "delivery_handler" do it "should allow you to hand off performing the actual delivery to another object" do delivery_handler = MyYieldingDeliveryHandler.new expect(delivery_handler).to receive(:deliver_mail).with(@message).exactly(:once) @message.delivery_handler = delivery_handler @message.deliver end it "mail should be told to :deliver once and then :deliver! once by the delivery handler" do @message.delivery_handler = MyYieldingDeliveryHandler.new expect(@message).to receive(:do_delivery).exactly(:once) @message.deliver end it "mail only call its delivery_method once" do @message.delivery_handler = MyYieldingDeliveryHandler.new expect(@message).to receive(:delivery_method).exactly(:once).and_return(Mail::TestMailer.new({})) @message.deliver end it "mail should not catch any exceptions when using a delivery_handler" do @message.delivery_handler = MyYieldingDeliveryHandler.new expect(@message).to receive(:delivery_method).and_raise(Exception) expect { @message.deliver }.to raise_error(Exception) end it "mail should not modify the Mail.deliveries object if using a delivery_handler that does not append to deliveries" do @message.delivery_handler = MyDeliveryHandler.new expect { @message.deliver }.not_to change(Mail::TestMailer, :deliveries) end it "should be able to just yield and let mail do its thing" do @message.delivery_handler = MyYieldingDeliveryHandler.new expect(@message).to receive(:do_delivery).exactly(:once) @message.deliver end end end end mail-2.6.4/spec/mail/parsers/000077500000000000000000000000001267453234600160145ustar00rootroot00000000000000mail-2.6.4/spec/mail/parsers/address_lists_parser_spec.rb000066400000000000000000000022571267453234600236000ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "AddressListsParser" do it "should parse an address" do text = 'Mikel Lindsaar , Friends: test2@lindsaar.net, Ada ;' a = Mail::Parsers::AddressListsParser.new expect(a.parse(text)).not_to be_nil end it "should parse an address list separated by semicolons" do text = 'Mikel Lindsaar ; Friends: test2@lindsaar.net; Ada ;' a = Mail::Parsers::AddressListsParser.new expect(a.parse(text)).not_to be_nil end context "parsing an address with a space at the end" do it "only finds a single address" do text = 'Mikel Lindsaar ' a = Mail::Parsers::AddressListsParser.new expect(a.parse(text).addresses.size).to eq 1 end end context "parsing an address which begins with a comment" do it "extracts local string correctly" do text = '(xxxx xxxxxx xxxx)ababab@example.com' a = Mail::Parsers::AddressListsParser.new expect(a.parse(text).addresses.size).to eq 1 expect(a.parse(text).addresses.first.local).to eq 'ababab' end end end mail-2.6.4/spec/mail/parsers/content_transfer_encoding_parser_spec.rb000066400000000000000000000037141267453234600261600ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "ContentTransferEncodingParser" do it "should work" do text = "quoted-printable" a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'quoted-printable' end describe "trailing semi colons" do it "should parse" do text = "quoted-printable;" a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'quoted-printable' end it "should parse with pre white space" do text = 'quoted-printable ;' a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'quoted-printable' end it "should parse with trailing white space" do text = 'quoted-printable; ' a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'quoted-printable' end it "should parse with pre and trailing white space" do text = 'quoted-printable ; ' a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'quoted-printable' end end describe "x-token values" do it "should work" do text = 'x-my-token' a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(text).error).to be_nil expect(a.parse(text).encoding).to eq 'x-my-token' end end describe "wild content-transfer-encoding" do %w(7bits 8bits 7-bit 8-bit).each do |mechanism| it "should parse #{mechanism} variant" do a = Mail::Parsers::ContentTransferEncodingParser.new expect(a.parse(mechanism).error).to be_nil expect(a.parse(mechanism).encoding).to eq mechanism end end end end mail-2.6.4/spec/mail/part_spec.rb000066400000000000000000000142041267453234600166430ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe Mail::Part do it "should not add a default Content-ID" do part = Mail::Part.new part.to_s expect(part.content_id).to be_nil end it "should not add a default Content-ID to non-inline attachments" do part = Mail::Part.new(:content_disposition => 'attachment') part.to_s expect(part.content_id).to be_nil end it "should add a default Content-ID to inline attachments" do part = Mail::Part.new(:content_disposition => 'inline') part.to_s expect(part.content_id).not_to be_nil end it "should not add a Date, MIME-Version, or Message-ID" do part = Mail::Part.new part.to_s expect(part.date).to be_nil expect(part.mime_version).to be_nil expect(part.message_id).to be_nil end it "should preserve any content id that you put into it" do part = Mail::Part.new do content_id "" body "This is Text" end expect(part.content_id).to eq "" end it "should return an inline content_id" do part = Mail::Part.new do content_id "" body "This is Text" end expect(part.cid).to eq "thisis@acontentid" expect(STDERR).to receive(:puts).with("Part#inline_content_id is deprecated, please call Part#cid instead") expect(part.inline_content_id).to eq "thisis@acontentid" end it "should URL escape its inline content_id" do part = Mail::Part.new do content_id "" body "This is Text" end expect(part.cid).to eq "thi%25%25sis@acontentid" expect(STDERR).to receive(:puts).with("Part#inline_content_id is deprecated, please call Part#cid instead") expect(part.inline_content_id).to eq "thi%25%25sis@acontentid" end it "should add a content_id if there is none and is asked for an inline_content_id" do part = Mail::Part.new expect(part.cid).not_to be_nil expect(STDERR).to receive(:puts).with("Part#inline_content_id is deprecated, please call Part#cid instead") expect(part.inline_content_id).not_to be_nil end it "should respond correctly to inline?" do part = Mail::Part.new(:content_disposition => 'attachment') expect(part).not_to be_inline part = Mail::Part.new(:content_disposition => 'inline') expect(part).to be_inline end it "handles un-parsable content_disposition headers" do part = Mail::Part.new field = Mail::Field.new('content-disposition') field.field = Mail::UnstructuredField.new('content-disposition', 'failed to parse') part.header.fields << field expect(part).not_to be_inline end describe "parts that have a missing header" do it "should not try to init a header if there is none" do part =< (reason: 553 5.3.0 ... Unknown E-Mail Address) ----- Transcript of session follows ----- ... while talking to mail.zzzzzz.com.: >>> DATA <<< 553 5.3.0 ... Unknown E-Mail Address 550 5.1.1 ... User unknown <<< 503 5.0.0 Need RCPT (recipient) -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. PARTEND expect(STDERR).not_to receive(:puts) Mail::Part.new(part) end end describe "delivery status reports" do before(:each) do part =<... Unknown E-Mail Address Last-Attempt-Date: Mon, 24 Dec 2007 10:03:53 +1100 ENDPART @delivery_report = Mail::Part.new(part) end it "should know if it is a delivery-status report" do expect(@delivery_report).to be_delivery_status_report_part end it "should create a delivery_status_data header object" do expect(@delivery_report.delivery_status_data).not_to be_nil end it "should be bounced" do expect(@delivery_report).to be_bounced end it "should say action 'delayed'" do expect(@delivery_report.action).to eq 'failed' end it "should give a final recipient" do expect(@delivery_report.final_recipient).to eq 'RFC822; edwin@zzzzzzz.com' end it "should give an error code" do expect(@delivery_report.error_status).to eq '5.3.0' end it "should give a diagostic code" do expect(@delivery_report.diagnostic_code).to eq 'SMTP; 553 5.3.0 ... Unknown E-Mail Address' end it "should give a remote-mta" do expect(@delivery_report.remote_mta).to eq 'DNS; mail.zzzzzz.com' end it "should be retryable" do expect(@delivery_report).not_to be_retryable end context "on a part without a certain field" do before(:each) do part =<This is HTML" end parsed_mail = Mail.new(mail.to_s) expect(parsed_mail.mime_type).to eq 'multipart/alternative' expect(parsed_mail.boundary).to eq mail.boundary expect(parsed_mail.parts.length).to eq 2 expect(parsed_mail.parts[0].body.to_s).to eq "This is Text" expect(parsed_mail.parts[1].body.to_s).to eq "This is HTML" end it "should round trip an email" do initial = Mail.new do to "mikel@test.lindsaar.net" subject "testing round tripping" body "Really testing round tripping." from "system@test.lindsaar.net" cc "nobody@test.lindsaar.net" bcc "bob@test.lindsaar.net" date Time.local(2009, 11, 6) add_file :filename => "foo.txt", :content => "I have \ntwo lines\n\n" end expect(Mail.new(initial.encoded).encoded).to eq initial.encoded end it "should round trip attachment newlines" do body = "I have \ntwo lines\n\n" initial = Mail.new initial.add_file :filename => "foo.txt", :content => body expect(Mail.new(initial.encoded).attachments.first.decoded).to eq body end end mail-2.6.4/spec/mail/utilities_spec.rb000066400000000000000000000433401267453234600177130ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "Utilities Module" do include Mail::Utilities describe "token safe" do describe "checking" do it "should return true if a string is token safe" do expect(token_safe?('.abc')).to be_truthy end it "should return false if a string is token safe" do expect(token_safe?('?=abc')).to be_falsey end it "should work with mb_chars" do expect(token_safe?('.abc'.mb_chars)).to be_truthy expect(token_safe?('?=abc'.mb_chars)).to be_falsey end end describe "quoting" do it "should return true if a string is token safe" do expect(quote_token('.abc')).to eq '.abc' end it "should return false if a string is token safe" do expect(quote_token('?=abc')).to eq '"?=abc"' end it "should work with mb_chars" do expect(quote_token('.abc'.mb_chars)).to eq '.abc' expect(quote_token('?=abc'.mb_chars)).to eq '"?=abc"' end end end describe "atom safe" do describe "checking" do it "should return true if a string is token safe" do expect(atom_safe?('?=abc')).to be_truthy end it "should return false if a string is token safe" do expect(atom_safe?('.abc')).to be_falsey end it "should work with mb_chars" do expect(atom_safe?('?=abc'.mb_chars)).to be_truthy expect(atom_safe?('.abc'.mb_chars)).to be_falsey end end describe "quoting" do it "should return true if a string is token safe" do expect(quote_atom('?=abc')).to eq '?=abc' end it "should return false if a string is token safe" do expect(quote_atom('.abc')).to eq '".abc"' end it "should work with mb_chars" do expect(quote_atom('?=abc'.mb_chars)).to eq '?=abc' expect(quote_atom('.abc'.mb_chars)).to eq '".abc"' end it "should work with mb_chars" do expect(quote_atom('?=abc'.mb_chars)).to eq '?=abc' expect(quote_atom('.abc'.mb_chars)).to eq '".abc"' end it "should quote white space" do expect(quote_atom('ab abc'.mb_chars)).to eq '"ab abc"' expect(quote_atom("a\sb\ta\r\nbc".mb_chars)).to eq %{"a\sb\ta\r\nbc"} end end end describe "quoting phrases" do it "doesn't mutate original string" do input_str = "blargh".freeze expect { quote_phrase(input_str) }.not_to raise_error end if RUBY_VERSION >= '1.9' describe "given a non-unsafe string" do it "should not change the encoding" do input_str = "blargh" input_str_encoding = input_str.encoding result = quote_phrase(input_str) expect(result.encoding).to eq input_str_encoding end end describe "given an unsafe string" do it "should not change the encoding" do input_str = "Bjørn" input_str_encoding = input_str.encoding result = quote_phrase(input_str) expect(result.encoding).to eq input_str_encoding end end end end describe "escaping parenthesies" do it "should escape parens" do test = 'This is not (escaped)' result = 'This is not \(escaped\)' expect(escape_paren(test)).to eq result end it "should not double escape parens" do test = 'This is not \(escaped\)' result = 'This is not \(escaped\)' expect(escape_paren(test)).to eq result end it "should escape all parens" do test = 'This is not \()escaped(\)' result = 'This is not \(\)escaped\(\)' expect(escape_paren(test)).to eq result end end describe "unescaping parenthesis" do it "should work" do test = '(This is a string)' result = 'This is a string' expect(unparen(test)).to eq result end it "should work without parens" do test = 'This is a string' result = 'This is a string' expect(unparen(test)).to eq result end it "should work using ActiveSupport mb_chars" do test = '(This is a string)'.mb_chars result = 'This is a string' expect(unparen(test)).to eq result end it "should work without parens using ActiveSupport mb_chars" do test = 'This is a string'.mb_chars result = 'This is a string' expect(unparen(test)).to eq result end end describe "unescaping brackets" do it "should work" do test = '' result = 'This is a string' expect(unbracket(test)).to eq result end it "should work without brackets" do test = 'This is a string' result = 'This is a string' expect(unbracket(test)).to eq result end it "should work using ActiveSupport mb_chars" do test = ''.mb_chars result = 'This is a string' expect(unbracket(test)).to eq result end it "should work without parens using ActiveSupport mb_chars" do test = 'This is a string'.mb_chars result = 'This is a string' expect(unbracket(test)).to eq(result) end end describe "quoting phrases" do it "should quote a phrase if it is unsafe" do test = 'this.needs quoting' result = '"this.needs quoting"' expect(dquote(test)).to eq result end it "should properly quote a string, even if quoted but not escaped properly" do test = '"this needs "escaping"' result = '"this needs \"escaping"' expect(dquote(test)).to eq result end it "should quote correctly a phrase with an escaped quote in it" do test = 'this needs \"quoting' result = '"this needs \\\\\\"quoting"' expect(dquote(test)).to eq result end it "should quote correctly a phrase with an escaped backslash followed by an escaped quote in it" do test = 'this needs \\\"quoting' result = '"this needs \\\\\\\\\\"quoting"' expect(dquote(test)).to eq result end end describe "unquoting phrases" do it "should remove quotes from the edge" do expect(unquote('"This is quoted"')).to eq 'This is quoted' end it "should remove backslash escaping from quotes" do expect(unquote('"This is \\"quoted\\""')).to eq 'This is "quoted"' end it "should remove backslash escaping from any char" do expect(unquote('"This is \\quoted"')).to eq 'This is quoted' end it "should be able to handle unquoted strings" do expect(unquote('This is not quoted')).to eq 'This is not quoted' end it "should preserve backslashes in unquoted strings" do expect(unquote('This is not \"quoted')).to eq 'This is not \"quoted' end it "should be able to handle unquoted quotes" do expect(unquote('"This is "quoted"')).to eq 'This is "quoted' end end describe "parenthesizing phrases" do it "should parenthesize a phrase" do test = 'this.needs parenthesizing' result = '(this.needs parenthesizing)' expect(paren(test)).to eq result end it "should properly parenthesize a string, and escape properly" do test = 'this needs (escaping' result = '(this needs \(escaping)' expect(paren(test)).to eq result end it "should properly parenthesize a string, and escape properly (other way)" do test = 'this needs )escaping' result = '(this needs \)escaping)' expect(paren(test)).to eq result end it "should properly parenthesize a string, even if parenthesized but not escaped properly" do test = '(this needs (escaping)' result = '(this needs \(escaping)' expect(paren(test)).to eq result end it "should properly parenthesize a string, even if parenthesized but not escaped properly (other way)" do test = '(this needs )escaping)' result = '(this needs \)escaping)' expect(paren(test)).to eq result end it "should parenthesize correctly a phrase with an escaped parentheses in it" do test = 'this needs \(parenthesizing' result = '(this needs \(parenthesizing)' expect(paren(test)).to eq result end it "should parenthesize correctly a phrase with an escaped parentheses in it (other way)" do test = 'this needs \)parenthesizing' result = '(this needs \)parenthesizing)' expect(paren(test)).to eq result end it "should parenthesize correctly a phrase with an escaped backslash followed by an escaped parentheses in it" do test = 'this needs \\\(parenthesizing' result = '(this needs \\\(parenthesizing)' expect(paren(test)).to eq result end it "should parenthesize correctly a phrase with an escaped backslash followed by an escaped parentheses in it (other way)" do test = 'this needs \\\)parenthesizing' result = '(this needs \\\)parenthesizing)' expect(paren(test)).to eq result end it "should parenthesize correctly a phrase with a set of parentheses" do test = 'this (needs) parenthesizing' result = '(this \(needs\) parenthesizing)' expect(paren(test)).to eq result end end describe "bracketizing phrases" do it "should bracketize a phrase" do test = 'this.needs bracketizing' result = '' expect(bracket(test)).to eq result end it "should properly bracketize a string, and escape properly" do test = 'this needs nil, :two => nil})).not_to be_truthy end it "should say a hash containing an empty hash is not blank" do expect(Mail::Utilities.blank?({:key => {}})).not_to be_truthy end end describe "to_lf" do it "should change a single CR to LF" do expect(Mail::Utilities.to_lf("\r")).to eq "\n" end it "should change multiple LF to CRLF" do expect(Mail::Utilities.to_lf("\r\r")).to eq "\n\n" end it "should change a single CRLF to LF" do expect(Mail::Utilities.to_lf("\r\n")).to eq "\n" end it "should change multiple CR to LF" do expect(Mail::Utilities.to_lf("\r\n\r\n")).to eq "\n\n" end it "should not change LF" do expect(Mail::Utilities.to_lf("\n")).to eq "\n" end it "should not change multiple CRLF" do expect(Mail::Utilities.to_lf("\n\n")).to eq "\n\n" end it "should handle a mix" do expect(Mail::Utilities.to_lf("\r \n\r\n")).to eq "\n \n\n" end if defined?(Encoding) it "should not change the encoding of the string" do saved_default_internal = Encoding.default_internal Encoding.default_internal = "UTF-8" ascii_string = "abcd".dup.force_encoding("ASCII-8BIT") expect(Mail::Utilities.to_lf(ascii_string).encoding).to eq(Encoding::ASCII_8BIT) Encoding.default_internal = saved_default_internal end end describe "to_lf method on String" do it "should leave lf as lf" do expect(Mail::Utilities.to_lf("\n")).to eq "\n" end it "should clean just cr to lf" do expect(Mail::Utilities.to_lf("\r")).to eq "\n" end it "should leave crlf as lf" do expect(Mail::Utilities.to_lf("\r\n")).to eq "\n" end it "should handle japanese characters" do string = "\343\201\202\343\201\210\343\201\206\343\201\210\343\201\212\r\n\r\n\343\201\213\343\201\215\343\201\217\343\201\221\343\201\223\r\n\r\n\343\201\225\343\201\227\343\201\244\343\201\233\343\201\235\r\n\r\n" expect(Mail::Utilities.to_lf(string)).to eq "\343\201\202\343\201\210\343\201\206\343\201\210\343\201\212\n\n\343\201\213\343\201\215\343\201\217\343\201\221\343\201\223\n\n\343\201\225\343\201\227\343\201\244\343\201\233\343\201\235\n\n" end end describe "methods on NilClass" do it "should return empty string on to_lf" do expect(Mail::Utilities.to_lf(nil)).to eq '' end end describe "methods on subclass" do it "should return String not subclass" do klass = Class.new(String) string = klass.new('') expect(Mail::Utilities.to_lf(string)).to be_an_instance_of(String) end end end describe "to_crlf" do describe "to_crlf method on String" do it "should clean just lf to crlf" do expect(Mail::Utilities.to_crlf("\n")).to eq "\r\n" end it "should clean just cr to crlf" do expect(Mail::Utilities.to_crlf("\r")).to eq "\r\n" end it "should leave crlf as crlf" do expect(Mail::Utilities.to_crlf("\r\n")).to eq "\r\n" end it "should handle japanese characters" do string = "\343\201\202\343\201\210\343\201\206\343\201\210\343\201\212\r\n\r\n\343\201\213\343\201\215\343\201\217\343\201\221\343\201\223\r\n\r\n\343\201\225\343\201\227\343\201\244\343\201\233\343\201\235\r\n\r\n" expect(Mail::Utilities.to_crlf(string)).to eq "\343\201\202\343\201\210\343\201\206\343\201\210\343\201\212\r\n\r\n\343\201\213\343\201\215\343\201\217\343\201\221\343\201\223\r\n\r\n\343\201\225\343\201\227\343\201\244\343\201\233\343\201\235\r\n\r\n" end if defined?(Encoding) it "should not change the encoding of the string" do saved_default_internal = Encoding.default_internal Encoding.default_internal = "UTF-8" ascii_string = "abcd".dup.force_encoding("ASCII-8BIT") expect(Mail::Utilities.to_crlf(ascii_string).encoding).to eq(Encoding::ASCII_8BIT) Encoding.default_internal = saved_default_internal end end end describe "methods on NilClass" do it "should return empty string on to_crlf" do expect(Mail::Utilities.to_crlf(nil)).to eq '' end end describe "methods on subclass" do it "should return String not subclass" do klass = Class.new(String) string = klass.new('') expect(Mail::Utilities.to_crlf(string)).to be_an_instance_of(String) end end describe "to_crlf" do it "should change a single LF to CRLF" do expect(Mail::Utilities.to_crlf("\n")).to eq "\r\n" end it "should change multiple LF to CRLF" do expect(Mail::Utilities.to_crlf("\n\n")).to eq "\r\n\r\n" end it "should change a single CR to CRLF" do expect(Mail::Utilities.to_crlf("\r")).to eq "\r\n" end it "should not change CRLF" do expect(Mail::Utilities.to_crlf("\r\n")).to eq "\r\n" end it "should not change multiple CRLF" do expect(Mail::Utilities.to_crlf("\r\n\r\n")).to eq "\r\n\r\n" end it "should handle a mix" do expect(Mail::Utilities.to_crlf("\r \n\r\n")).to eq "\r\n \r\n\r\n" end end end end mail-2.6.4/spec/mail/version_specific/000077500000000000000000000000001267453234600176675ustar00rootroot00000000000000mail-2.6.4/spec/mail/version_specific/escape_paren_1_8_spec.rb000066400000000000000000000014031267453234600243200ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require 'spec_helper' describe "Ruby 1.8 Extensions" do describe "string ascii detection" do it "should say it is US-ASCII only if it is" do expect("abc").to be_ascii_only end it "should not say it is US-ASCII only if it isn't" do expect("かきくけこ").not_to be_ascii_only end it "should not say it is US-ASCII only if it is a mix" do expect("abcかきくけこ123").not_to be_ascii_only end it "should handle edge cases" do ["\x00", "\x01", "\x40", "\x7f", "\x73"].each do |str| expect(str).to be_ascii_only end ["\x81", "\x99", "\xFF"].each do |str| expect(str).not_to be_ascii_only end end end end mail-2.6.4/spec/matchers/000077500000000000000000000000001267453234600152215ustar00rootroot00000000000000mail-2.6.4/spec/matchers/break_down_to.rb000066400000000000000000000013511267453234600203630ustar00rootroot00000000000000# frozen_string_literal: true module CustomMatchers class BreakDownTo def initialize(expected) @expected = expected end def matches?(target) @target = target @failed = false @expected.each_pair do |k,v| @failed = k unless @target.send(k) == @expected[k] end !@failed end def failure_message "expected #{@failed} to be |#{@expected[@failed]}| " + "but was |#{@target.send(@failed)}|" end def failure_message_when_negated "expected #{@failed} not to be |#{@expected[@failed]}| " + "and was |#{@target.send(@failed)}|" end end # Actual matcher that is exposed. def break_down_to(expected) BreakDownTo.new(expected) end end mail-2.6.4/spec/matchers_spec.rb000066400000000000000000000172721267453234600165710ustar00rootroot00000000000000# frozen_string_literal: true require 'spec_helper' describe "have_sent_email" do include Mail::Matchers let(:test_mail) do mail = Mail.new( :from => 'phil@example.com', :to => ['bob@example.com', 'fred@example.com'], :cc => ['dad@example.com', 'mom@example.com'], :bcc => ['alice@example.com', 'sue@example.com'], :subject => 'The facts you requested', :body => 'Here are the facts you requested. One-onethousand, two-onethousand.' ) if include_attachments mail.attachments['myfile.pdf'] = { :mime_type => 'application/x-pdf', :content => 'test content' } mail.attachments['yourfile.csv'] = { :mime_type => 'application/csv', :content => '1,2,3' } end mail end let(:include_attachments) { true } before(:all) do $old_delivery_method = Mail.delivery_method Mail.defaults do delivery_method :test end end before(:each) do Mail::TestMailer.deliveries.clear test_mail.deliver end after(:all) do # Although this breaks encapsulation, it's the easiest way to ensure # that the delivery method is _exactly_ what it was before we started # messing with it. Mail::Configuration.instance.instance_variable_set(:@delivery_method, $old_delivery_method) end context "without any modifiers" do context "when no e-mail has been sent" do before(:each) do Mail::TestMailer.deliveries.clear expect(Mail::TestMailer.deliveries).to be_empty end it { is_expected.not_to have_sent_email } end context "when e-mail has been sent" do before(:each) do expect(Mail::TestMailer.deliveries).not_to be_empty end it { is_expected.to have_sent_email } end end context "with #from" do context "and a matching sender" do it { is_expected.to have_sent_email.from('phil@example.com') } end context "and a non-matching sender" do it { is_expected.not_to have_sent_email.from('sven@example.com') } end end context "with #to" do context "and a matching recipient" do it { is_expected.to have_sent_email.to('bob@example.com') } it { is_expected.to have_sent_email.to('fred@example.com') } it { is_expected.to have_sent_email.to('bob@example.com').to('fred@example.com') } it { is_expected.to have_sent_email.to(['bob@example.com', 'fred@example.com']) } end context "and a non-matching recipient" do it { is_expected.not_to have_sent_email.to('sven@example.com') } end end context "with #cc" do context "and a matching recipient" do it { is_expected.to have_sent_email.cc('mom@example.com') } it { is_expected.to have_sent_email.cc('dad@example.com') } it { is_expected.to have_sent_email.cc('mom@example.com').cc('dad@example.com') } it { is_expected.to have_sent_email.cc(['mom@example.com', 'dad@example.com']) } end context "and a non-matching recipient" do it { is_expected.not_to have_sent_email.cc('granny@example.com') } end end context "with #bcc" do context "and a matching recipient" do it { is_expected.to have_sent_email.bcc('alice@example.com') } it { is_expected.to have_sent_email.bcc('sue@example.com') } it { is_expected.to have_sent_email.bcc('alice@example.com').bcc('sue@example.com') } it { is_expected.to have_sent_email.bcc(['alice@example.com', 'sue@example.com']) } end context "and a non-matching recipient" do it { is_expected.not_to have_sent_email.bcc('mario@example.com') } end end context "with #subject" do context "and a matching subject" do it { is_expected.to have_sent_email.with_subject('The facts you requested') } end context "and a non-matching subject" do it { is_expected.not_to have_sent_email.with_subject('facts you requested') } it { is_expected.not_to have_sent_email.with_subject('the facts you') } it { is_expected.not_to have_sent_email.with_subject('outright lies') } end end context "with #subject_matching" do context "and a matching subject" do it { is_expected.to have_sent_email.matching_subject(/(facts|fiction) you requested/) } end context "and a non-matching subject" do it { is_expected.not_to have_sent_email.matching_subject(/The \d+ facts you requested/) } end end context "with #with_body" do context "and a matching body" do it { is_expected.to have_sent_email.with_body('Here are the facts you requested. One-onethousand, two-onethousand.') } end context "and a non-matching body" do it { is_expected.not_to have_sent_email.with_body('Here are the facts you requested.') } it { is_expected.not_to have_sent_email.with_body('are the facts you requested. One-onethousand') } it { is_expected.not_to have_sent_email.with_body('Be kind to your web-footed friends, for a duck may be somebody\'s mother') } end end context 'with #with_attachments' do let(:first_attachment) { test_mail.attachments.first } let(:last_attachment) { test_mail.attachments.last } context 'and matching attachments' do context 'matching by filename' do it { is_expected.to have_sent_email.with_attachments(an_attachment_with_filename(first_attachment.filename)) } end context 'single attachment passed' do it { is_expected.to have_sent_email.with_attachments(first_attachment) } end context 'array of attachments passed' do it {is_expected.to have_sent_email.with_attachments([first_attachment, last_attachment]) } end context 'any_attachment passed' do it {is_expected.to have_sent_email.with_attachments([any_attachment]) } end context 'chaining attachment matching' do it { is_expected.to have_sent_email.with_attachments(first_attachment).with_attachments([last_attachment]) } end context 'ce matching' do it { is_expected.to have_sent_email.with_attachments(first_attachment).with_attachments([last_attachment]) } end context 'attachment order is important' do it {is_expected.to have_sent_email.with_attachments([first_attachment, last_attachment]) } it {is_expected.to_not have_sent_email.with_attachments([last_attachment, first_attachment]) } end end context 'and non-matching attachments' do it { is_expected.not_to have_sent_email.with_attachments('no_match') } it { is_expected.not_to have_sent_email.with_attachments(an_attachment_with_filename('no_match')) } end context 'and any attachments' do it { is_expected.to have_sent_email.with_any_attachments } end context 'and no attachments' do let(:include_attachments) { false } it { is_expected.to have_sent_email.with_no_attachments } end end context "with #matching_body" do context "and a matching body" do it { is_expected.to have_sent_email.matching_body(/one-?one(hundred|thousand)/i) } end context "and a non-matching body" do it { is_expected.not_to have_sent_email.matching_body(/\d+-onethousand/) } end end context "with a huge chain of modifiers" do it do is_expected.to have_sent_email. from('phil@example.com'). to('bob@example.com'). to('fred@example.com'). with_subject('The facts you requested'). with_attachments(test_mail.attachments.first). matching_subject(/facts (I|you)/). with_body('Here are the facts you requested. One-onethousand, two-onethousand.'). matching_body(/(I|you) request/). with_any_attachments end end end mail-2.6.4/spec/spec_helper.rb000066400000000000000000000120771267453234600162400ustar00rootroot00000000000000# encoding: utf-8 # frozen_string_literal: true require File.expand_path('../environment', __FILE__) unless defined?(MAIL_ROOT) STDERR.puts("Running Specs under Ruby Version #{RUBY_VERSION}") MAIL_ROOT = File.join(File.dirname(__FILE__), '../') end unless defined?(SPEC_ROOT) SPEC_ROOT = File.join(File.dirname(__FILE__)) end unless defined?(MAIL_SPEC_SUITE_RUNNING) # Used to force compile all the parsers on each spec suite load MAIL_SPEC_SUITE_RUNNING = true end require 'rspec' require File.join(File.dirname(__FILE__), 'matchers', 'break_down_to') require 'mail' STDERR.puts("Running Specs for Mail Version #{Mail::VERSION::STRING}") RSpec.configure do |c| c.mock_with :rspec c.include(CustomMatchers) end # NOTE: We set the KCODE manually here in 1.8.X because upgrading to rspec-2.8.0 caused it # to default to "NONE" (Why!?). $KCODE='UTF8' if RUBY_VERSION < '1.9' if defined?(Encoding) && Encoding.respond_to?(:default_external=) Mail::Parsers::Ragel::Ruby.silence_warnings do Encoding.default_external = 'utf-8' end end def fixture(*name) File.join(SPEC_ROOT, 'fixtures', name) end # Produces an array or printable ascii by default. # # We can assume if a, m and z and 1, 5, 0 work, then the rest # of the letters and numbers work. def ascii(from = 33, to = 126) chars = (from..to).map(&:chr) boring = ('b'..'l').to_a + ('n'..'o').to_a + ('p'..'y').to_a + ('B'..'L').to_a + ('N'..'O').to_a + ('P'..'Y').to_a + ('1'..'4').to_a + ('6'..'8').to_a chars - boring end # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/string/strip.rb#L22 def strip_heredoc(string) indent = string.scan(/^[ \t]*(?=\S)/).min.size string.gsub(/^[ \t]{#{indent}}/, '') end # Original mockup from ActionMailer class MockSMTP def self.deliveries @@deliveries end def initialize @@deliveries = [] end def sendmail(mail, from, to) @@deliveries << [mail, from, to] 'OK' end def start(*args) if block_given? return yield(self) else return self end end def finish return true end def self.clear_deliveries @@deliveries = [] end # in the standard lib: net/smtp.rb line 577 # a TypeError is thrown unless this arg is a # kind of OpenSSL::SSL::SSLContext def enable_tls(context = nil) if context && context.kind_of?(OpenSSL::SSL::SSLContext) true elsif context raise TypeError, "wrong argument (#{context.class})! "+ "(Expected kind of OpenSSL::SSL::SSLContext)" end end def enable_starttls_auto(context = :dummy_ssl_context) true end end class Net::SMTP def self.new(*args) MockSMTP.new end end class MockPopMail def initialize(rfc2822, number) @rfc2822 = rfc2822 @number = number @deleted = false end def pop @rfc2822 end def number @number end def to_s "#{number}: #{pop}" end def delete @deleted = true end def deleted? @deleted end end class MockPOP3 @@start = false def initialize @@popmails = [] 20.times do |i| # "test00", "test01", "test02", ..., "test19" @@popmails << MockPopMail.new("test#{i.to_s.rjust(2, '0')}", i) end end def self.popmails @@popmails.clone end def each_mail(*args) @@popmails.each do |popmail| yield popmail end end def mails(*args) @@popmails.clone end def start(*args) @@start = true block_given? ? yield(self) : self end def enable_ssl(*args) true end def started? @@start == true end def self.started? @@start == true end def reset end def finish @@start = false end def delete_all @@popmails = [] end end require 'net/pop' class Net::POP3 def self.new(*args) MockPOP3.new end end class MockIMAPFetchData attr_reader :attr, :number def initialize(rfc822, number) @attr = { 'RFC822' => rfc822 } @number = number end end class MockIMAP @@connection = false @@mailbox = nil @@marked_for_deletion = [] def self.examples @@examples end def initialize @@examples = [] (0..19).each do |i| @@examples << MockIMAPFetchData.new("test#{i.to_s.rjust(2, '0')}", i) end end def login(user, password) @@connection = true end def disconnect @@connection = false end def select(mailbox) @@mailbox = mailbox end def examine(mailbox) select(mailbox) end def uid_search(keys, charset=nil) [*(0..@@examples.size - 1)] end def uid_fetch(set, attr) [@@examples[set]] end def uid_store(set, attr, flags) if attr == "+FLAGS" && flags.include?(Net::IMAP::DELETED) @@marked_for_deletion << set end end def expunge @@marked_for_deletion.reverse.each do |i| # start with highest index first @@examples.delete_at(i) end @@marked_for_deletion = [] end def self.mailbox; @@mailbox end # test only def self.disconnected?; @@connection == false end def disconnected?; @@connection == false end end require 'net/imap' class Net::IMAP def self.new(*args) MockIMAP.new end end mail-2.6.4/tasks/000077500000000000000000000000001267453234600136065ustar00rootroot00000000000000mail-2.6.4/tasks/corpus.rake000066400000000000000000000062571267453234600157770ustar00rootroot00000000000000namespace :corpus do task :load_mail do require File.expand_path('../../spec/environment', __FILE__) require 'mail' end # Used to run parsing against an arbitrary corpus of email. # For example: http://plg.uwaterloo.ca/~gvcormac/treccorpus/ desc "Provide a LOCATION=/some/dir to verify parsing in bulk, otherwise defaults" task :verify_all => :load_mail do root_of_corpus = ENV['LOCATION'] || 'corpus/spam' @save_failures_to = ENV['SAVE_TO'] || 'spec/fixtures/emails/failed_emails' @failed_emails = [] @checked_count = 0 if root_of_corpus root_of_corpus = File.expand_path(root_of_corpus) if not File.directory?(root_of_corpus) raise "\n\tPath '#{root_of_corpus}' is not a directory.\n\n" end else raise "\n\tSupply path to corpus: LOCATION=/path/to/corpus\n\n" end if @save_failures_to if not File.directory?(@save_failures_to) raise "\n\tPath '#{@save_failures_to}' is not a directory.\n\n" end @save_failures_to = File.expand_path(@save_failures_to) puts "Mail which fails to parse will be saved in '#{@save_failures_to}'" end puts "Checking '#{root_of_corpus}' directory (recursively)" # we're tracking all the errors separately, don't clutter terminal $stderr_backup = $stderr.dup $stderr.reopen("/dev/null", "w") STDERR = $stderr dir_node(root_of_corpus) # put our toys back now that we're done with them $stderr = $stderr_backup.dup STDERR = $stderr puts "\n\n" if @failed_emails.any? report_failures_to_stdout end puts "Out of Total: #{@checked_count}" if @save_failures_to puts "Add SAVE_TO=/some/dir to save failed emails to for review.," puts "May result in a lot of saved files. Do a dry run first!\n\n" else puts "There are no errors" end end def dir_node(path) puts "\n\n" puts "Checking emails in '#{path}':" entries = Dir.entries(path) entries.each do |entry| next if ['.', '..'].include?(entry) full_path = File.join(path, entry) if File.file?(full_path) file_node(full_path) elsif File.directory?(full_path) dir_node(full_path) end end end def file_node(path) verify(path) end def verify(path) result, message = parse_as_mail(path) if result print '.' $stdout.flush else save_failure(path, message) print 'x' end end def save_failure(path, message) @failed_emails << [path, message] if @save_failures_to email_basename = File.basename(path) failure_as_filename = message.gsub(/\W/, '_') new_email_name = [failure_as_filename, email_basename].join("_") File.open(File.join(@save_failures_to, new_email_name), 'w+') do |fh| fh << File.read(path) end end end def parse_as_mail(path) @checked_count += 1 begin parsed_mail = Mail.read(path) [true, nil] rescue => e [false, e.message] end end def report_failures_to_stdout @failed_emails.each do |failed| puts "#{failed[0]} : #{failed[1]}" end puts "Failed: #{@failed_emails.size}" end end mail-2.6.4/tasks/generate_tables000066400000000000000000000121761267453234600166640ustar00rootroot00000000000000#!/usr/bin/env ruby # from https://github.com/rails/rails/blob/master/activesupport/bin/generate_tables # under MIT license # Usage: # ruby tasks/generate_tables # The Unicode version downloaded is determined by the UNICODE_VERSION lib/mail/multibye/unicode.rb require './lib/mail/multibyte/unicode' require 'open-uri' require 'tmpdir' module Mail module Multibyte module Unicode class UnicodeDatabase def load; end end class DatabaseGenerator BASE_URI = "http://www.unicode.org/Public/#{UNICODE_VERSION}/ucd/" SOURCES = { :codepoints => BASE_URI + 'UnicodeData.txt', :composition_exclusion => BASE_URI + 'CompositionExclusions.txt', :grapheme_break_property => BASE_URI + 'auxiliary/GraphemeBreakProperty.txt', :cp1252 => 'http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' } def initialize @ucd = Unicode::UnicodeDatabase.new end def parse_codepoints(line) codepoint = Codepoint.new raise "Could not parse input." unless line =~ /^ ([0-9A-F]+); # code ([^;]+); # name ([A-Z]+); # general category ([0-9]+); # canonical combining class ([A-Z]+); # bidi class (<([A-Z]*)>)? # decomposition type ((\ ?[0-9A-F]+)*); # decomposition mapping ([0-9]*); # decimal digit ([0-9]*); # digit ([^;]*); # numeric ([YN]*); # bidi mirrored ([^;]*); # unicode 1.0 name ([^;]*); # iso comment ([0-9A-F]*); # simple uppercase mapping ([0-9A-F]*); # simple lowercase mapping ([0-9A-F]*)$/ix # simple titlecase mapping codepoint.code = $1.hex #codepoint.name = $2 #codepoint.category = $3 codepoint.combining_class = Integer($4) #codepoint.bidi_class = $5 codepoint.decomp_type = $7 codepoint.decomp_mapping = ($8=='') ? nil : $8.split.collect { |element| element.hex } #codepoint.bidi_mirrored = ($13=='Y') ? true : false codepoint.uppercase_mapping = ($16=='') ? 0 : $16.hex codepoint.lowercase_mapping = ($17=='') ? 0 : $17.hex #codepoint.titlecase_mapping = ($18=='') ? nil : $18.hex @ucd.codepoints[codepoint.code] = codepoint end def parse_grapheme_break_property(line) if line =~ /^([0-9A-F.]+)\s*;\s*([\w]+)\s*#/ type = $2.downcase.intern @ucd.boundary[type] ||= [] if $1.include? '..' parts = $1.split '..' @ucd.boundary[type] << (parts[0].hex..parts[1].hex) else @ucd.boundary[type] << $1.hex end end end def parse_composition_exclusion(line) if line =~ /^([0-9A-F]+)/i @ucd.composition_exclusion << $1.hex end end def parse_cp1252(line) if line =~ /^([0-9A-Fx]+)\s([0-9A-Fx]+)/i @ucd.cp1252[$1.hex] = $2.hex end end def create_composition_map @ucd.codepoints.each do |_, cp| if !cp.nil? and cp.combining_class == 0 and cp.decomp_type.nil? and !cp.decomp_mapping.nil? and cp.decomp_mapping.length == 2 and @ucd.codepoints[cp.decomp_mapping[0]].combining_class == 0 and !@ucd.composition_exclusion.include?(cp.code) @ucd.composition_map[cp.decomp_mapping[0]] ||= {} @ucd.composition_map[cp.decomp_mapping[0]][cp.decomp_mapping[1]] = cp.code end end end def normalize_boundary_map @ucd.boundary.each do |k,v| if [:lf, :cr].include? k @ucd.boundary[k] = v[0] end end end def parse SOURCES.each do |type, url| filename = File.join(Dir.tmpdir, "#{url.split('/').last}") unless File.exist?(filename) $stderr.puts "Downloading #{url.split('/').last}" File.open(filename, 'wb') do |target| open(url) do |source| source.each_line { |line| target.write line } end end end File.open(filename) do |file| file.each_line { |line| send "parse_#{type}".intern, line } end end create_composition_map normalize_boundary_map end def dump_to(filename) File.open(filename, 'wb') do |f| f.write Marshal.dump([@ucd.codepoints, @ucd.composition_exclusion, @ucd.composition_map, @ucd.boundary, @ucd.cp1252]) end end end end end end if __FILE__ == $0 filename = Mail::Multibyte::Unicode::UnicodeDatabase.filename generator = Mail::Multibyte::Unicode::DatabaseGenerator.new generator.parse print "Writing to: #{filename}" generator.dump_to filename puts " (#{File.size(filename)} bytes)" end mail-2.6.4/tasks/ragel.rake000066400000000000000000000032001267453234600155370ustar00rootroot00000000000000require 'erb' MAIL_ROOT = File.expand_path("../..", __FILE__) require "#{MAIL_ROOT}/lib/mail/parsers/ragel/parser_info" namespace :ragel do # Ruby Parsers RB_DIR = "#{MAIL_ROOT}/lib/mail/parsers/ragel/ruby" RB_RAGEL_TEMPLATE = "#{RB_DIR}/parser.rb.rl.erb" def generate_rb_ragel_file(parser_name) parser_name_cc = parser_name.gsub('parser','machine').split('_').map{|e| e.capitalize}.join + "Machine" ragel_rb_source_template = ERB.new(IO.read(RB_RAGEL_TEMPLATE)) ragel_rb_source_template.result(binding) end RB_GEN_DIR = "#{RB_DIR}/machines" directory RB_GEN_DIR RB_ACTIONS = "#{RB_GEN_DIR}/rb_actions.rl" file RB_ACTIONS do actions = Mail::Parsers::Ragel::ACTIONS.each_with_index.map do |action,idx| "action #{action} { actions.push(#{idx}, p) }" end.join("\n") actions_rl = "%%{\nmachine rb_actions;\n#{actions}\n}%%" File.open(RB_ACTIONS,"w+") { |f| f.write actions_rl } end RB_RAGEL_PARSERS = [] Mail::Parsers::Ragel::FIELD_PARSERS.each do |p| path = "#{RB_GEN_DIR}/#{p}_machine.rb.rl" RB_RAGEL_PARSERS << path file path do File.open(path, "w+") { |f| f.write(generate_rb_ragel_file(p)) } end end RB_RAGEL_FILES = [RB_GEN_DIR, RB_ACTIONS] + RB_RAGEL_PARSERS task :generate_ragel_files => RB_RAGEL_FILES RB_PARSERS = [] RB_RAGEL_PARSERS.each do |ragel_path| path = ragel_path.gsub(".rl", "") RB_PARSERS << path file path do `ragel -sR -F1 -o #{path} #{ragel_path}` end end task :generate_ruby_parsers => RB_PARSERS desc "Generate ruby parsers from ragel files" task :generate => [:generate_ragel_files, :generate_ruby_parsers] end mail-2.6.4/test.rb000066400000000000000000000006251267453234600137700ustar00rootroot00000000000000require 'rubygems' require 'mail' smtp = { :address => 'mail.fiendz.org', :port => 587, :domain => 'fiendz.org', :user_name => 'test@fiendz.org', :password => 'foobar', :enable_starttls_auto => true, :openssl_verify_mode => 'none' } Mail.defaults { delivery_method :smtp, smtp } mail = Mail.new do from 'test@fiendz.org' to 'donald.ball@gmail.com' subject 'subject' body 'body' end mail.deliver!