mms2r 1.1.12 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. data/History.txt +32 -2
  2. data/Manifest.txt +41 -79
  3. data/README.txt +50 -51
  4. data/Rakefile +3 -2
  5. data/conf/aliases.yml +8 -0
  6. data/conf/message.alltel.com.yml +14 -0
  7. data/conf/messaging.nextel.com.yml +10 -0
  8. data/conf/mms.att.net.yml +9 -0
  9. data/conf/mms.dobson.net.yml +4 -0
  10. data/conf/mms.luxgsm.lu.yml +8 -0
  11. data/conf/mms.myhelio.com.yml +12 -0
  12. data/conf/mms.netcom.no.yml +4 -0
  13. data/conf/mms.o2online.de.yml +8 -0
  14. data/conf/mms.three.co.uk.yml +15 -0
  15. data/conf/mms2r_media.yml +6 -0
  16. data/conf/orangemms.net.yml +13 -0
  17. data/conf/pm.sprint.com.yml +10 -0
  18. data/conf/pxt.vodafone.net.nz.yml +5 -0
  19. data/conf/tmomail.net.yml +16 -0
  20. data/conf/vzwpix.com.yml +8 -0
  21. data/dev_tools/anonymizer.rb +20 -0
  22. data/lib/mms2r.rb +19 -45
  23. data/lib/mms2r/media.rb +288 -300
  24. data/lib/mms2r/media/sprint.rb +189 -0
  25. data/test/fixtures/att-text-01.mail +27 -0
  26. data/test/fixtures/helio-image-01.mail +8 -8
  27. data/test/fixtures/helio-message-01.mail +327 -0
  28. data/test/fixtures/luxgsm-image-01.mail +388 -0
  29. data/test/fixtures/netcom-image-01.mail +556 -0
  30. data/test/fixtures/o2-de-image-01.mail +314 -0
  31. data/test/fixtures/orange-uk-image-01.mail +71 -0
  32. data/test/fixtures/pxt-image-01.mail +118 -0
  33. data/test/fixtures/sprint-broken-image-01.mail +1 -1
  34. data/test/fixtures/sprint-image-01.mail +211 -195
  35. data/test/fixtures/sprint-purged-image-01.mail +1 -1
  36. data/test/fixtures/sprint-two-images-01.mail +231 -198
  37. data/test/fixtures/sprint-video-01.mail +210 -195
  38. data/test/fixtures/three-uk-image-01.mail +1202 -0
  39. data/test/test_helper.rb +39 -0
  40. data/test/{test_mms2r_alltel_media.rb → test_message_alltel_com.rb} +13 -17
  41. data/test/{test_mms2r_nextel_media.rb → test_messaging_nextel_com.rb} +12 -19
  42. data/test/{test_mms2r_sprint_pcs_media.rb → test_messaging_sprintpcs_com.rb} +9 -10
  43. data/test/test_mms2r_media.rb +474 -316
  44. data/test/test_mms_att_net.rb +92 -0
  45. data/test/test_mms_dobson_net.rb +41 -0
  46. data/test/test_mms_luxgsm_lu.rb +50 -0
  47. data/test/test_mms_myhelio_com.rb +60 -0
  48. data/test/test_mms_netcom_no.rb +52 -0
  49. data/test/test_mms_o2online_de.rb +53 -0
  50. data/test/test_mms_three_co_uk.rb +42 -0
  51. data/test/test_orangemms_net.rb +100 -0
  52. data/test/test_pm_sprint_com.rb +201 -0
  53. data/test/test_pxt_vodafone_net_nz.rb +37 -0
  54. data/test/{test_mms2r_t_mobile_media.rb → test_tmomail_net.rb} +8 -19
  55. data/test/{test_mms2r_verizon_media.rb → test_vzwpix_com.rb} +34 -27
  56. data/vendor/plugins/mms2r/lib/autotest/mms2r.rb +16 -11
  57. metadata +128 -157
  58. data/conf/mms2r_alltel_media_ignore.yml +0 -13
  59. data/conf/mms2r_att_media_subject.yml +0 -3
  60. data/conf/mms2r_cingular_me_media_subject.yml +0 -3
  61. data/conf/mms2r_cingular_me_media_transform.yml +0 -7
  62. data/conf/mms2r_dobson_media_ignore.yml +0 -4
  63. data/conf/mms2r_helio_media_ignore.yml +0 -6
  64. data/conf/mms2r_media_ignore.yml +0 -5
  65. data/conf/mms2r_media_subject.yml +0 -3
  66. data/conf/mms2r_my_cingular_media_subject.yml +0 -3
  67. data/conf/mms2r_nextel_media_ignore.yml +0 -11
  68. data/conf/mms2r_orange_france_media_ignore.yml +0 -6
  69. data/conf/mms2r_orange_poland_media_subject.yml +0 -3
  70. data/conf/mms2r_sprint_media_ignore.yml +0 -7
  71. data/conf/mms2r_sprint_media_subject.yml +0 -3
  72. data/conf/mms2r_t_mobile_media_ignore.yml +0 -16
  73. data/conf/mms2r_verizon_media_ignore.yml +0 -4
  74. data/conf/mms2r_verizon_media_transform.yml +0 -5
  75. data/lib/mms2r/alltel_media.rb +0 -10
  76. data/lib/mms2r/att_media.rb +0 -13
  77. data/lib/mms2r/cingular_me_media.rb +0 -23
  78. data/lib/mms2r/dobson_media.rb +0 -13
  79. data/lib/mms2r/helio_media.rb +0 -20
  80. data/lib/mms2r/m_mode_media.rb +0 -13
  81. data/lib/mms2r/my_cingular_media.rb +0 -15
  82. data/lib/mms2r/nextel_media.rb +0 -17
  83. data/lib/mms2r/orange_france_media.rb +0 -10
  84. data/lib/mms2r/orange_poland_media.rb +0 -10
  85. data/lib/mms2r/sprint_media.rb +0 -182
  86. data/lib/mms2r/sprint_pcs_media.rb +0 -16
  87. data/lib/mms2r/t_mobile_media.rb +0 -21
  88. data/lib/mms2r/verizon_media.rb +0 -19
  89. data/lib/mms2r/vtext_media.rb +0 -16
  90. data/lib/vendor/text/format.rb +0 -1466
  91. data/lib/vendor/tmail.rb +0 -3
  92. data/lib/vendor/tmail/address.rb +0 -242
  93. data/lib/vendor/tmail/attachments.rb +0 -39
  94. data/lib/vendor/tmail/base64.rb +0 -71
  95. data/lib/vendor/tmail/config.rb +0 -69
  96. data/lib/vendor/tmail/encode.rb +0 -467
  97. data/lib/vendor/tmail/facade.rb +0 -552
  98. data/lib/vendor/tmail/header.rb +0 -914
  99. data/lib/vendor/tmail/info.rb +0 -35
  100. data/lib/vendor/tmail/loader.rb +0 -1
  101. data/lib/vendor/tmail/mail.rb +0 -447
  102. data/lib/vendor/tmail/mailbox.rb +0 -433
  103. data/lib/vendor/tmail/mbox.rb +0 -1
  104. data/lib/vendor/tmail/net.rb +0 -280
  105. data/lib/vendor/tmail/obsolete.rb +0 -135
  106. data/lib/vendor/tmail/parser.rb +0 -1522
  107. data/lib/vendor/tmail/port.rb +0 -377
  108. data/lib/vendor/tmail/quoting.rb +0 -131
  109. data/lib/vendor/tmail/scanner.rb +0 -41
  110. data/lib/vendor/tmail/scanner_r.rb +0 -263
  111. data/lib/vendor/tmail/stringio.rb +0 -277
  112. data/lib/vendor/tmail/tmail.rb +0 -1
  113. data/lib/vendor/tmail/utils.rb +0 -238
  114. data/test/fixtures/broken_from_spam.mail +0 -80
  115. data/test/fixtures/hello_world_empty_text.mail +0 -7
  116. data/test/fixtures/hello_world_mail_multipart.mail +0 -24
  117. data/test/fixtures/hello_world_mail_plain_no_content_type.mail +0 -7
  118. data/test/fixtures/hello_world_mail_plain_with_content_type.mail +0 -8
  119. data/test/fixtures/simple-with-two-images-two-texts.mail +0 -49
  120. data/test/fixtures/simple_image.mail +0 -19
  121. data/test/fixtures/simple_multipart_alternative.mail +0 -42
  122. data/test/test_mms2r_att_media.rb +0 -54
  123. data/test/test_mms2r_cingular_me_media.rb +0 -51
  124. data/test/test_mms2r_dobson_media.rb +0 -46
  125. data/test/test_mms2r_helio_media.rb +0 -49
  126. data/test/test_mms2r_m_mode_media.rb +0 -36
  127. data/test/test_mms2r_my_cingular_media.rb +0 -31
  128. data/test/test_mms2r_orange_france_media.rb +0 -53
  129. data/test/test_mms2r_orange_poland_media.rb +0 -42
  130. data/test/test_mms2r_sprint_media.rb +0 -269
  131. data/test/test_mms2r_vtext_media.rb +0 -28
@@ -0,0 +1,189 @@
1
+ #--
2
+ # Copyright (c) 2007, 2008 by Mike Mondragon (mikemondragon@gmail.com)
3
+ #
4
+ # Please see the LICENSE file for licensing information
5
+ #++
6
+
7
+ require 'net/http'
8
+ require 'rubygems'
9
+ require 'hpricot'
10
+ require 'cgi'
11
+
12
+ module MMS2R
13
+
14
+ class Media
15
+ ##
16
+ # Sprint version of MMS2R::Media
17
+ #
18
+ # Sprint is an annoying carrier because they don't actually transmit user
19
+ # generated content (like images or videos) directly in the MMS message.
20
+ # Instead, they hijack the media that is sent from the cellular subscriber
21
+ # and place that content on a content server. In place of the media
22
+ # the recipient receives a HTML message with unsolicited Sprint
23
+ # advertising and links back to their content server. The recipient has
24
+ # to click through Sprint more pages to view the content.
25
+ #
26
+ # The default subject on these messages from the
27
+ # carrier is "You have new Picture Mail!"
28
+
29
+ class Sprint < MMS2R::Media
30
+
31
+ ##
32
+ # Override process() because Sprint doesn't attach media (images, video,
33
+ # etc.) to its MMS. Media such as images and videos are hosted on a
34
+ # Sprint content server. MMS2R::Media::Sprint has to pick apart an
35
+ # HTML attachment to find the URL to the media on Sprint's content
36
+ # server and download each piece of content. Any text message part of
37
+ # the MMS if it exists is embedded in the html.
38
+
39
+ def process
40
+ unless @was_processed
41
+ @logger.info("#{self.class} processing") unless @logger.nil?
42
+ #sprint MMS are multipart
43
+ parts = @mail.parts
44
+
45
+ #find the payload html
46
+ doc = nil
47
+ parts.each do |p|
48
+ next unless self.class.part_type?(p).eql?('text/html')
49
+ d = Hpricot(p.body)
50
+ title = d.at('title').inner_html
51
+ if title =~ /You have new Picture Mail!/
52
+ doc = d
53
+ @is_video = (p.body =~ /type=&quot;VIDEO&quot;&gt;/m ? true : false)
54
+ end
55
+ end
56
+ return if doc.nil? #it was a dud
57
+ @is_video ||= false
58
+
59
+ # break it down
60
+ sprint_phone_number(doc)
61
+ sprint_process_text(doc)
62
+ sprint_process_media(doc)
63
+
64
+ @was_processed = true
65
+ end
66
+
67
+ # when process acts upon a block
68
+ if block_given?
69
+ media.each do |k, v|
70
+ yield(k, v)
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ private
77
+
78
+ ##
79
+ # Digs out where Sprint hides the phone number
80
+
81
+ def sprint_phone_number(doc)
82
+ c = doc.search("/html/head/comment()").last
83
+ t = c.content.gsub(/\s+/m," ").strip
84
+ #@number returned in parent's #number
85
+ @number = / name=&quot;MDN&quot;&gt;(\d+)&lt;/.match(t)[1]
86
+ end
87
+
88
+ ##
89
+ # Pulls out the user text form the MMS and adds the text to media hash
90
+
91
+ def sprint_process_text(doc)
92
+ # there is at least one <pre> with MMS text if text has been included by
93
+ # the user. (note) we'll have to verify that if they attach multiple texts
94
+ # to the MMS then Sprint stacks it up in multiple <pre>'s. The only <pre>
95
+ # tag in the document is for text from the user.
96
+ doc.search("/html/body//pre").each do |pre|
97
+ type = 'text/plain'
98
+ text = pre.inner_html.strip
99
+ next if text.empty?
100
+ type, text = transform_text(type, text)
101
+ type, file = sprint_write_file(type, text.strip)
102
+ add_file(type, file) unless type.nil? || file.nil?
103
+ end
104
+ end
105
+
106
+ ##
107
+ # Fetch all the media that is referred to in the doc
108
+
109
+ def sprint_process_media(doc)
110
+ srcs = Array.new
111
+ # collect all the images in the document, even though
112
+ # they are <img> tag some might actually refer to video.
113
+ # To know the link refers to vide one must look at the
114
+ # content type on the http GET response.
115
+ imgs = doc.search("/html/body//img")
116
+ imgs.each do |i|
117
+ src = i.attributes['src']
118
+ # we don't want to double fetch content and we only
119
+ # want to fetch media from the content server, you get
120
+ # a clue about that as there is a RECIPIENT in the URI path
121
+ # of real content
122
+ next unless /mmps\/RECIPIENT\//.match(src)
123
+ next if srcs.detect{|s| s.eql?(src)}
124
+ srcs << src
125
+ end
126
+
127
+ #we've got the payload now, go fetch them
128
+ cnt = 0
129
+ srcs.each do |src|
130
+ begin
131
+
132
+ url = URI.parse(CGI.unescapeHTML(src))
133
+ unless @is_video
134
+ query={}
135
+ url.query.split('&').each{|a| p=a.split('='); query[p[0]] = p[1]}
136
+ query.delete_if{|k, v| k == 'limitsize' or k == 'squareoutput' }
137
+ url.query = query.map{|k,v| "#{k}=#{v}"}.join("&")
138
+ end
139
+ # sprint is a ghetto, they expect to see &amp; for video request
140
+ url.query = url.query.gsub(/&/, "&amp;") if @is_video
141
+
142
+ res = Net::HTTP.get_response(url)
143
+ rescue StandardError => err
144
+ @logger.error("#{self.class} processing error, #{$!}") unless @logger.nil?
145
+ next
146
+ end
147
+
148
+ # if the Sprint content server uses response code 500 when the content is purged
149
+ # the content type will text/html and the body will be the message
150
+ if res.content_type == 'text/html' && res.code == "500"
151
+ @logger.error("Sprint content server returned response code 500") unless @logger.nil?
152
+ next
153
+ end
154
+
155
+ # setup the file path and file
156
+ base = /\/RECIPIENT\/([^\/]+)\//.match(src)[1]
157
+ type = res.content_type
158
+ file_name = "#{base}-#{cnt}.#{self.class.default_ext(type)}"
159
+ file = File.join(msg_tmp_dir(),File.basename(file_name))
160
+
161
+ # write it and add it to the media hash
162
+ type, file = sprint_write_file(type, res.body, file)
163
+ add_file(type, file) unless type.nil? || file.nil?
164
+ cnt = cnt + 1
165
+ end
166
+
167
+ end
168
+
169
+ ##
170
+ # Creates a temporary file based on the type
171
+
172
+ def sprint_temp_file(type)
173
+ file_name = "#{Time.now.to_f}.#{self.class.default_ext(type)}"
174
+ File.join(msg_tmp_dir(),File.basename(file_name))
175
+ end
176
+
177
+ ##
178
+ # Writes the content to a file and returns the type, file as a tuple.
179
+
180
+ def sprint_write_file(type, content, file = nil)
181
+ file = sprint_temp_file(type) if file.nil?
182
+ @logger.info("#{self.class} writing file #{file}") unless @logger.nil?
183
+ File.open(file,'w'){ |f| f.write(content) }
184
+ return type, file
185
+ end
186
+
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,27 @@
1
+ Delivered-To: tommy.tutone@example.com
2
+ Received: by 10.150.230.20 with SMTP id c20cs102927ybh;
3
+ Wed, 19 Dec 2007 17:45:24 -0800 (PST)
4
+ Received: by 10.67.19.11 with SMTP id w11mr2853581ugi.89.1198115123916;
5
+ Wed, 19 Dec 2007 17:45:23 -0800 (PST)
6
+ Return-Path: <5551234@txt.att.net>
7
+ Received: from atlmtaow03.cingularme.com (atlmtaow03.cingularme.com [66.102.165.8])
8
+ by mx.google.com with ESMTP id z12si7179628gvf.2007.12.19.17.45.22;
9
+ Wed, 19 Dec 2007 17:45:23 -0800 (PST)
10
+ Received-SPF: neutral (google.com: 66.102.165.8 is neither permitted nor denied by domain of 5551234@txt.att.net) client-ip=66.102.165.8;
11
+ Authentication-Results: mx.google.com; spf=neutral (google.com: 66.102.165.8 is neither permitted nor denied by domain of 5551234@txt.att.net) smtp.mail=5551234@txt.att.net
12
+ Received: from txt.att.net ([10.46.66.13]) by atlmtaow03.cingularme.com
13
+ (InterMail vM.6.01.04.00 201-2131-118-20041027) with SMTP
14
+ id <20071220014522.MWOX6162.atlmtaow03.cingularme.com@txt.att.net>
15
+ for <tommy.tutone@example.com>; Wed, 19 Dec 2007 20:45:22 -0500
16
+ From: 5551234@txt.att.net
17
+ To: tommy.tutone@example.com
18
+ Subject:
19
+ X-OPWV-Extra-Message-Type: MO
20
+ Message-Id: <20071220014522.MWOX6162.atlmtaow03.cingularme.com@txt.att.net>
21
+ Date: Wed, 19 Dec 2007 20:45:22 -0500
22
+
23
+ Hello World
24
+
25
+ --
26
+ ==================================================================
27
+ This mobile text message is brought to you by AT&T
@@ -3,19 +3,19 @@ X-Account-Key: account6
3
3
  X-UIDL: UID2393-1175209464
4
4
  X-Mozilla-Status: 0001
5
5
  X-Mozilla-Status2: 00000000
6
- Return-path: <7608070850@mms.myhelio.com>
7
- Envelope-to: will@willjessup.com
6
+ Return-path: <5551234@mms.myhelio.com>
7
+ Envelope-to: tommy.tutone@example.com
8
8
  Delivery-date: Sun, 01 Jul 2007 17:52:46 -0500
9
9
  Received: from [209.179.176.17] (helo=mms.myhelio.com)
10
10
  by scratchy.cirtexhosting.com with smtp (Exim 4.63)
11
- (envelope-from <7608070850@mms.myhelio.com>)
11
+ (envelope-from <5551234@mms.myhelio.com>)
12
12
  id 1I58Hc-0006t0-RJ
13
- for will@willjessup.com; Sun, 01 Jul 2007 17:52:45 -0500
14
- Message-ID: <1_nm0339723101_7608070850@mms.myhelio.com>
13
+ for tommy.tutone@example.com; Sun, 01 Jul 2007 17:52:45 -0500
14
+ Message-ID: <1_nm0339723101_5551234@mms.myhelio.com>
15
15
  MIME-Version: 1.0
16
- From: "MMS Message" <7608070850@mms.myhelio.com>
16
+ From: "MMS Message" <5551234@mms.myhelio.com>
17
17
  Date: Sun, 01 Jul 2007 22:52:45 GMT
18
- To: <will@willjessup.com>
18
+ To: <tommy.tutone@example.com>
19
19
  Subject: Test image
20
20
  Content-Type: multipart/mixed;
21
21
  boundary="-------InticubeMmsBoundary-BridgeToTheFuture_MIXED.200610"
@@ -328,7 +328,7 @@ Ow==
328
328
  Content-Type: image/jpeg;
329
329
  name="0628070005.jpg"
330
330
  Content-Transfer-Encoding: base64
331
- Content-ID: <07062817294276080708500000000000>
331
+ Content-ID: <07062817294255512340000000000>
332
332
  Content-Description: 0628070005.jpg
333
333
  Content-Disposition: attachment;
334
334
  filename="0628070005.jpg"
@@ -0,0 +1,327 @@
1
+ From - Sun Jul 01 15:54:58 2007
2
+ X-Account-Key: account6
3
+ X-UIDL: UID2394-1175209464
4
+ X-Mozilla-Status: 0001
5
+ X-Mozilla-Status2: 00000000
6
+ Return-path: <5551234@mms.myhelio.com>
7
+ Envelope-to: tommy.tutone@example.com
8
+ Delivery-date: Sun, 01 Jul 2007 17:54:45 -0500
9
+ Received: from [209.179.176.17] (helo=mms.myhelio.com)
10
+ by scratchy.cirtexhosting.com with smtp (Exim 4.63)
11
+ (envelope-from <5551234@mms.myhelio.com>)
12
+ id 1I58JO-0006u6-Au
13
+ for tommy.tutone@example.com; Sun, 01 Jul 2007 17:54:45 -0500
14
+ Message-ID: <2_nm0199885101_5551234@mms.myhelio.com>
15
+ MIME-Version: 1.0
16
+ From: "MMS Message" <5551234@mms.myhelio.com>
17
+ Date: Sun, 01 Jul 2007 22:54:26 GMT
18
+ To: <tommy.tutone@example.com>
19
+ Subject: Test message
20
+ Content-Type: multipart/mixed;
21
+ boundary="-------InticubeMmsBoundary-BridgeToTheFuture_MIXED.200610"
22
+ X-Antivirus-Scanner: Clean mail though you should still use an Antivirus
23
+
24
+ Content-Transfer-Encoding: base64
25
+ ---------InticubeMmsBoundary-BridgeToTheFuture_MIXED.200610
26
+ Content-Type: multipart/related;
27
+ boundary="-------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610"
28
+ ;type="multipart/alternative"
29
+
30
+ ---------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610
31
+ Content-Type: multipart/alternative;
32
+ boundary="-------InticubeMmsBoundary-BridgeToTheFuture_ALTERNATIVE.200610"
33
+
34
+ ---------InticubeMmsBoundary-BridgeToTheFuture_ALTERNATIVE.200610
35
+ Content-Type: text/plain;
36
+ charset="utf-8"
37
+ Content-Transfer-Encoding: base64
38
+
39
+ Tm90ZToNCiBUaGlzIG1lc3NhZ2UgY29udGFpbnMgbXVsdGltZWRpYSBjb250ZW50cyBhbmQgaXMg
40
+ ZGVsaXZlcmVkIGZyb20gSGVsaW8sIExMQy4NCiBUaGlzIG1lc3NhZ2UgaXMgb3B0aW1pemVkIGZv
41
+ ciBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIDYuMA0KDQoNCgl0bzogd2lsbEB3aWxsamVzc3Vw
42
+ LmNvbQ0KCWZyb206IDc2MDgwNzA4NTANCgltZXNzYWdlOg0KVGVzdCBtZXNzYWdlDQo=
43
+
44
+ ---------InticubeMmsBoundary-BridgeToTheFuture_ALTERNATIVE.200610
45
+ Content-Type: text/html;
46
+ charset="utf-8"
47
+ Content-Transfer-Encoding: base64
48
+
49
+ PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
50
+ eHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KPHRpdGxlPk1NUyBFbWFpbDwvdGl0bGU+Cjxz
51
+ dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CjwhLS0KYm9keSwgdGQgewoJZm9udC1mYW1pbHk6IEFyaWFs
52
+ LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cglmb250LXNpemU6IDlwdDsKCWZvbnQtc3R5bGU6IG5v
53
+ cm1hbDsKCWxpbmUtaGVpZ2h0OiAxNXB0OwoJZm9udC13ZWlnaHQ6IGJvbGQ7Cglmb250LXZhcmlh
54
+ bnQ6IG5vcm1hbDsKCWNvbG9yOiAjNDQ0NDQ0Owp9Cg0KYTpsaW5rIHsKCWZvbnQtZmFtaWx5OiBB
55
+ cmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoJZm9udC1zaXplOiA5cHQ7Cglmb250LXN0eWxl
56
+ OiBub3JtYWw7CglsaW5lLWhlaWdodDogMTVwdDsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJZm9udC12
57
+ YXJpYW50OiBub3JtYWw7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cgljb2xvcjogIzQ0NDQ0NDsK
58
+ fQoNCmE6aG92ZXIgewoJZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7
59
+ Cglmb250LXNpemU6IDlwdDsKCWZvbnQtc3R5bGU6IG5vcm1hbDsKCWxpbmUtaGVpZ2h0OiAxNXB0
60
+ OwoJZm9udC13ZWlnaHQ6IGJvbGQ7Cglmb250LXZhcmlhbnQ6IG5vcm1hbDsKCXRleHQtZGVjb3Jh
61
+ dGlvbjp1bmRlcmxpbmU7Cgljb2xvcjogIzQ0NDQ0NDsKfQoNCi5ncmV5IHsKCWZvbnQtZmFtaWx5
62
+ OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoJZm9udC1zaXplOiA4cHQ7Cglmb250LXN0
63
+ eWxlOiBub3JtYWw7CglsaW5lLWhlaWdodDogbm9ybWFsOwoJZm9udC13ZWlnaHQ6IGJvbGRlcjsK
64
+ CWZvbnQtdmFyaWFudDogbm9ybWFsOwoJdGV4dC10cmFuc2Zvcm06IG5vbmU7Cgljb2xvcjogI2Fi
65
+ YjFiOTsKfQphOmxpbmsgewp9Ci0tPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IG1hcmdpbmhlaWdo
66
+ dD0iMCIgbWFyZ2lud2lkdGg9IjAiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgYmdjb2xv
67
+ cj0iI0ZGRkZGRiI+Cjx0YWJsZSB3aWR0aD0iNjMxIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIw
68
+ IiBjZWxscGFkZGluZz0iMCI+Cjx0cj4KPHRkPjxpbWcgc3JjPSJjaWQ6dG9waW1hZ2VfNDcyc2Rp
69
+ ZmpsMjM0MDAxMmwza2pzZGsiIHdpZHRoPSI2MzEiIGhlaWdodD0iMTE4IiBpZD0idG9waW1hZ2Vf
70
+ NCI+PC90ZD4KPC90cj4KPHRyPgo8dGQgc3R5bGU9InBhZGRpbmc6NXB4OyI+PHRhYmxlIHdpZHRo
71
+ PSIxMDAlIiBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVy
72
+ Y29sb3I9IiNiYmJkYmYiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiPgo8dHI+Cjx0
73
+ ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjQ3cHg7IHBhZGRpbmctcmlnaHQ6NDdweDsgcGFkZGluZy10
74
+ b3A6MjdweDsgcGFkZGluZy1ib3R0b206MjdweDsiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVy
75
+ PSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgo8dHIgY2xhc3M9ImdyZXkiPgo8
76
+ dGQgaGVpZ2h0PSIyOCIgY2xhc3M9ImdyZXkiPkZST006PC90ZD4KPC90cj4KPHRyPgo8dGQ+NzYw
77
+ ODA3MDg1MDwvYT48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImdyZXkiPgo8dGQgaGVpZ2h0PSIyOCIg
78
+ Y2xhc3M9ImdyZXkiPlRPOjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxhIGhyZWY9Im1haWx0bzp3aWxs
79
+ QHdpbGxqZXNzdXAuY29tIj53aWxsQHdpbGxqZXNzdXAuY29tPC90ZD4KPC90cj4KPHRyIGNsYXNz
80
+ PSJncmV5Ij4KPHRkIGhlaWdodD0iMjgiIGNsYXNzPSJncmV5Ij5NRVNTQUdFOjwvdGQ+CjwvdHI+
81
+ Cjx0cj4KPHRkPlRlc3QgbWVzc2FnZTwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iNzgiPiZu
82
+ YnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxpbWcgc3JjPSJjaWQ6bWlkZGxlaW1hZ2VfNzg1Zmps
83
+ MjM0MDAxMmwza2pzZGsiIHdpZHRoPSIyNTMiIGhlaWdodD0iMTYiIGlkPSJtaWRkbGVpbWFnIj48
84
+ L3RkPgo8L3RyPgo8L3RhYmxlPjwvdGQ+CjwvdHI+CjwvdGFibGU+PC90ZD4KPC90cj4KPHRyPgo8
85
+ dGQ+PGltZyBzcmM9ImNpZDpib3R0b21pbWFnZV83ODVmamwyMzQwMDEybDNranNkayIgd2lkdGg9
86
+ IjYzMSIgaGVpZ2h0PSIxMDkiIGlkPSJib3R0b21pbWFnIj48L3RkPgo8L3RyPgo8L3RhYmxlPgo8
87
+ L2JvZHk+CjwvaHRtbD4K
88
+
89
+ ---------InticubeMmsBoundary-BridgeToTheFuture_ALTERNATIVE.200610--
90
+
91
+ ---------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610
92
+ Content-Type: image/gif;
93
+ name="top.gif"
94
+ Content-Transfer-Encoding: base64
95
+ Content-ID: <topimage_472sdifjl2340012l3kjsdk>
96
+ Content-Description: top.gif
97
+ Content-Disposition: INLINE;
98
+ filename="top.gif"
99
+ Content-Location: top.gif
100
+
101
+ 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
208
+
209
+ ---------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610
210
+ Content-Type: image/gif;
211
+ name="bottom.gif"
212
+ Content-Transfer-Encoding: base64
213
+ Content-ID: <bottomimage_785fjl2340012l3kjsdk>
214
+ Content-Description: bottom.gif
215
+ Content-Disposition: INLINE;
216
+ filename="bottom.gif"
217
+ Content-Location: bottom.gif
218
+
219
+ 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
279
+
280
+ ---------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610
281
+ Content-Type: image/gif;
282
+ name="middle_img.gif"
283
+ Content-Transfer-Encoding: base64
284
+ Content-ID: <middleimage_785fjl2340012l3kjsdk>
285
+ Content-Description: middle_img.gif
286
+ Content-Disposition: INLINE;
287
+ filename="middle_img.gif"
288
+ Content-Location: middle_img.gif
289
+
290
+ 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
322
+ Ow==
323
+
324
+ ---------InticubeMmsBoundary-BridgeToTheFuture_RELATED.200610--
325
+
326
+ ---------InticubeMmsBoundary-BridgeToTheFuture_MIXED.200610--
327
+