google-gmail-api 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,184 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path('../../test_helper', __FILE__)
3
+
4
+ module Gmail
5
+ class ThreadTest < Test::Unit::TestCase
6
+
7
+ should "Threads should be listable" do
8
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.list, parameters: {userId: "me"}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread_list))
9
+ list = Gmail::Thread.all
10
+ assert_equal Array, list.class
11
+ assert_equal Gmail::Thread, list[0].class
12
+ end
13
+
14
+ should "Thread should be retrievable by id" do
15
+
16
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.get, parameters: {userId: "me", id: test_thread[:id]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread))
17
+ t = Gmail::Thread.get(test_thread[:id])
18
+ assert_equal Gmail::Thread, t.class
19
+ assert_equal test_thread[:id], t.id
20
+ end
21
+
22
+
23
+ context "Access list of Messages from thread" do
24
+ should "Access list of Messages" do
25
+ thread = Gmail::Thread.new test_thread
26
+ # @mock.expects(:execute).with(api_method: Gmail.service.users.messages.list, parameters: {userId: "me", threadId: [test_thread[:id]]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_message_list))
27
+ list = thread.messages
28
+ assert_equal Array, list.class
29
+ assert_equal Gmail::Message, list[0].class
30
+ end
31
+
32
+ should "Access list of Messages after selecting from list" do
33
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.list, parameters: {userId: "me"}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread_list))
34
+ thread_list = Gmail::Thread.all
35
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.get, parameters: {userId: "me", id: test_thread[:id]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_message_list))
36
+ thread = thread_list.first
37
+ list = thread.messages
38
+ assert_equal Array, list.class
39
+ assert_equal Gmail::Message, list[0].class
40
+ end
41
+
42
+
43
+ should 'Access list of unread Messages' do
44
+ thread = Gmail::Thread.new test_thread
45
+ #@mock.expects(:execute).with(api_method: Gmail.service.users.messages.list, parameters: {userId: "me", threadId: [test_thread[:id]], labelIds: ["UNREAD"]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_message_list))
46
+ list = thread.unread_messages
47
+ assert_equal Array, list.class
48
+ assert_equal Gmail::Message, list[0].class
49
+ end
50
+
51
+ should 'Access list of sent Messages' do
52
+ thread = Gmail::Thread.new test_thread
53
+ # @mock.expects(:execute).with(api_method: Gmail.service.users.messages.list, parameters: {userId: "me", threadId: [test_thread[:id]], labelIds: ["SENT"]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_message_list))
54
+ list = thread.unread_messages
55
+ assert_equal Array, list.class
56
+ assert_equal Gmail::Message, list[0].class
57
+ end
58
+ end
59
+
60
+
61
+ should "Thread should be deletable" do
62
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.delete, parameters: {userId: "me", id: test_thread[:id]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(""))
63
+ t = Gmail::Thread.new(test_thread)
64
+ r = t.delete
65
+ assert r
66
+ end
67
+
68
+ should "Thread should be thrashable" do
69
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.trash, parameters: {userId: "me", id: test_thread[:id]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread))
70
+ t = Gmail::Thread.new(test_thread)
71
+ r = t.trash
72
+ assert_equal Gmail::Thread, r.class
73
+ end
74
+
75
+ should "Thread should be unthrashable" do
76
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.untrash, parameters: {userId: "me", id: test_thread[:id]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread))
77
+ t = Gmail::Thread.new(test_thread)
78
+ r = t.untrash
79
+ assert_equal Gmail::Thread, r.class
80
+ end
81
+
82
+ context "Modifying Labels" do
83
+ should "Thread should be starrable" do
84
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: ["STARRED"], removeLabelIds: []} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
85
+ t = Gmail::Thread.new(test_thread)
86
+ r = t.star
87
+ assert_equal Gmail::Thread, r.class
88
+ assert_not_equal t.object_id, r.object_id
89
+
90
+ r = t.star!
91
+
92
+ assert_equal t.object_id, r.object_id
93
+
94
+ end
95
+
96
+ should "Thread should be unstarrable" do
97
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: [], removeLabelIds: ["STARRED"]} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
98
+ t = Gmail::Thread.new(test_thread)
99
+ r = t.unstar
100
+ assert_equal Gmail::Thread, r.class
101
+
102
+ assert_not_equal t.object_id, r.object_id
103
+
104
+ r = t.unstar!
105
+
106
+ assert_equal t.object_id, r.object_id
107
+ end
108
+
109
+ should "Thread should be archivable" do
110
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: [], removeLabelIds: ["INBOX"]} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
111
+ t = Gmail::Thread.new(test_thread)
112
+ r = t.archive
113
+ assert_equal Gmail::Thread, r.class
114
+ assert_not_equal t.object_id, r.object_id
115
+
116
+ r = t.archive!
117
+
118
+ assert_equal t.object_id, r.object_id
119
+ end
120
+
121
+ should "Thread should be unarchivable" do
122
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: ["INBOX"], removeLabelIds: []} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
123
+ t = Gmail::Thread.new(test_thread)
124
+ r = t.unarchive
125
+ assert_equal Gmail::Thread, r.class
126
+ assert_not_equal t.object_id, r.object_id
127
+
128
+ r = t.unarchive!
129
+
130
+ assert_equal t.object_id, r.object_id
131
+ end
132
+
133
+ should "Thread should be markable as read" do
134
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: [], removeLabelIds: ["UNREAD"]} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
135
+ t = Gmail::Thread.new(test_thread)
136
+ r = t.mark_as_read
137
+ assert_equal Gmail::Thread, r.class
138
+ assert_not_equal t.object_id, r.object_id
139
+
140
+ r = t.mark_as_read!
141
+
142
+ assert_equal t.object_id, r.object_id
143
+ end
144
+
145
+ should "Thread should be markable as unread" do
146
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: ["UNREAD"], removeLabelIds: []} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
147
+ t = Gmail::Thread.new(test_thread)
148
+ r = t.mark_as_unread
149
+ assert_equal Gmail::Thread, r.class
150
+ assert_not_equal t.object_id, r.object_id
151
+
152
+ r = t.mark_as_unread!
153
+
154
+ assert_equal t.object_id, r.object_id
155
+ end
156
+
157
+
158
+ should "Thread label should be modifiable as wish" do
159
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.modify, parameters: {userId: "me", id: test_thread[:id]}, body_object: {addLabelIds: ["UNREAD", "SOME COOL LABEL"], removeLabelIds: ["INBOX", "SOME NOT COOL LABEL"]} , headers: {'Content-Type' => 'application/json'}).twice.returns(test_response(test_thread))
160
+ t = Gmail::Thread.new(test_thread)
161
+ r = t.modify ["UNREAD", "SOME COOL LABEL"], ["INBOX", "SOME NOT COOL LABEL"]
162
+ assert_equal Gmail::Thread, r.class
163
+ assert_not_equal t.object_id, r.object_id
164
+
165
+ r = t.modify! ["UNREAD", "SOME COOL LABEL"], ["INBOX", "SOME NOT COOL LABEL"]
166
+
167
+ assert_equal t.object_id, r.object_id
168
+ end
169
+
170
+ end
171
+
172
+
173
+ should "Thread should be searcheable" do
174
+ @mock.expects(:execute).with(api_method: Gmail.service.users.threads.list, parameters: {userId: "me", q: "from:(me) to:(you) subject:(subject) in:inbox before:2014/12/1 after:2014/11/1 test -{real}", labelIds:["UNREAD"]}, headers: {'Content-Type' => 'application/json'}).once.returns(test_response(test_thread_list))
175
+ list = Gmail::Thread.search(from:"me", to: "you", subject: "subject", in: "inbox", before: "2014/12/1", after: "2014/11/1", has_words: "test", has_not_words: "real", labelIds: ["UNREAD"])
176
+ assert_equal Array, list.class
177
+ assert_equal Gmail::Thread, list[0].class
178
+ end
179
+
180
+
181
+
182
+
183
+ end
184
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path('../../test_helper', __FILE__)
3
+
4
+ module Gmail
5
+ class UtilTest < Test::Unit::TestCase
6
+
7
+ should "Symbolize Name should work properly" do
8
+ assert_equal(({:test1=> "test"}), Gmail::Util.symbolize_names({"test1"=>'test'}))
9
+ m =Gmail::Message.new test_message
10
+ assert_equal m, Gmail::Util.symbolize_names(m)
11
+ assert_equal(({test: {nested:[{coucou: "1", coucou2: "2"}]}}), Gmail::Util.symbolize_names({"test"=>{"nested"=>[{"coucou"=>"1","coucou2"=>"2"}]}}))
12
+ assert_equal [{coucou: "1", coucou2: "2"}], Gmail::Util.symbolize_names([{"coucou"=>"1", "coucou2"=>"2"}])
13
+ end
14
+
15
+ #testing of convert_to_gmail_object is not necessary as it is tested through all other test files
16
+
17
+ end
18
+ end
@@ -0,0 +1,127 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Gmail
3
+ module TestData
4
+ def test_response(body, code=200)
5
+ # When an exception is raised, restclient clobbers method_missing. Hence we
6
+ # can't just use the stubs interface.
7
+ body = JSON.generate(body) if !(body.kind_of? String)
8
+ m = mock
9
+ m.instance_variable_set('@gmail_values', { :body => body, :code => code })
10
+ def m.body; @gmail_values[:body]; end
11
+ def m.code; @gmail_values[:code]; end
12
+ m
13
+ end
14
+
15
+ def test_draft(params={})
16
+ {:id=>"1490204870554280932", :message=>{:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4", :labelIds=>["DRAFT"], :snippet=>"sd Cordialement, Julie", :historyId=>"227960", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.64.21.4 with HTTP; Tue, 13 Jan 2015 09:28:31 -0800 (PST)"}, {:name=>"Date", :value=>"Tue, 13 Jan 2015 18:28:31 +0100"}, {:name=>"Message-ID", :value=>"<CAFXNVWSNjE652y4nau3nbWeoJ7RD_UsybHWa9-L6vvRi9j3nFQ@mail.gmail.com>"}, {:name=>"Subject", :value=>""}, {:name=>"From", :value=>"Julie Desk <julie@juliedesk.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=f46d042abf34a36bd9050c8bf335"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}], :body=>{:size=>28, :data=>"c2QNCkNvcmRpYWxlbWVudCwNCg0KSnVsaWUNCg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}], :body=>{:size=>154, :data=>"PGRpdiBkaXI9Imx0ciI-c2Q8YnIgY2xlYXI9ImFsbCI-PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPkNvcmRpYWxlbWVudCw8ZGl2Pjxicj48L2Rpdj48ZGl2Pkp1bGllPC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg=="}}]}, :sizeEstimate=>710}} .merge(params)
17
+
18
+ end
19
+
20
+
21
+ def test_strange_message #it has payload.parts.parts
22
+ {:id=>"14ae95209c15af0a", :threadId=>"14ae94601bae5138", :labelIds=>["IMPORTANT", "CATEGORY_PERSONAL"], :snippet=>"Bonjour Julie, Le plus tôt sera le mieux, j&#39;ai hâte ! Je bloque le 12/02 Merci De : Julie Desk [", :historyId=>"231473", :payload=>{:mimeType=>"multipart/related", :filename=>"", :headers=>[{:name=>"Delivered-To", :value=>"julie@juliedesk.com"}, {:name=>"Received", :value=>"by 10.64.89.39 with SMTP id bl7csp1683249ieb; Wed, 14 Jan 2015 08:41:16 -0800 (PST)"}, {:name=>"X-Received", :value=>"by 10.194.76.205 with SMTP id m13mr8833652wjw.39.1421253675567; Wed, 14 Jan 2015 08:41:15 -0800 (PST)"}, {:name=>"Return-Path", :value=>"<sandra.perez@esnumerique.com>"}, {:name=>"Received", :value=>"from emea01-am1-obe.outbound.protection.outlook.com (mail-am1on0770.outbound.protection.outlook.com. [2a01:111:f400:fe00::770]) by mx.google.com with ESMTPS id v10si5545148wix.4.2015.01.14.08.41.14 for <julie@juliedesk.com> (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 14 Jan 2015 08:41:15 -0800 (PST)"}, {:name=>"Received-SPF", :value=>"pass (google.com: domain of sandra.perez@esnumerique.com designates 2a01:111:f400:fe00::770 as permitted sender) client-ip=2a01:111:f400:fe00::770;"}, {:name=>"Authentication-Results", :value=>"mx.google.com; spf=pass (google.com: domain of sandra.perez@esnumerique.com designates 2a01:111:f400:fe00::770 as permitted sender) smtp.mail=sandra.perez@esnumerique.com"}, {:name=>"Received", :value=>"from AMSPR06MB102.eurprd06.prod.outlook.com (10.242.90.147) by DB3PR06MB0937.eurprd06.prod.outlook.com (25.161.60.149) with Microsoft SMTP Server (TLS) id 15.1.53.17; Wed, 14 Jan 2015 16:41:13 +0000"}, {:name=>"Received", :value=>"from AMSPR06MB102.eurprd06.prod.outlook.com ([169.254.6.131]) by AMSPR06MB102.eurprd06.prod.outlook.com ([169.254.6.131]) with mapi id 15.01.0053.000; Wed, 14 Jan 2015 16:41:13 +0000"}, {:name=>"From", :value=>"Sandra Perez <sandra.perez@esnumerique.com>"}, {:name=>"To", :value=>"Julie Desk <julie@juliedesk.com>, Vincent Klingbeil <vincentklingbeil@ametix.com>"}, {:name=>"Subject", :value=>"RE: Dej"}, {:name=>"Thread-Topic", :value=>"Dej"}, {:name=>"Thread-Index", :value=>"AdAwFmdsGWjLpOTkSh6OGW1svRYHwwAAi/qAAAAdX/A="}, {:name=>"Date", :value=>"Wed, 14 Jan 2015 16:41:13 +0000"}, {:name=>"Message-ID", :value=>"<AMSPR06MB102CF5CA6B835FEA9E50E6D97410@AMSPR06MB102.eurprd06.prod.outlook.com>"}, {:name=>"References", :value=>"<AM2PR06MB09326077C9CED23112FE633DB1410@AM2PR06MB0932.eurprd06.prod.outlook.com> <CAFXNVWR_+YjgM2fMa+kcAOcUx2kiULpzXdQazrnqadDux3+prg@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAFXNVWR_+YjgM2fMa+kcAOcUx2kiULpzXdQazrnqadDux3+prg@mail.gmail.com>"}, {:name=>"Accept-Language", :value=>"fr-FR, en-US"}, {:name=>"Content-Language", :value=>"fr-FR"}, {:name=>"X-MS-Has-Attach", :value=>"yes"}, {:name=>"X-MS-TNEF-Correlator", :value=>""}, {:name=>"x-originating-ip", :value=>"[88.162.203.104]"}, {:name=>"authentication-results", :value=>"spf=none (sender IP is ) smtp.mailfrom=sandra.perez@esnumerique.com;"}, {:name=>"x-dmarcaction-test", :value=>"None"}, {:name=>"x-microsoft-antispam", :value=>"BCL:0;PCL:0;RULEID:(3005003);SRVR:DB3PR06MB0937;"}, {:name=>"x-exchange-antispam-report-test", :value=>"UriScan:;"}, {:name=>"x-exchange-antispam-report-cfa-test", :value=>"BCL:0;PCL:0;RULEID:;SRVR:DB3PR06MB0937;"}, {:name=>"x-forefront-prvs", :value=>"04569283F9"}, {:name=>"x-forefront-antispam-report", :value=>"SFV:NSPM;SFS:(10019020)(199003)(377424004)(189002)(68736005)(54356999)(76176999)(18206015028)(40100003)(99936001)(54606007)(102836002)(15975445007)(106356001)(50986999)(77156002)(62966003)(19625215002)(16236675004)(92566002)(33656002)(2950100001)(2900100001)(105586002)(221733001)(97736003)(46102003)(2656002)(87936001)(16601075003)(19300405004)(17760045003)(54206007)(66066001)(76576001)(19580395003)(101416001)(86362001)(74316001)(19580405001)(122556002)(19617315012)(64706001)(107886001)(19627595001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB3PR06MB0937;H:AMSPR06MB102.eurprd06.prod.outlook.com;FPR:;SPF:None;MLV:sfv;PTR:InfoNoRecords;A:1;MX:1;LANG:fr;"}, {:name=>"received-spf", :value=>"None (protection.outlook.com: esnumerique.com does not designate permitted sender hosts)"}, {:name=>"Content-Type", :value=>"multipart/related; boundary=\"_005_AMSPR06MB102CF5CA6B835FEA9E50E6D97410AMSPR06MB102eurprd_\"; type=\"multipart/alternative\""}, {:name=>"MIME-Version", :value=>"1.0"}, {:name=>"X-OriginatorOrg", :value=>"esnumerique.com"}, {:name=>"X-MS-Exchange-CrossTenant-originalarrivaltime", :value=>"14 Jan 2015 16:41:13.6540 (UTC)"}, {:name=>"X-MS-Exchange-CrossTenant-fromentityheader", :value=>"Hosted"}, {:name=>"X-MS-Exchange-CrossTenant-id", :value=>"8d916988-dc6a-4604-9152-c47698104d7b"}, {:name=>"X-MS-Exchange-Transport-CrossTenantHeadersStamped", :value=>"DB3PR06MB0937"}], :body=>{:size=>0}, :parts=>[{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"multipart/alternative; boundary=\"_000_AMSPR06MB102CF5CA6B835FEA9E50E6D97410AMSPR06MB102eurprd_\""}], :body=>{:size=>0}, :parts=>[{:partId=>"0.0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=\"utf-8\""}, {:name=>"Content-Transfer-Encoding", :value=>"base64"}], :body=>{:size=>1223, :data=>"Qm9uam91ciBKdWxpZSwNCg0KTGUgcGx1cyB0w7R0IHNlcmEgbGUgbWlldXgsIGrigJlhaSBow6J0ZSAhDQoNCkplIGJsb3F1ZSBsZSAxMi8wMg0KDQpNZXJjaQ0KDQpEZSA6IEp1bGllIERlc2sgW21haWx0bzpqdWxpZUBqdWxpZWRlc2suY29tXQ0KRW52b3nDqSA6IG1lcmNyZWRpIDE0IGphbnZpZXIgMjAxNSAxNzozOQ0Kw4AgOiBWaW5jZW50IEtsaW5nYmVpbA0KQ2MgOiBTYW5kcmEgUGVyZXoNCk9iamV0IDogUmU6IERlag0KDQpCb25qb3VyIFNhbmRyYSwNCg0KVmluY2VudCBlc3QgZGlzcG9uaWJsZSBwb3VyIGTDqWpldW5lciBhdmVjIHZvdXMgYXV4IGhvcmFpcmVzIHN1aXZhbnRzIDoNCg0KLSBKZXVkaSAxMiBGw6l2cmllciDDoCAxMjozMA0KLSBWZW5kcmVkaSAxMyBGw6l2cmllciDDoCAxMjozMA0KLSBMdW5kaSAxNiBGw6l2cmllciDDoCAxMjozMA0KLSBNZXJjcmVkaSAxOCBGw6l2cmllciDDoCAxMjozMA0KDQoNClF1ZWwgaG9yYWlyZSB2b3VzIGNvbnZpZW50IGxlIG1pZXV4ID8NCltodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YWFuVnNhV1ZBYW5Wc2FXVmtaWE5yTG1OdmJRJTNEJTNEJnR5cGU9emVyb2NvbnRlbnQmZ3VpZD02NDcxZGFjYS0wODYwLTQ3YWEtYTlkZS1iYjI5MzFlOTUxMWZd4ZCnDQoNCkNvcmRpYWxlbWVudCwNCg0KSnVsaWUNCg0KMjAxNS0wMS0xNCAxNzoyOCBHTVQrMDE6MDAgVmluY2VudCBLbGluZ2JlaWwgPHZpbmNlbnRrbGluZ2JlaWxAYW1ldGl4LmNvbTxtYWlsdG86dmluY2VudGtsaW5nYmVpbEBhbWV0aXguY29tPj46DQpIZWxsbyBTYW5kcmEsDQoNCkp1bGllIChlbiBjYykgdmEgdGUgcHJvcG9zZXIgZGVzIGRpc3BvcyBwb3VyIHVuIGRlai4NCg0KQSB0csOocyBiaWVudMO0dCwNCg0KDQoNCi0tLQ0KDQpWaW5jZW50IEtMSU5HQkVJTCAgW2NpZDppbWFnZTAwMy5qcGdAMDFDRjFEQjIuQkZCMTVEOTBdICBEaXJlY3RldXIgQXNzb2Npw6kNCjExLCBydWUgUm91Z2Vtb250IC0gNzUwMDkgUGFyaXMNClRlbCAgIDogMDEgODQgMTYgMTYgNTUNCk1vYiA6IDA2IDIyIDcyIDgzIDE3DQpFLW1haWwgOiB2aW5jZW50LmtsaW5nYmVpbEBhbWV0aXguY29tPG1haWx0bzp2aW5jZW50LmtsaW5nYmVpbEBhbWV0aXguY29tPg0KU2l0ZSA6IGh0dHA6Ly93d3cuYW1ldGl4LmNvbTxodHRwOi8vd3d3LmFtZXRpeC5jb20vPg0KDQpbY2lkOmltYWdlMDA0LnBuZ0AwMUNGMURCMi5CRkIxNUQ5MF0NCg0KDQo="}}, {:partId=>"0.1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=\"utf-8\""}, {:name=>"Content-Transfer-Encoding", :value=>"base64"}], :body=>{:size=>8246, :data=>"PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI-DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPCEtLVtpZiAhbXNvXT48c3R5bGU-dlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kb1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0KLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQo8L3N0eWxlPjwhW2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6R2FkdWdpOw0KCXBhbm9zZS0xOjIgMTEgNSAyIDQgMiA0IDIgMiAzO30NCi8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsc2VyaWY7fQ0KYTpsaW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxlOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0Kc3Bhbi5FbWFpbFN0eWxlMTcNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6IzFGNDk3RDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2luOjcwLjg1cHQgNzAuODVwdCA3MC44NXB0IDcwLjg1cHQ7fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8-DQo8L286c2hhcGVsYXlvdXQ-PC94bWw-PCFbZW5kaWZdLS0-DQo8L2hlYWQ-DQo8Ym9keSBsYW5nPSJGUiIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI-DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0Q7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkJvbmpvdXIgSnVsaWUsDQo8bzpwPjwvbzpwPjwvc3Bhbj48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI-PG86cD4mbmJzcDs8L286cD48L3NwYW4-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0Q7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkxlIHBsdXMgdMO0dCBzZXJhIGxlIG1pZXV4LCBq4oCZYWkgaMOidGUmbmJzcDshDQo8bzpwPjwvbzpwPjwvc3Bhbj48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI-PG86cD4mbmJzcDs8L286cD48L3NwYW4-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0Q7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkplIGJsb3F1ZSBsZSAxMi8wMjxvOnA-PC9vOnA-PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI-TWVyY2k8bzpwPjwvbzpwPjwvc3Bhbj48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI-PG86cD4mbmJzcDs8L286cD48L3NwYW4-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PGI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmIj5EZSZuYnNwOzo8L3NwYW4-PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI-IEp1bGllIERlc2sgW21haWx0bzpqdWxpZUBqdWxpZWRlc2suY29tXQ0KPGJyPg0KPGI-RW52b3nDqSZuYnNwOzo8L2I-IG1lcmNyZWRpIDE0IGphbnZpZXIgMjAxNSAxNzozOTxicj4NCjxiPsOAJm5ic3A7OjwvYj4gVmluY2VudCBLbGluZ2JlaWw8YnI-DQo8Yj5DYyZuYnNwOzo8L2I-IFNhbmRyYSBQZXJlejxicj4NCjxiPk9iamV0Jm5ic3A7OjwvYj4gUmU6IERlajxvOnA-PC9vOnA-PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA-Jm5ic3A7PC9vOnA-PC9wPg0KPGRpdj4NCjxkaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5Cb25qb3VyIFNhbmRyYSw8YnI-DQo8YnI-DQpWaW5jZW50IGVzdCBkaXNwb25pYmxlIHBvdXIgZMOpamV1bmVyIGF2ZWMgdm91cyBhdXggaG9yYWlyZXMgc3VpdmFudHMgOjxicj4NCjxicj4NCi0gSmV1ZGkgMTIgRsOpdnJpZXIgw6AgMTI6MzA8YnI-DQotIFZlbmRyZWRpIDEzIEbDqXZyaWVyIMOgIDEyOjMwPGJyPg0KLSBMdW5kaSAxNiBGw6l2cmllciDDoCAxMjozMDxicj4NCi0gTWVyY3JlZGkgMTggRsOpdnJpZXIgw6AgMTI6MzA8YnI-DQo8YnI-DQo8YnI-DQpRdWVsIGhvcmFpcmUgdm91cyBjb252aWVudCBsZSBtaWV1eCA_PG86cD48L286cD48L3A-DQo8L2Rpdj4NCjxkaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48aW1nIGlkPSJfeDAwMDBfaTEwMjUiIHNyYz0iaHR0cHM6Ly9tYWlsZm9vZ2FlLmFwcHNwb3QuY29tL3Q_c2VuZGVyPWFhblZzYVdWQWFuVnNhV1ZrWlhOckxtTnZiUSUzRCUzRCZhbXA7dHlwZT16ZXJvY29udGVudCZhbXA7Z3VpZD02NDcxZGFjYS0wODYwLTQ3YWEtYTlkZS1iYjI5MzFlOTUxMWYiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6Ny41cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7R2FkdWdpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6d2hpdGUiPuGQpzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY-DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PGJyIGNsZWFyPSJhbGwiPg0KPG86cD48L286cD48L3A-DQo8ZGl2Pg0KPGRpdj4NCjxkaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5Db3JkaWFsZW1lbnQsPG86cD48L286cD48L3A-DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI-PG86cD4mbmJzcDs8L286cD48L3A-DQo8L2Rpdj4NCjxkaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5KdWxpZTxvOnA-PC9vOnA-PC9wPg0KPC9kaXY-DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxkaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4yMDE1LTAxLTE0IDE3OjI4IEdNVCYjNDM7MDE6MDAgVmluY2VudCBLbGluZ2JlaWwgJmx0OzxhIGhyZWY9Im1haWx0bzp2aW5jZW50a2xpbmdiZWlsQGFtZXRpeC5jb20iIHRhcmdldD0iX2JsYW5rIj52aW5jZW50a2xpbmdiZWlsQGFtZXRpeC5jb208L2E-Jmd0Ozo8bzpwPjwvbzpwPjwvcD4NCjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MGNtIDBjbSAwY20gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXJpZ2h0OjBjbSI-DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI-SGVsbG8gU2FuZHJhLDxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI-SnVsaWUgKGVuIGNjKSB2YSB0ZSBwcm9wb3NlciBkZXMgZGlzcG9zIHBvdXIgdW4gZGVqLjxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj48YnI-DQpBIHRyw6hzIGJpZW50w7R0LDxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI-Jm5ic3A7PG86cD48L286cD48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPiZuYnNwOzxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO2JhY2tncm91bmQ6d2hpdGUiPg0KPGI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzVFNUU1RSI-LS0tPC9zcGFuPjwvYj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bztiYWNrZ3JvdW5kOndoaXRlIj4NCjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9yOiM1RTVFNUUiPiZuYnNwOzwvc3Bhbj48L2I-PG86cD48L286cD48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87YmFja2dyb3VuZDp3aGl0ZSI-DQo8Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtjb2xvcjojNUU1RTVFIj5WaW5jZW50IEtMSU5HQkVJTCAmbmJzcDs8aW1nIGJvcmRlcj0iMCIgd2lkdGg9IjE3IiBoZWlnaHQ9IjE3IiBpZD0iX3gwMDAwX2kxMDI2IiBzcmM9ImNpZDppbWFnZTAwMS5qcGdAMDFEMDMwMjAuQTgxRDNFQzAiIGFsdD0iY2lkOmltYWdlMDAzLmpwZ0AwMUNGMURCMi5CRkIxNUQ5MCI-IERpcmVjdGV1ciBBc3NvY2nDqTwvc3Bhbj48L2I-PG86cD48L286cD48L3A-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87YmFja2dyb3VuZDp3aGl0ZSI-DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2NvbG9yOiM1RTVFNUUiPjExLCBydWUgUm91Z2Vtb250IC0gNzUwMDkgUGFyaXM8L3NwYW4-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6YmxhY2siPjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2NvbG9yOiM1RTVFNUUiPlRlbCZuYnNwOyAmbmJzcDs6IDAxIDg0IDE2IDE2IDU1PC9zcGFuPjxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO2JhY2tncm91bmQ6d2hpdGUiPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtjb2xvcjojNUU1RTVFIj5Nb2IgOiAwNiAyMiA3MiA4MyAxNzxicj4NCkUtbWFpbCA6IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2NvbG9yOiM1QjlCRDUiPjxhIGhyZWY9Im1haWx0bzp2aW5jZW50LmtsaW5nYmVpbEBhbWV0aXguY29tIiB0YXJnZXQ9Il9ibGFuayI-PHNwYW4gc3R5bGU9ImNvbG9yOiM1QjlCRDUiPnZpbmNlbnQua2xpbmdiZWlsQGFtZXRpeC5jb208L3NwYW4-PC9hPg0KPC9zcGFuPjxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvO2JhY2tncm91bmQ6d2hpdGUiPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtjb2xvcjojNUU1RTVFIj5TaXRlIDogPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Y29sb3I6IzVCOUJENSI-PGEgaHJlZj0iaHR0cDovL3d3dy5hbWV0aXguY29tLyIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjojNUI5QkQ1Ij5odHRwOi8vd3d3LmFtZXRpeC5jb208L3NwYW4-PC9hPg0KPC9zcGFuPjxvOnA-PC9vOnA-PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC41cHQ7Y29sb3I6YmxhY2siPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMjM2IiBoZWlnaHQ9IjEwNCIgaWQ9Il94MDAwMF9pMTAyNyIgc3JjPSJjaWQ6aW1hZ2UwMDIucG5nQDAxRDAzMDIwLkE4MUQzRUMwIiBhbHQ9ImNpZDppbWFnZTAwNC5wbmdAMDFDRjFEQjIuQkZCMTVEOTAiPjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI-Jm5ic3A7PG86cD48L286cD48L3A-DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY-DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY-DQo8L2JvZHk-DQo8L2h0bWw-DQo="}}]}, {:partId=>"1", :mimeType=>"image/jpeg", :filename=>"image001.jpg", :headers=>[{:name=>"Content-Type", :value=>"image/jpeg; name=\"image001.jpg\""}, {:name=>"Content-Description", :value=>"image001.jpg"}, {:name=>"Content-Disposition", :value=>"inline; filename=\"image001.jpg\"; size=745; creation-date=\"Wed, 14 Jan 2015 16:41:12 GMT\"; modification-date=\"Wed, 14 Jan 2015 16:41:12 GMT\""}, {:name=>"Content-ID", :value=>"<image001.jpg@01D03020.A81D3EC0>"}, {:name=>"Content-Transfer-Encoding", :value=>"base64"}], :body=>{:attachmentId=>"ANGjdJ9EUce9luxTns6YCguM66uWOxWwYQvDeG0x_b--7WtuX286rMcFGJCzxreUbo81SqPcPmi_SH4Pwj5n6OhAGDh1U2vogEB2JE13baFrUObxecXTeaaO6jeq78j7dv6ZtY0ivtRdQQKFDddIctZ2xDYJ7YuMNm1LDpuWGR5f_yNIDL-9t5EQY8FWEGhcXAZOS_JSxqc5v469Mxt9bRK6-r-8I7p6C9kEtxm6s1DMpEMaV0veKGU7Fcu7kpO7_6xoCc16fMGDWnlX5tmRv1KGopc9E5WQoq453aFAig", :size=>1024}}, {:partId=>"2", :mimeType=>"image/png", :filename=>"image002.png", :headers=>[{:name=>"Content-Type", :value=>"image/png; name=\"image002.png\""}, {:name=>"Content-Description", :value=>"image002.png"}, {:name=>"Content-Disposition", :value=>"inline; filename=\"image002.png\"; size=18240; creation-date=\"Wed, 14 Jan 2015 16:41:13 GMT\"; modification-date=\"Wed, 14 Jan 2015 16:41:13 GMT\""}, {:name=>"Content-ID", :value=>"<image002.png@01D03020.A81D3EC0>"}, {:name=>"Content-Transfer-Encoding", :value=>"base64"}], :body=>{:attachmentId=>"ANGjdJ9ZpRLg9NX7RpBGCcmbfrARNV5R3BJLY2O5jKfpgfpe1rntEYXw0Vr0bIYMMU9DJ3jc-ofm2NNsKeu5wkjB3IglrGe19BHrgjWh9Mz_65H-Lp3x_avlwVg4Tm1lmyWF6POmK5BN64vlwQGcSJbaytrRI6PuRVeLLBWI32xfllZi-N_Pf9JNPgNouf_jVP8XFzl9pPD6gIaUugsMNdUXPEyx0pY00JOhgkP1P0Wcz6EU931R9Au19mYdO87ROzdBAea7ekqA3xHT5E7XpnC5O9XyJAray1D9iPWVcQ", :size=>24960}}]}, :sizeEstimate=>44153}
23
+ end
24
+
25
+ def test_draft_list(params={})
26
+ {:drafts=>[{:id=>"1490204870554280932", :message=>{:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4"}}, {:id=>"1490204870554280939", :message=>{:id=>"14ae456f2ff1e3e5", :threadId=>"14ae456f2ff1e3e5"}}], :resultSizeEstimate=>2}.merge(params)
27
+ end
28
+
29
+ def test_label params={}
30
+ {
31
+ :id=>"CATEGORY_UPDATES",
32
+ :name=>"CATEGORY_UPDATES",
33
+ :messageListVisibility=>"hide",
34
+ :labelListVisibility=>"labelHide",
35
+ :type=>"system",
36
+ :messagesTotal=>129,
37
+ :messagesUnread=>33,
38
+ :threadsTotal=>105,
39
+ :threadsUnread=>21
40
+ }.merge(params)
41
+ end
42
+
43
+ def test_label_list(params={})
44
+ {:labels=>[{:id=>"CATEGORY_UPDATES", :name=>"CATEGORY_UPDATES", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"UNREAD", :name=>"UNREAD", :type=>"system"}, {:id=>"DRAFT", :name=>"DRAFT", :messageListVisibility=>"hide", :labelListVisibility=>"labelShow", :type=>"system"}, {:id=>"INBOX", :name=>"INBOX", :messageListVisibility=>"hide", :labelListVisibility=>"labelShow", :type=>"system"}, {:id=>"CATEGORY_PROMOTIONS", :name=>"CATEGORY_PROMOTIONS", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"CATEGORY_SOCIAL", :name=>"CATEGORY_SOCIAL", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"CATEGORY_PERSONAL", :name=>"CATEGORY_PERSONAL", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"CATEGORY_FORUMS", :name=>"CATEGORY_FORUMS", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"TRASH", :name=>"TRASH", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"IMPORTANT", :name=>"IMPORTANT", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}, {:id=>"SENT", :name=>"SENT", :messageListVisibility=>"hide", :labelListVisibility=>"labelShow", :type=>"system"}, {:id=>"STARRED", :name=>"STARRED", :messageListVisibility=>"hide", :labelListVisibility=>"labelShow", :type=>"system"}, {:id=>"SPAM", :name=>"SPAM", :messageListVisibility=>"hide", :labelListVisibility=>"labelHide", :type=>"system"}]}.merge(params)
45
+ end
46
+
47
+ def test_thread(params = {})
48
+ {:id=>"14ae456f2ff1e3e4", :historyId=>"227960", :messages=>[
49
+ {:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4", :labelIds=>["DRAFT"], :snippet=>"sd Cordialement, Julie", :historyId=>"227960", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.64.21.4 with HTTP; Tue, 13 Jan 2015 09:28:31 -0800 (PST)"}, {:name=>"Date", :value=>"Tue, 13 Jan 2015 18:28:31 +0100"}, {:name=>"Message-ID", :value=>"<CAFXNVWSNjE652y4nau3nbWeoJ7RD_UsybHWa9-L6vvRi9j3nFQ@mail.gmail.com>"}, {:name=>"Subject", :value=>""}, {:name=>"From", :value=>"Julie Desk <julie@juliedesk.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=f46d042abf34a36bd9050c8bf335"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}], :body=>{:size=>28, :data=>"c2QNCkNvcmRpYWxlbWVudCwNCg0KSnVsaWUNCg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}], :body=>{:size=>154, :data=>"PGRpdiBkaXI9Imx0ciI-c2Q8YnIgY2xlYXI9ImFsbCI-PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPkNvcmRpYWxlbWVudCw8ZGl2Pjxicj48L2Rpdj48ZGl2Pkp1bGllPC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg=="}}]}, :sizeEstimate=>710},
50
+ {:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4", :labelIds=>["SENT"], :snippet=>"sd Cordialement, Julie", :historyId=>"227960", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.64.21.4 with HTTP; Tue, 13 Jan 2015 09:28:31 -0800 (PST)"}, {:name=>"Date", :value=>"Tue, 13 Jan 2015 18:28:31 +0100"}, {:name=>"Message-ID", :value=>"<CAFXNVWSNjE652y4nau3nbWeoJ7RD_UsybHWa9-L6vvRi9j3nFQ@mail.gmail.com>"}, {:name=>"Subject", :value=>""}, {:name=>"From", :value=>"Julie Desk <julie@juliedesk.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=f46d042abf34a36bd9050c8bf335"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}], :body=>{:size=>28, :data=>"c2QNCkNvcmRpYWxlbWVudCwNCg0KSnVsaWUNCg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}], :body=>{:size=>154, :data=>"PGRpdiBkaXI9Imx0ciI-c2Q8YnIgY2xlYXI9ImFsbCI-PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPkNvcmRpYWxlbWVudCw8ZGl2Pjxicj48L2Rpdj48ZGl2Pkp1bGllPC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg=="}}]}, :sizeEstimate=>710},
51
+ {:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4", :labelIds=>["UNREAD"], :snippet=>"sd Cordialement, Julie", :historyId=>"227960", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.64.21.4 with HTTP; Tue, 13 Jan 2015 09:28:31 -0800 (PST)"}, {:name=>"Date", :value=>"Tue, 13 Jan 2015 18:28:31 +0100"}, {:name=>"Message-ID", :value=>"<CAFXNVWSNjE652y4nau3nbWeoJ7RD_UsybHWa9-L6vvRi9j3nFQ@mail.gmail.com>"}, {:name=>"Subject", :value=>""}, {:name=>"From", :value=>"Julie Desk <julie@juliedesk.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=f46d042abf34a36bd9050c8bf335"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}], :body=>{:size=>28, :data=>"c2QNCkNvcmRpYWxlbWVudCwNCg0KSnVsaWUNCg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}], :body=>{:size=>154, :data=>"PGRpdiBkaXI9Imx0ciI-c2Q8YnIgY2xlYXI9ImFsbCI-PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPkNvcmRpYWxlbWVudCw8ZGl2Pjxicj48L2Rpdj48ZGl2Pkp1bGllPC9kaXY-PC9kaXY-PC9kaXY-PC9kaXY-DQo8L2Rpdj4NCg=="}}]}, :sizeEstimate=>710},
52
+
53
+ ]}.merge(params)
54
+ end
55
+
56
+ def test_thread_list
57
+ {:threads=>[{:id=>"14ae456f2ff1e3e4", :snippet=>"", :historyId=>"227960"}, {:id=>"14ae4438ed604170", :snippet=>"", :historyId=>"227955"}, {:id=>"14ac91101e18bed8", :snippet=>"", :historyId=>"227646"}, {:id=>"14ae3d759a2166d1", :snippet=>"", :historyId=>"227565"}, {:id=>"14acfd71d2f20308", :snippet=>"", :historyId=>"227430"}], :nextPageToken=>"11260038910369504656", :resultSizeEstimate=>25}
58
+ end
59
+
60
+ def test_message(params = {})
61
+ {:id=>"14ada61b92db5e63", :threadId=>"14ada58320652fc7", :labelIds=>["IMPORTANT", "CATEGORY_PERSONAL"], :snippet=>"Bonsoir David Merci pour votre retour. Je verrai demain avec Julie, quand fixer un RDV téléphonique.", :historyId=>"219674", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Delivered-To", :value=>"julie@juliedesk.com"}, {:name=>"Received", :value=>"by 10.64.89.39 with SMTP id bl7csp849585ieb; Sun, 11 Jan 2015 11:04:05 -0800 (PST)"}, {:name=>"X-Received", :value=>"by 10.180.75.237 with SMTP id f13mr23178958wiw.69.1421003044898; Sun, 11 Jan 2015 11:04:04 -0800 (PST)"}, {:name=>"Return-Path", :value=>"<arlenebentolila@gmail.com>"}, {:name=>"Received", :value=>"from mail-wg0-x232.google.com (mail-wg0-x232.google.com. [2a00:1450:400c:c00::232]) by mx.google.com with ESMTPS id o4si9737386wia.79.2015.01.11.11.04.04 for <julie@juliedesk.com> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 11 Jan 2015 11:04:04 -0800 (PST)"}, {:name=>"Received-SPF", :value=>"pass (google.com: domain of arlenebentolila@gmail.com designates 2a00:1450:400c:c00::232 as permitted sender) client-ip=2a00:1450:400c:c00::232;"}, {:name=>"Authentication-Results", :value=>"mx.google.com; spf=pass (google.com: domain of arlenebentolila@gmail.com designates 2a00:1450:400c:c00::232 as permitted sender) smtp.mail=arlenebentolila@gmail.com; dkim=pass header.i=@gmail.com; dmarc=pass (p=NONE dis=NONE) header.from=gmail.com"}, {:name=>"Received", :value=>"by mail-wg0-f50.google.com with SMTP id a1so15938647wgh.9 for <julie@juliedesk.com>; Sun, 11 Jan 2015 11:04:04 -0800 (PST)"}, {:name=>"DKIM-Signature", :value=>"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=mEmKhvWjFpq+DnO0xxdPjpd/i7MTfctQp+prGlYASc4=; b=ouf26RPtOvk9wATJjcDxdOET2WD58x6efOOd8sZXt9c09mCoAsocVHyihpWWacId9j qtuhKv/bTOe8AbMnk3JU4PHgnyJyCDL3gRjUrnlzMmwb92gd2c6TxS/p711fYvDfrz+L jyABwocRbJSBTH/YsGPh/sP/z89oE0Aox5QIvd7PE1ykUWIhk4GVhGx7qf/SEImA4oGB zb17MgSVHx7s9glVeibxturDZXJPSPS/sFX4VgHtMT4GlKvjtiLKJl3G+rIAbV+YsIet zmcrurpZM97/ztnL/8IrQG17Kqe+JqanNlVwvhEMfTLOxooC+5p1v1tdHvN+8RMAcYWv QyrQ=="}, {:name=>"X-Received", :value=>"by 10.194.175.102 with SMTP id bz6mr2702286wjc.120.1421003043927; Sun, 11 Jan 2015 11:04:03 -0800 (PST)"}, {:name=>"Return-Path", :value=>"<arlenebentolila@gmail.com>"}, {:name=>"Received", :value=>"from [192.168.0.39] (fes75-2-78-192-50-38.fbxo.proxad.net. [78.192.50.38]) by mx.google.com with ESMTPSA id i15sm18583199wjq.22.2015.01.11.11.04.02 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 11 Jan 2015 11:04:02 -0800 (PST)"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=Apple-Mail-47C5C329-5673-4226-945A-D9F99028CBB5"}, {:name=>"Mime-Version", :value=>"1.0 (1.0)"}, {:name=>"Subject", :value=>"Re: Recommandation Sup de Luxe pour sujet de mémoire Arlène Bentolila"}, {:name=>"From", :value=>"\"Arlène Bentolila\" <arlenebentolila@gmail.com>"}, {:name=>"X-Mailer", :value=>"iPhone Mail (12B440)"}, {:name=>"In-Reply-To", :value=>"<CAFgv0K+4a9t+myY1o=pyeDS8FnaEbqff1=gLmC45eXP5nyR9ww@mail.gmail.com>"}, {:name=>"Date", :value=>"Sun, 11 Jan 2015 20:04:01 +0100"}, {:name=>"Cc", :value=>"Julie Desk <julie@juliedesk.com>"}, {:name=>"Bcc", :value=>"Julien <julien@juliedesk.com>"}, {:name=>"Content-Transfer-Encoding", :value=>"7bit"}, {:name=>"Message-Id", :value=>"<CF1519BA-7935-4F27-B41E-33CBF7637858@gmail.com>"}, {:name=>"References", :value=>"<CAHSJCBFtGzz7_BqoWqNgJUCsgoLZDyOj56-uT9pKB6+eoO6HGA@mail.gmail.com> <CAFgv0K+4a9t+myY1o=pyeDS8FnaEbqff1=gLmC45eXP5nyR9ww@mail.gmail.com>"}, {:name=>"To", :value=>"David Alexandre Klingbeil <dak@dymant.com>"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=utf-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>6912, :data=>"Qm9uc29pciBEYXZpZA0KDQpNZXJjaSBwb3VyIHZvdHJlIHJldG91ci4gSmUgdmVycmFpIGRlbWFpbiBhdmVjIEp1bGllLCBxdWFuZCBmaXhlciB1biBSRFYgdMOpbMOpcGhvbmlxdWUuIA0KDQpQb3VyIGluZm9ybWF0aW9uLCBqJ2FpIGFqdXN0w6kgbW9uIHN1amV0IGRlIG3DqW1vaXJlIHF1ZSBqZSB0cm91dmFpcyB0cm9wIGNsYXNzaXF1ZSBldCBjZSwgYXByw6hzIGF2b2lyIMOpY2hhbmfDqSBhdmVjIGRlcyBjb25zdWx0YW50cy4gIA0KSmUgdm91cyBsJ2V4cG9zZSBjaS1kZXNzb3VzLiBWb3MgY29uc2VpbHMgZXQgcmVtYXJxdWVzIG1lIHNlcm9udCB0cmVzIHV0aWxlcy4gIA0KDQpTdWpldCAoZW52b3nDqSDDoCBTdXAgZGUgTHV4ZSBhdmFudCBoaWVyLCBWZW5kcmVkaSk6IA0KDQpDb21tZW50IGxlcyBtYXJxdWVzIGRlIG1vZGUgZXQgZGUgam9haWxsZXJpZSBzJ3kgcHJlbm5lbnQgcG91ciBhcHByw6loZW5kZXIgbGVzIG9iamV0cyBjb25uZWN0w6lzIGRhbnMgbGV1ciBzdHJhdMOpZ2llIGQnb2ZmcmU_IA0KSmUgdmV1eCBkw6ltb250cmVyIHF1ZSBsZXMgb2JqZXRzIGNvbm5lY3TDqXMgc29udCB1biBsZXZpZXIgZGUgY3JvaXNzYW5jZSBldCBkZSBkaWZmw6lyZW5jaWF0aW9uLiBKZSB2ZXV4IGFuYWx5c2VyIGxlcyBjb21wb3J0ZW1lbnRzIGRlcyBtYXJxdWVzIGZhY2Ugw6AgY2V0IGVuamV1eDogdm9udCAtIGVsbGVzIHJlc3TDqWVzIGRhbnMgbGUgY2xhc3NpY2lzbWUgYXZlYyBkZXMgbWF0acOocmVzIG5vYmxlcyBwYXIgZXhlbXBsZSBvdSDDqXZvbHVlciBkZSBmYcOnb24gc2lnbmlmaWNhdGl2ZXMgYXZlYyBsZXMgb2JqZXRzIGNvbm5lY3TDqXM_IENvbW1lbnQgYXBwcsOpaGVuZGVudCAtIGVsbGVzIGNlIGNoYW5nZW1lbnQgZGlnaXRhbCBkYW5zIGxldXIgc3RyYXTDqWdpZSBk4oCZb2ZmcmUgZXQgZGUgZMOpdmVsb3BwZW1lbnQ_DQoNCkJpZW4gw6Agdm91cyANCkFybMOobmUNCg0KQXJsw6huZSBCZW50b2xpbGENCkVudm95w6kgZGUgbW9uIGlQaG9uZS4NCjA2IDYyIDE4IDQ3IDA4DQoNCg0KPiBMZSAxMSBqYW52LiAyMDE1IMOgIDE5OjUzLCBEYXZpZCBBbGV4YW5kcmUgS2xpbmdiZWlsIDxkYWtAZHltYW50LmNvbT4gYSDDqWNyaXQgOg0KPiANCj4gQm9uc29pciBBcmxlbmUsDQo-IA0KPiBQYXJsb25zLWVuIHBhciB0w6lsw6lwaG9uZSBjZXR0ZSBzZW1haW5lIG91IGxhIHN1aXZhbnRlDQo-IA0KPiBKdWxpZSAoZW4gY2MpIHZhIHZvdXMgY29udGFjdGVyIHBvdXIgdHJvdXZlciB1biBjcsOpbmVhdSBkZSAzMG1pbiBwb3VyIHVuIGNhbGwuDQo-IA0KPiBQYXNzZXogdW5lIGV4Y2VsbGVudGUgZmluIGRlIHdlZWstZW5kLA0KPiANCj4gQSBiaWVudMO0dCwNCj4gDQo-IERhdmlkDQo-IA0KPiBEYXZpZCBBbGV4YW5kcmUgS2xpbmdiZWlsDQo-IENFTyAmIENvLUZvdW5kZXIgfCBEeW1hbnQuY29tDQo-IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCj4gTS4gZGFrQGR5bWFudC5jb20NCj4gVCAuICszMyA2IDYzIDk0IDc3IDQzDQo-IEBEYXZpZEtsaW5nYmVpbA0KPiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQo-IA0KPiANCj4gTGUgNSBqYW52aWVyIDIwMTUgMTM6MTksIEFybGVuZSBCZW50b2xpbGEgPGFybGVuZWJlbnRvbGlsYUBnbWFpbC5jb20-IGEgw6ljcml0IDoNCj4-IENoZXIgTW9uc2lldXIsDQo-PiANCj4-IEonYWkgbGUgcGxhaXNpciBkZSB2b3VzIGNvbnRhY3RlciBzdXIgbGVzIGNvbnNlaWxzIGRlIE1hZGFtZSBsZSBHb3VndWVjLCBEaXJlY3RyaWNlIHDDqWRhZ29naXF1ZSDDoCBTdXAgZGUgTHV4ZSBkYW5zIGxlIGNhZHJlIGRlIGxhIHByw6lwYXJhdGlvbiBkZSBtb24gbcOpbW9pcmUuIENlbHVpIC0gY2kgZG9pdCDDqnRyZSB1biByYXBwb3J0IHByb2Zlc3Npb25uZWwgY29uY3JldCBldCBwZXJ0aW5lbnQgZXQgbm9uIHBhcyAiYWNhZMOpbWlxdWUuIEplIHZvdXMgcHJvcG9zZSBkJ2VuIGTDqWNvdXZyaXIgbGUgc3VqZXQgZW4gcGnDqGNlIGpvaW50ZSBldCBsYSByw6lwb25zZSBkZSBTdXAgZGUgTHV4ZSBlbiBiYXMgZGUgY2UgbWFpbC4gDQo-PiANCj4-IERhbnMgbGEgcGVyc3BlY3RpdmUgZGUgdm91cyByZW5jb250cmVyLCBqZSBtZSBwcm9wb3NlIGRlIHZvdXMgcsOpc3VtZXIgbW9uIHBhcmNvdXJzIGV0IG1vbiBvYmplY3RpZiBwcm9mZXNzaW9ubmVscyBlbiByYXBwb3J0IGF2ZWMgbW9uIG3DqW1vaXJlLiANCj4-IA0KPj4gUGFyY291cnMNCj4-IEonYWkgdW5lIGV4cMOpcmllbmNlIHByb2Zlc3Npb25uZWxsZSBkZSBwcsOocyBkZSAxNSBhbnMgZW4gdGFudCBxdWUgRGlyZWN0cmljZSBkZSBjbGllbnTDqGxlIHByZXNzZSDDqWNyaXRlIGF1IHNlaW4gZGUgZ3JhbmRzIGdyb3VwZXMgbcOpZGlhcyAoVMOpbMOpcmFtYSwgTGFnYXJkw6hyZSkuIEonYWkgc3DDqWNpYWxpc8OpIGNldHRlIGV4cMOpcmllbmNlIGNvbW1lcmNpYWxlIGRlcHVpcyA4IGFucyBzdXIgbGVzIHNlY3RldXJzIGR1IGx1eGUgZXQgZGUgbGEgbW9kZSBlbiB0cmF2YWlsbGFudCBzdXIgbGVzIHByb2pldHMgZGUgY29tbXVuaWNhdGlvbiBwdWJsaWNpdGFpcmUgZGVzIGFubm9uY2V1cnMgZMOpZGnDqXMgZXQgcG91ciBkZXMgbWFycXVlcyBkZSBwcmVzc2UgaGF1dCBkZSBnYW1tZSBldCBsdXhlIChFbGxlLCBOdW3DqXJvLjs7KS4gTW9uIENWIGVzdCBlbiBwacOoY2Ugam9pbnRlLg0KPj4gDQo-PiBQcm9qZXQgcHJvZmVzc2lvbm5lbA0KPj4gSmUgdmV1eCBhbGxleiBwbHVzIGxvaW4gZGFucyBtb24gZMOpdmVsb3BwZW1lbnQgZGUgbWFycXVlcyBkZSBsdXhlIHNvaXQgYXUgbml2ZWF1IGNvbW1lcmNpYWwgc29pdCBhdSBuaXZlYXUgZGUgbGEgY29tbXVuaWNhdGlvbiBldCBjJ2VzdCBwb3VycXVvaSBqJ2FpIGludMOpZ3LDqSBTdXAgZGUgTHV4ZS4gSmUgdmlzZSBwb3VyIHNlcHRlbWJyZSBhdSBwbHVzIHRhcmQsIHVuZSBhY3Rpdml0w6kgY29tbWVyY2lhbGUgYXUgc2VpbiBkJ3VuZSBtYXJxdWUgZGUgbHV4ZS9tb2RlIG91IGVuIGFnZW5jZSAoZMOpdmVsb3BwZW1lbnQgb3UgY29uc2VpbCkuIFBvdXIgeSBwYXJ2ZW5pciBldCBlbnJpY2hpciBtYSB2YWxldXIgc3VyIGxlIG1hcmNow6ksIGplIGRvaXMgY29uc29saWRlciBjZSBxdWkgcydpbXBvc2UsIGxlIGRpZ2l0YWwhDQo-PiANCj4-IE3DqW1vaXJlIC0gcmFwcG9ydCBTdXAgZGUgTHV4ZQ0KPj4gSidhaSBkb25jIG9wdMOpIHBvdXIgdW4gc3VqZXQgZGUgbcOpbW9pcmUgcXVpIHBvcnRlIHN1ciBsZSBsdXhlIGTDqWZpw6kgcGFyIGxlIGRpZ2l0YWwuIEplIHZldXggZMOpbW9udHJlciBxdWUgbGUgbHV4ZSBlc3QgcsOpdGljZW50IGZhY2UgYXUgZGlnaXRhbCwgcG91cnRhbnQgZMOpY2lzaWYgZGFucyBsJ2FwcG9ydCBkZSBub3V2ZWF1eCBzZXJ2aWNlcyBldCBkYW5zIGxlIGTDqXBsb2llbWVudCBkdSBsdXhlLiAgDQo-PiBNYWlzIG1vbiBzdWpldCBlc3QgdHJvcCBsYXJnZS4gSmUgbmUgcGV1eCB0cmFpdGVyIGRlIHRvdXMgbGVzIHNlcnZpY2VzIGFwcG9ydMOpcyBwYXIgbGUgZGlnaXRhbC4gSidow6lzaXRlIGVudHJlIGxhIGNvbW11bmljYXRpb24gZXQgbGEgc3RyYXTDqWdpZSBkJ29mZnJlIChwcm9kdWl0cykuIFF1ZWwgZXN0IGxlIHBsdXMgInV0aWxlIGQnYXByw6hzIHZvdXMiPw0KPj4gRGUgcGx1cyBqZSBuZSBwZXV4IHRyYWl0ZXIgZHUgbHV4ZSBlbiBnw6luw6lyYWwuIEplIGRvaXMgY2hvaXNpciB1biBzZWdtZW50IGRlIGNlbHVpLWNpIC4gSmUgc291aGFpdGUgZm9jYWxpc2VyIHN1ciBsYSBqb2FpbGxlcmllIHF1aSBtZSBzZW1ibGUgcGx1cyBkw6lmacOpZSBwYXIgbGUgZGlnaXRhbCBjYXIgY2Ugc29udCBkZXV4ICJtYXJjaMOpcyIgYSBwcmlvcmkgYW50aW5vbWlxdWVzLiBDb21wcmVuZHJlIGxhIGNvbXBsZXhpdMOpIGR1IGR1byBKb2FpbGxlcmllIC8gZGlnaXRhbCBtZSBzZW1ibGUgw6lnYWxlbWVudCBwbHVzIGTDqXRlcm1pbmFudCBwb3VyIGNvbXByZW5kcmUgbGVzIGVuamV1eCBwb3PDqXMgcGFyIGxlIGRpZ2l0YWwuIFF1J2VuIHBlc25lei12b3VzPw0KPj4gDQo-PiBKZSB2b3VzIHJlbWVyY2llIHBhciBhdmFuY2UgcG91ciBsJ2F0dGVudGlvbiBxdWUgdm91cyBhY2NvcmRlcmV6IMOgIG1vbiBwcm9qZXQgZXQgamUgdm91cyBwcm9wb3NlIGRlIGNvbnZlbmlyIGQndW4gcmVuZGV6IC0gdm91cyBwb3VyIGF2YW5jZXIgc3VyIGNlbHVpLWNpLiBKZSBzdWlzIGRpc3BvbmlibGUgY2V0dGUgc2VtYWluZSDDoCB2b3RyZSBjb252ZW5hbmNlIGV0IHZvdXMgcG91dmV6IG3igJlhcHBlbGVyIGF1IDA2IDYyIDE4IDQ3IDA4Lg0KPj4gDQo-PiBCaWVuIMOgIHZvdXMsDQo-PiANCj4-IEFybMOobmUgQmVudG9saWxhDQo-PiANCj4-IA0KPj4gLS0tLS0tLS0tLSBNZXNzYWdlIHRyYW5zZsOpcsOpIC0tLS0tLS0tLS0NCj4-IERlIDogR2hpc2xhaW5lIExlIEdvdWd1ZWMgPGdsZWdvdWd1ZWNAZWRjcGFyaXMuZWR1Pg0KPj4gRGF0ZSA6IDE5IGTDqWNlbWJyZSAyMDE0IDE5OjQ2DQo-PiBPYmpldCA6IFJFOiBTdWpldCBkZSBtw6ltb2lyZSB1bmlxdWUgQXJsw6huZSBldCAiZXhlcmNpY2UiIDogamUgdmV1eCBkw6ltb250cmVyIHF1ZQ0KPj4gw4AgOiBBcmxlbmUgQmVudG9saWxhIDxhcmxlbmViZW50b2xpbGFAZ21haWwuY29tPg0KPj4gQ2MgOiB0ZGVsYXJpdmllcmUgPHRkZWxhcml2aWVyZUBlZGNwYXJpcy5lZHU-DQo-PiANCj4-IA0KPj4gQ2jDqHJlIEFybMOobmUsDQo-PiANCj4-IE1lcmNpIHBvdXIgY2VzIGluZm9ybWF0aW9ucy4NCj4-IA0KPj4gTm91cyBwcmVub25zIG5vdGUgZGUgdm90cmUgbm91dmVhdSBzdWpldCBkZSBtw6ltb2lyZSA6ICBMZXMgZMOpZmlzIGR1IGRpZ2l0YWwgZGFucyBsZXMgc3RyYXTDqWdpZXMgZGUgZMOpdmVsb3BwZW1lbnQgZHUgbHV4ZSBlbiBtYXRpw6hyZSAgZOKAmW9mZnJlLCBkZSBzZXJ2aWNlcywgZGUgZGlzdHJpYnV0aW9uIGV0IGRlIGNvbW11bmljYXRpb24NCj4-IA0KPj4gTm91cyBlbiB2YWxpZG9ucyBsZSB0aMOobWUgbWFpcyBwZW5zb25zIHRvdXRlZm9pcyBxdeKAmWlsIGVzdCBlbmNvcmUgdHJvcCBsYXJnZSBlbiB0ZXJtZSBkZSBww6lyaW3DqHRyZSBk4oCZYW5hbHlzZSArIGplIHBlbnNlIHF1ZSB2b3VzIGRldmV6IHZvdXMgY29uY2VudHJlciBzdXIgdW4gc2VjdGV1ciBldCBub24gbGUgbHV4ZSBlbiBnw6luw6lyYWwuDQo-PiANCj4-IFZvdXMgZGV2ZXogcmVuY29udHJlciBkZXMgcHJvZmVzc2lvbm5lbHMgcmFwaWRlbWVudCBxdWkgdm91cyBhaWRlcm9udCDDoCBkw6lmaW5pciB1bmUgcHJvYmzDqW1hdGlxdWUgcGx1cyBwcsOpY2lzZS4gTWVyY2kgZGUgY29udGFjdGVyIE3DqWxhbmllIHF1aSB2b3VzIGRvbm5lcmEgbGVzIGNvb3Jkb25uw6llcyBkZSBNb25zaWV1ciBHw6lyYWxkIEVTUEFSREVMTElFUiwgRGlyZWN0ZXVyIEFzc29jacOpIGRlIGxhIHNvY2nDqXTDqSBFTk9SQSBDb25zdWx0aW5nICsgY29udGFjdGV6IGRlIG5vdHJlIHBhcnQgRGF2aWQgQWxleGFuZHJlIEtsaW5nYmVpbCwgQ0VPICYgQ28tRm91bmRlciB8IER5bWFudC5jb20gLSAgZGFrQGR5bWFudC5jb20gKyBjbyBmb25kYXRldXIgZHUgbWFnYXppbmUgZGlnaXRhbCBXZWIgJiBMdXhlIGh0dHA6Ly93d3cud2ViYW5kbHV4ZS5jb20vYS1wcm9wb3MvDQo-PiANCj4-IEJpZW4gw6Agdm91cywNCj4-IA0KPj4gR2xHDQo-PiANCj4-ICANCj4-IA0KPj4gIA0KPj4gDQo-PiBEZSA6IEFybGVuZSBCZW50b2xpbGEgW21haWx0bzphcmxlbmViZW50b2xpbGFAZ21haWwuY29tXSANCj4-IEVudm95w6kgOiB2ZW5kcmVkaSAxOSBkw6ljZW1icmUgMjAxNCAxOToxOA0KPj4gw4AgOiBnaGlzbGFpbmUubGVnb3VndWVjQGVkY3BhcmlzLmVkdQ0KPj4gQ2MgOiB0aGliYXV0LmRlbGFyaXZpZXJlQGVkY3BhcmlzLmVkdQ0KPj4gT2JqZXQgOiBTdWpldCBkZSBtw6ltb2lyZSB1bmlxdWUgQXJsw6huZSBldCAiZXhlcmNpY2UiIDogamUgdmV1eCBkw6ltb250cmVyIHF1ZQ0KPj4gDQo-PiAgDQo-PiANCj4-IENoZXJzIHRvdXMNCj4-IA0KPj4gIA0KPj4gDQo-PiBKJ2FpIHJlcGVuc8OpIG1vbiBzdWpldCBkZSBtw6ltb2lyZSBlbiBmb25jdGlvbiBkZSBtZXMgZ2_Du3RzLCBkZSBtZXMgY29tcMOpdGVuY2VzIGV0IGRlIG1lcyBvYmplY3RpZnMgcHJvZmVzc2lvbm5lbHMuIA0KPj4gDQo-PiAgDQo-PiANCj4-IEplIHBhcnMgZG9uYyBzdXIgbGEgdmVyc2lvbiBxdWUgdm91cyBkw6ljb3V2cmlyZXogZW4gcGnDqGNlIGpvaW50ZSBldCBxdWkgcG9ydGUgc3VyIGxlcyBlbmpldXggZHUgZGlnaXRhbCBkYW5zIGxlcyBzdHJhdMOpZ2llcyBkZSBkw6l2ZWxvcHBlbWVudCBkdSBsdXhlIGVuIG1hdGnDqHJlIGQnb2ZmcmUsIGRlIHNlcnZpY2UsIGRlIGRpc3RyaWJ1dGlvbiBldCBkZSBjb21tdW5pY2F0aW9uLiANCj4-IA0KPj4gSmUgbWUgc3VpcyDDqWdhbGVtZW50IHByw6p0w6llIGF1IG7DqWNlc3NhaXJlIGV4ZXJjaWNlIGR1IDogICJqZSB2ZXV4IGTDqW1vbnRyZXIgcXVlIi4NCj4-IA0KPj4gIA0KPj4gDQo-PiBKZSByZXN0ZSDDoCB2b3RyZSDDqWNvdXRlIHBvdXIgZmluYWxpc2VyIGNldHRlIGZpY2hlIHDDqWRhZ29naXF1ZSBldCB2YWxpZGVyIG1vbiBzdWpldCBkZSBtw6ltb2lyZSBhdmFudCBsYSByZW50csOpZSBkZSBqYW52aWVyIHNpIGNlbGEgdm91cyBlc3QgcG9zc2libGUuIEplIHZhaXMgZCdvcmVzIGV0IGTDqWrDoCBjb21tZW5jZXIgbWVzIHJlY2hlcmNoZXMgZXQgZmFpcmUgdW5lIMOpYmF1Y2hlIGRlIHBsYW4gcGVuZGFudCBjZXMgdmFjYW5jZXMuIA0KPj4gDQo-PiAgDQo-PiANCj4-IEplIHZvdXMgc291aGFpdGUgZGUgdHLDqHMgYm9ubmVzIGbDqnRlcy4NCj4-IA0KPj4gIA0KPj4gDQo-PiBCaWVuIMOgIHZvdXMsDQo-PiANCj4-ICANCj4-IA0KPj4gQXJsw6huZQ0KPj4gDQo-IA0K"}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=utf-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>13612, :data=>"PGh0bWw-PGhlYWQ-PG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPjwvaGVhZD48Ym9keSBkaXI9ImF1dG8iPjxkaXY-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyI-PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7Ij48Yj5Cb25zb2lyIERhdmlkPC9iPjwvc3Bhbj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsiPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApOyI-PGI-PGJyPjwvYj48L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7Ij48Yj5NZXJjaSBwb3VyIHZvdHJlIHJldG91ci4gSmUgdmVycmFpIGRlbWFpbiBhdmVjIEp1bGllLCBxdWFuZCBmaXhlciB1biBSRFYgdMOpbMOpcGhvbmlxdWUuJm5ic3A7PC9iPjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyI-PGI-PGJyPjwvYj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsiPjxiPlBvdXIgaW5mb3JtYXRpb24sIGonYWkgYWp1c3TDqSBtb24gc3VqZXQgZGUgbcOpbW9pcmUgcXVlIGplIHRyb3V2YWlzIHRyb3AgY2xhc3NpcXVlIGV0IGNlLCBhcHLDqHMgYXZvaXIgw6ljaGFuZ8OpIGF2ZWMgZGVzIGNvbnN1bHRhbnRzLiAmbmJzcDs8L2I-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7Ij48Yj5KZSB2b3VzIGwnZXhwb3NlIGNpLWRlc3NvdXMuIFZvcyBjb25zZWlscyBldCByZW1hcnF1ZXMgbWUgc2Vyb250IHRyZXMgdXRpbGVzLiAmbmJzcDs8L2I-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7Ij48Yj48YnI-PC9iPjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyI-PGI-U3VqZXQgKGVudm95w6kgw6AgU3VwIGRlIEx1eGUgYXZhbnQgaGllciwgVmVuZHJlZGkpOiZuYnNwOzwvYj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsiPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApOyI-PGI-PGJyPjwvYj48L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7Ij48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTsiPjxiPkNvbW1lbnQgbGVzIG1hcnF1ZXMgZGUgbW9kZSBldCBkZSBqb2FpbGxlcmllIHMneSBwcmVubmVudCBwb3VyIGFwcHLDqWhlbmRlciBsZXMgb2JqZXRzIGNvbm5lY3TDqXMgZGFucyBsZXVyIHN0cmF0w6lnaWUgZCdvZmZyZT8mbmJzcDs8L2I-PG86cD48L286cD48L3NwYW4-PC9wPjwvZGl2PjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogMGNtIDBjbSAwLjAwMDFwdDsiPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApOyI-SmUgdmV1eCBkw6ltb250cmVyIHF1ZSBsZXMgb2JqZXRzIGNvbm5lY3TDqXMgc29udCB1biBsZXZpZXIgZGUgY3JvaXNzYW5jZSBldCBkZSBkaWZmw6lyZW5jaWF0aW9uLiBKZSB2ZXV4IGFuYWx5c2VyIGxlcyBjb21wb3J0ZW1lbnRzIGRlcyBtYXJxdWVzIGZhY2Ugw6AgY2V0IGVuamV1eDogdm9udCAtIGVsbGVzIHJlc3TDqWVzIGRhbnMgbGUgY2xhc3NpY2lzbWUgYXZlYyBkZXMgbWF0acOocmVzIG5vYmxlcyBwYXIgZXhlbXBsZSBvdSDDqXZvbHVlciBkZSBmYcOnb24gc2lnbmlmaWNhdGl2ZXMgYXZlYyBsZXMgb2JqZXRzIGNvbm5lY3TDqXM_IENvbW1lbnQgYXBwcsOpaGVuZGVudCAtIGVsbGVzIGNlIGNoYW5nZW1lbnQgZGlnaXRhbCBkYW5zIGxldXIgc3RyYXTDqWdpZSBk4oCZb2ZmcmUgZXQgZGUgZMOpdmVsb3BwZW1lbnQ_PC9zcGFuPjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyI-PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7Ij48YnI-PC9zcGFuPjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiAwY20gMGNtIDAuMDAwMXB0OyI-PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7Ij5CaWVuIMOgIHZvdXMmbmJzcDs8L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDBjbSAwY20gMC4wMDAxcHQ7Ij5BcmzDqG5lPC9wPjwvZGl2Pjxicj5BcmzDqG5lIEJlbnRvbGlsYTxkaXY-RW52b3nDqSBkZSBtb24gaVBob25lLjwvZGl2PjxkaXY-MDYgNjIgMTggNDcgMDg8L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj48ZGl2Pjxicj5MZSAxMSBqYW52LiAyMDE1IMOgIDE5OjUzLCBEYXZpZCBBbGV4YW5kcmUgS2xpbmdiZWlsICZsdDs8YSBocmVmPSJtYWlsdG86ZGFrQGR5bWFudC5jb20iPmRha0BkeW1hbnQuY29tPC9hPiZndDsgYSDDqWNyaXQmbmJzcDs6PGJyPjxicj48L2Rpdj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj48ZGl2PjxkaXYgZGlyPSJsdHIiPkJvbnNvaXIgQXJsZW5lLDxkaXY-PGJyPjwvZGl2PjxkaXY-UGFybG9ucy1lbiBwYXIgdMOpbMOpcGhvbmUgY2V0dGUgc2VtYWluZSBvdSBsYSBzdWl2YW50ZTwvZGl2PjxkaXY-PGJyPjwvZGl2PjxkaXY-SnVsaWUgKGVuIGNjKSB2YSB2b3VzIGNvbnRhY3RlciBwb3VyIHRyb3V2ZXIgdW4gY3LDqW5lYXUgZGUgMzBtaW4gcG91ciB1biBjYWxsLjwvZGl2PjxkaXY-PGJyPjwvZGl2PjxkaXY-UGFzc2V6IHVuZSBleGNlbGxlbnRlIGZpbiBkZSB3ZWVrLWVuZCw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkEgYmllbnTDtHQsPC9kaXY-PGRpdj48YnI-PC9kaXY-PGRpdj5EYXZpZDwvZGl2PjwvZGl2PjxiciBjbGVhcj0iYWxsIj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSI-PGRpdiBkaXI9Imx0ciI-PGRpdj48Yj5EYXZpZCBBbGV4YW5kcmUgS2xpbmdiZWlsPC9iPjwvZGl2PjxkaXY-PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSkiPkNFTyAmYW1wOyZuYnNwOzwvc3Bhbj48Zm9udCBjb2xvcj0iIzMzMzMzMyI-Q28tRm91bmRlciB8IDxhIGhyZWY9Imh0dHA6Ly9EeW1hbnQuY29tIiB0YXJnZXQ9Il9ibGFuayI-PGZvbnQgY29sb3I9IiMzMzMzMzMiPjxiPkR5bWFudC5jb208L2I-PC9mb250PjwvYT48L2ZvbnQ-PC9kaXY-PGRpdj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPC9kaXY-PGRpdj5NLiA8YSBocmVmPSJtYWlsdG86ZGFrQGR5bWFudC5jb20iIHRhcmdldD0iX2JsYW5rIj5kYWtAZHltYW50LmNvbTwvYT48L2Rpdj48ZGl2PlQgLiArMzMgNiA2MyA5NCA3NyA0MzwvZGl2PjxkaXY-PGEgaHJlZj0iaHR0cDovL3d3dy50d2l0dGVyLmNvbS9kYXZpZGtsaW5nYmVpbCIgdGFyZ2V0PSJfYmxhbmsiPkBEYXZpZEtsaW5nYmVpbDwvYT48L2Rpdj48ZGl2Pi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi48L2Rpdj48ZGl2PjxpbWcgc3JjPSJodHRwOi8vd3d3LmR5bWFudC5jb20vbWVkaWEvdG1wL2NhdGFsb2cvcHJvZHVjdC9kL3kvZHltYW50LWxvZ28tbWFpbC5wbmciPjxicj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI-PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPkxlIDUgamFudmllciAyMDE1IDEzOjE5LCBBcmxlbmUgQmVudG9saWxhIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFybGVuZWJlbnRvbGlsYUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5hcmxlbmViZW50b2xpbGFAZ21haWwuY29tPC9hPiZndDs8L3NwYW4-IGEgw6ljcml0IDo8YnI-PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI-PGRpdiBkaXI9Imx0ciI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij5DaGVyIE1vbnNpZXVyLDwvc3Bhbj48ZGl2Pjxicj48L2Rpdj48ZGl2PkonYWkgbGUgcGxhaXNpciBkZSB2b3VzIGNvbnRhY3RlciBzdXIgbGVzIGNvbnNlaWxzIGRlIE1hZGFtZSBsZSBHb3VndWVjLCBEaXJlY3RyaWNlIHDDqWRhZ29naXF1ZSDDoCBTdXAgZGUgTHV4ZSBkYW5zIGxlIGNhZHJlIGRlIGxhIHByw6lwYXJhdGlvbiBkZSBtb24gbcOpbW9pcmUuIENlbHVpIC0gY2kgZG9pdCDDqnRyZSB1biByYXBwb3J0IHByb2Zlc3Npb25uZWwgY29uY3JldCBldCBwZXJ0aW5lbnQgZXQgbm9uIHBhcyAiYWNhZMOpbWlxdWUuIEplIHZvdXMgcHJvcG9zZSBkJ2VuIGTDqWNvdXZyaXIgbGUgc3VqZXQgZW4gcGnDqGNlIGpvaW50ZSBldCBsYSByw6lwb25zZSBkZSBTdXAgZGUgTHV4ZSBlbiBiYXMgZGUgY2UgbWFpbC4mbmJzcDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkRhbnMgbGEgcGVyc3BlY3RpdmUgZGUgdm91cyByZW5jb250cmVyLCBqZSBtZSBwcm9wb3NlIGRlIHZvdXMgcsOpc3VtZXIgbW9uIHBhcmNvdXJzIGV0IG1vbiBvYmplY3RpZiBwcm9mZXNzaW9ubmVscyBlbiByYXBwb3J0IGF2ZWMgbW9uIG3DqW1vaXJlLiZuYnNwOzwvZGl2PjxkaXY-PGJyPjwvZGl2PjxkaXY-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48Yj5QYXJjb3VyczwvYj48L3NwYW4-PC9kaXY-PGRpdj5KJ2FpIHVuZSBleHDDqXJpZW5jZSBwcm9mZXNzaW9ubmVsbGUgZGUgcHLDqHMgZGUgMTUgYW5zIGVuIHRhbnQgcXVlIERpcmVjdHJpY2UgZGUgY2xpZW50w6hsZSBwcmVzc2Ugw6ljcml0ZSBhdSBzZWluIGRlIGdyYW5kcyBncm91cGVzJm5ic3A7bcOpZGlhcyZuYnNwOyhUw6lsw6lyYW1hLCBMYWdhcmTDqHJlKS4gSidhaSBzcMOpY2lhbGlzw6kgY2V0dGUmbmJzcDtleHDDqXJpZW5jZSBjb21tZXJjaWFsZSBkZXB1aXMgOCBhbnMgc3VyIGxlcyBzZWN0ZXVycyBkdSBsdXhlIGV0IGRlIGxhIG1vZGUgZW4gdHJhdmFpbGxhbnQgc3VyIGxlcyBwcm9qZXRzIGRlIGNvbW11bmljYXRpb24gcHVibGljaXRhaXJlIGRlcyBhbm5vbmNldXJzIGTDqWRpw6lzIGV0IHBvdXIgZGVzIG1hcnF1ZXMgZGUgcHJlc3NlIGhhdXQgZGUgZ2FtbWUgZXQgbHV4ZSAoRWxsZSwgTnVtw6lyby47OykuIE1vbiBDViBlc3QgZW4gcGnDqGNlIGpvaW50ZS48YnI-PC9kaXY-PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweCI-PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48Yj5Qcm9qZXQgcHJvZmVzc2lvbm5lbDwvYj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweCI-SmUgdmV1eCBhbGxleiBwbHVzIGxvaW4gZGFucyBtb24gZMOpdmVsb3BwZW1lbnQgZGUgbWFycXVlcyBkZSBsdXhlIHNvaXQgYXUgbml2ZWF1IGNvbW1lcmNpYWwgc29pdCBhdSBuaXZlYXUgZGUgbGEgY29tbXVuaWNhdGlvbiBldCBjJ2VzdCBwb3VycXVvaSBqJ2FpIGludMOpZ3LDqSBTdXAgZGUgTHV4ZS4gSmUgdmlzZSBwb3VyIHNlcHRlbWJyZSBhdSBwbHVzIHRhcmQsIHVuZSBhY3Rpdml0w6kgY29tbWVyY2lhbGUgYXUgc2VpbiBkJ3VuZSBtYXJxdWUgZGUgbHV4ZS9tb2RlIG91IGVuIGFnZW5jZSAoZMOpdmVsb3BwZW1lbnQgb3UgY29uc2VpbCkuIFBvdXIgeSBwYXJ2ZW5pciBldCBlbnJpY2hpciBtYSB2YWxldXIgc3VyIGxlIG1hcmNow6ksIGplIGRvaXMgY29uc29saWRlciBjZSBxdWkgcydpbXBvc2UsIGxlIGRpZ2l0YWwhPC9kaXY-PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweCI-PGI-TcOpbW9pcmUgLSByYXBwb3J0IFN1cCBkZSBMdXhlPC9iPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij5KJ2FpIGRvbmMgb3B0w6kgcG91ciB1biBzdWpldCBkZSBtw6ltb2lyZSBxdWkgcG9ydGUgc3VyIGxlIGx1eGUgZMOpZmnDqSBwYXIgbGUgZGlnaXRhbC4gSmUgdmV1eCBkw6ltb250cmVyIHF1ZSBsZSBsdXhlIGVzdCByw6l0aWNlbnQgZmFjZSBhdSBkaWdpdGFsLCBwb3VydGFudCBkw6ljaXNpZiBkYW5zIGwnYXBwb3J0IGRlIG5vdXZlYXV4IHNlcnZpY2VzIGV0IGRhbnMgbGUgZMOpcGxvaWVtZW50IGR1IGx1eGUuICZuYnNwOzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48dWw-PGxpIHN0eWxlPSJtYXJnaW4tbGVmdDoxNXB4Ij5NYWlzIG1vbiBzdWpldCBlc3QgdHJvcCBsYXJnZS4gSmUgbmUgcGV1eCB0cmFpdGVyIGRlIHRvdXMgbGVzIHNlcnZpY2VzIGFwcG9ydMOpcyBwYXIgbGUgZGlnaXRhbC4gSidow6lzaXRlIGVudHJlIGxhIGNvbW11bmljYXRpb24gZXQgbGEgc3RyYXTDqWdpZSBkJ29mZnJlIChwcm9kdWl0cykuIFF1ZWwgZXN0IGxlIHBsdXMgInV0aWxlIGQnYXByw6hzIHZvdXMiPzwvbGk-PC91bD48dWw-PGxpIHN0eWxlPSJtYXJnaW4tbGVmdDoxNXB4Ij5EZSBwbHVzIGplIG5lIHBldXggdHJhaXRlciBkdSBsdXhlIGVuIGfDqW7DqXJhbC4gSmUgZG9pcyBjaG9pc2lyIHVuIHNlZ21lbnQgZGUgY2VsdWktY2kgLiBKZSBzb3VoYWl0ZSBmb2NhbGlzZXIgc3VyIGxhIGpvYWlsbGVyaWUgcXVpIG1lIHNlbWJsZSBwbHVzIGTDqWZpw6llIHBhciBsZSBkaWdpdGFsIGNhciBjZSBzb250IGRldXggIm1hcmNow6lzIiBhIHByaW9yaSBhbnRpbm9taXF1ZXMuIENvbXByZW5kcmUgbGEgY29tcGxleGl0w6kgZHUgZHVvIEpvYWlsbGVyaWUgLyBkaWdpdGFsIG1lIHNlbWJsZSDDqWdhbGVtZW50IHBsdXMgZMOpdGVybWluYW50IHBvdXIgY29tcHJlbmRyZSBsZXMgZW5qZXV4IHBvc8OpcyBwYXIgbGUgZGlnaXRhbC4gUXUnZW4gcGVzbmV6LXZvdXM_PC9saT48L3VsPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48YnI-PC9kaXY-PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPkplIHZvdXMgcmVtZXJjaWUgcGFyIGF2YW5jZSBwb3VyIGwnYXR0ZW50aW9uIHF1ZSB2b3VzIGFjY29yZGVyZXogw6AgbW9uIHByb2pldCBldCBqZSB2b3VzIHByb3Bvc2UgZGUgY29udmVuaXIgZCd1biByZW5kZXogLSB2b3VzIHBvdXIgYXZhbmNlciBzdXIgY2VsdWktY2kuIEplIHN1aXMgZGlzcG9uaWJsZSBjZXR0ZSBzZW1haW5lIMOgIHZvdHJlIGNvbnZlbmFuY2UgZXQgdm91cyBwb3V2ZXogbeKAmWFwcGVsZXIgYXUgPGEgaHJlZj0idGVsOjA2JTIwNjIlMjAxOCUyMDQ3JTIwMDgiIHZhbHVlPSIrMzM2NjIxODQ3MDgiIHRhcmdldD0iX2JsYW5rIj4wNiA2MiAxOCA0NyAwODwvYT4uPC9kaXY-PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweCI-QmllbiDDoCB2b3VzLDwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48YnI-PC9kaXY-PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPkFybMOobmUgQmVudG9saWxhPC9kaXY-PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweCI-PGJyPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj4tLS0tLS0tLS0tIE1lc3NhZ2UgdHJhbnNmw6lyw6kgLS0tLS0tLS0tLTxicj5EZSZuYnNwOzogPGIgY2xhc3M9ImdtYWlsX3NlbmRlcm5hbWUiPkdoaXNsYWluZSBMZSBHb3VndWVjPC9iPiA8c3BhbiBkaXI9Imx0ciI-Jmx0OzxhIGhyZWY9Im1haWx0bzpnbGVnb3VndWVjQGVkY3BhcmlzLmVkdSIgdGFyZ2V0PSJfYmxhbmsiPmdsZWdvdWd1ZWNAZWRjcGFyaXMuZWR1PC9hPiZndDs8L3NwYW4-PGJyPkRhdGUmbmJzcDs6IDE5IGTDqWNlbWJyZSAyMDE0IDE5OjQ2PGJyPk9iamV0Jm5ic3A7OiBSRTogU3VqZXQgZGUgbcOpbW9pcmUgdW5pcXVlIEFybMOobmUgZXQgImV4ZXJjaWNlIiA6IGplIHZldXggZMOpbW9udHJlciBxdWU8YnI-w4AmbmJzcDs6IEFybGVuZSBCZW50b2xpbGEgJmx0OzxhIGhyZWY9Im1haWx0bzphcmxlbmViZW50b2xpbGFAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI-YXJsZW5lYmVudG9saWxhQGdtYWlsLmNvbTwvYT4mZ3Q7PGJyPkNjIDogdGRlbGFyaXZpZXJlICZsdDs8YSBocmVmPSJtYWlsdG86dGRlbGFyaXZpZXJlQGVkY3BhcmlzLmVkdSIgdGFyZ2V0PSJfYmxhbmsiPnRkZWxhcml2aWVyZUBlZGNwYXJpcy5lZHU8L2E-Jmd0Ozxicj48YnI-PGJyPjxkaXYgbGFuZz0iRlIiIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiPjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OidNYWlhbmRyYSBHRCcsc2Fucy1zZXJpZjtjb2xvcjpibGFjayI-Q2jDqHJlIEFybMOobmUsPHU-PC91Pjx1PjwvdT48L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTonTWFpYW5kcmEgR0QnLHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPk1lcmNpIHBvdXIgY2VzIGluZm9ybWF0aW9ucy4gPHU-PC91Pjx1PjwvdT48L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTonTWFpYW5kcmEgR0QnLHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPk5vdXMgcHJlbm9ucyBub3RlIGRlIHZvdHJlIG5vdXZlYXUgc3VqZXQgZGUgbcOpbW9pcmUmbmJzcDs6ICZuYnNwOzwvc3Bhbj48Yj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6J01haWFuZHJhIEdEJyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj5MZXMgZMOpZmlzPGEgbmFtZT0iMTRhYmEwOTg2OTQwNTdiNl8xNGE2M2RlZjk5ZmU2NzJhX19Hb0JhY2siPjwvYT4gZHUgZGlnaXRhbCBkYW5zIGxlcyBzdHJhdMOpZ2llcyBkZSBkw6l2ZWxvcHBlbWVudCBkdSBsdXhlIGVuIG1hdGnDqHJlJm5ic3A7IGTigJlvZmZyZSwgZGUgc2VydmljZXMsIGRlIGRpc3RyaWJ1dGlvbiBldCBkZSBjb21tdW5pY2F0aW9uPC9zcGFuPjwvdT48L2I-PHU-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OidNYWlhbmRyYSBHRCcsc2Fucy1zZXJpZjtjb2xvcjpibGFjayI-PHU-PC91Pjx1PjwvdT48L3NwYW4-PC91PjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6J01haWFuZHJhIEdEJyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj5Ob3VzIGVuIHZhbGlkb25zIGxlIHRow6htZSBtYWlzIHBlbnNvbnMgdG91dGVmb2lzIHF14oCZaWwgZXN0IGVuY29yZSB0cm9wIGxhcmdlIGVuIHRlcm1lIGRlIHDDqXJpbcOodHJlIGTigJlhbmFseXNlICsgamUgcGVuc2UgcXVlIHZvdXMgZGV2ZXogdm91cyBjb25jZW50cmVyIHN1ciB1biBzZWN0ZXVyIGV0IG5vbiBsZSBsdXhlIGVuIGfDqW7DqXJhbC48dT48L3U-PHU-PC91Pjwvc3Bhbj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OidNYWlhbmRyYSBHRCcsc2Fucy1zZXJpZjtjb2xvcjpibGFjayI-Vm91cyBkZXZleiByZW5jb250cmVyIGRlcyBwcm9mZXNzaW9ubmVscyByYXBpZGVtZW50IHF1aSB2b3VzIGFpZGVyb250IMOgIGTDqWZpbmlyIHVuZSBwcm9ibMOpbWF0aXF1ZSBwbHVzIHByw6ljaXNlLiBNZXJjaSBkZSBjb250YWN0ZXIgTcOpbGFuaWUgcXVpIHZvdXMgZG9ubmVyYSBsZXMgY29vcmRvbm7DqWVzIGRlIE1vbnNpZXVyIEfDqXJhbGQgRVNQQVJERUxMSUVSLCBEaXJlY3RldXIgQXNzb2Npw6kgZGUgbGEgc29jacOpdMOpIEVOT1JBIENvbnN1bHRpbmcgKyBjb250YWN0ZXogZGUgbm90cmUgcGFydCBEYXZpZCBBbGV4YW5kcmUgS2xpbmdiZWlsLCBDRU8gJmFtcDsmbmJzcDtDby1Gb3VuZGVyIHwgPGEgaHJlZj0iaHR0cDovL0R5bWFudC5jb20iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkR5bWFudC5jb208L3NwYW4-PC9hPiAtIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6J01haWFuZHJhIEdEJyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj4mbmJzcDs8YSBocmVmPSJtYWlsdG86ZGFrQGR5bWFudC5jb20iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPmRha0BkeW1hbnQuY29tPC9zcGFuPjwvYT4gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTonTWFpYW5kcmEgR0QnLHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPisgY28gZm9uZGF0ZXVyIGR1IG1hZ2F6aW5lIGRpZ2l0YWwgV2ViICZhbXA7IEx1eGUgPGEgaHJlZj0iaHR0cDovL3d3dy53ZWJhbmRsdXhlLmNvbS9hLXByb3Bvcy8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LndlYmFuZGx1eGUuY29tL2EtcHJvcG9zLzwvYT48dT48L3U-PHU-PC91Pjwvc3Bhbj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OidNYWlhbmRyYSBHRCcsc2Fucy1zZXJpZjtjb2xvcjpibGFjayI-QmllbiDDoCB2b3VzLDx1PjwvdT48dT48L3U-PC9zcGFuPjwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6J01haWFuZHJhIEdEJyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj5HbEc8dT48L3U-PHU-PC91Pjwvc3Bhbj48L3A-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OkNhbGlicmksc2Fucy1zZXJpZjtjb2xvcjpyZ2IoMzEsNzMsMTI1KSI-PHU-PC91PiZuYnNwOzx1PjwvdT48L3NwYW4-PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxpYnJpLHNhbnMtc2VyaWY7Y29sb3I6cmdiKDMxLDczLDEyNSkiPjx1PjwvdT4mbmJzcDs8dT48L3U-PC9zcGFuPjwvcD48ZGl2IHN0eWxlPSJib3JkZXItc3R5bGU6c29saWQgbm9uZSBub25lO2JvcmRlci10b3AtY29sb3I6cmdiKDE4MSwxOTYsMjIzKTtib3JkZXItdG9wLXdpZHRoOjFwdDtwYWRkaW5nOjNwdCAwY20gMGNtIj48cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Zm9udC1mYW1pbHk6VGFob21hLHNhbnMtc2VyaWYiPkRlJm5ic3A7Ojwvc3Bhbj48L2I-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OlRhaG9tYSxzYW5zLXNlcmlmIj4gQXJsZW5lIEJlbnRvbGlsYSBbbWFpbHRvOjxhIGhyZWY9Im1haWx0bzphcmxlbmViZW50b2xpbGFAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI-YXJsZW5lYmVudG9saWxhQGdtYWlsLmNvbTwvYT5dIDxicj48Yj5FbnZvecOpJm5ic3A7OjwvYj4gdmVuZHJlZGkgMTkgZMOpY2VtYnJlIDIwMTQgMTk6MTg8YnI-PGI-w4AmbmJzcDs6PC9iPiA8YSBocmVmPSJtYWlsdG86Z2hpc2xhaW5lLmxlZ291Z3VlY0BlZGNwYXJpcy5lZHUiIHRhcmdldD0iX2JsYW5rIj5naGlzbGFpbmUubGVnb3VndWVjQGVkY3BhcmlzLmVkdTwvYT48YnI-PGI-Q2MmbmJzcDs6PC9iPiA8YSBocmVmPSJtYWlsdG86dGhpYmF1dC5kZWxhcml2aWVyZUBlZGNwYXJpcy5lZHUiIHRhcmdldD0iX2JsYW5rIj50aGliYXV0LmRlbGFyaXZpZXJlQGVkY3BhcmlzLmVkdTwvYT48YnI-PGI-T2JqZXQmbmJzcDs6PC9iPiBTdWpldCBkZSBtw6ltb2lyZSB1bmlxdWUgQXJsw6huZSBldCAiZXhlcmNpY2UiIDogamUgdmV1eCBkw6ltb250cmVyIHF1ZTx1PjwvdT48dT48L3U-PC9zcGFuPjwvcD48L2Rpdj48ZGl2PjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHU-PC91PiZuYnNwOzx1PjwvdT48L3A-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj5DaGVycyB0b3VzPHU-PC91Pjx1PjwvdT48L3A-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U-Jm5ic3A7PHU-PC91PjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPSJNc29Ob3JtYWwiPkonYWkgcmVwZW5zw6kgbW9uIHN1amV0IGRlIG3DqW1vaXJlIGVuIGZvbmN0aW9uIGRlIG1lcyBnb8O7dHMsIGRlIG1lcyBjb21ww6l0ZW5jZXMgZXQgZGUgbWVzIG9iamVjdGlmcyBwcm9mZXNzaW9ubmVscy4mbmJzcDs8dT48L3U-PHU-PC91PjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U-PC9wPjwvZGl2PjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCI-SmUgcGFycyBkb25jIHN1ciBsYSB2ZXJzaW9uIHF1ZSB2b3VzIGTDqWNvdXZyaXJleiBlbiBwacOoY2Ugam9pbnRlIGV0IHF1aSBwb3J0ZSBzdXIgbGVzIGVuamV1eCBkdSBkaWdpdGFsIGRhbnMgbGVzIHN0cmF0w6lnaWVzIGRlIGTDqXZlbG9wcGVtZW50IGR1IGx1eGUgZW4gbWF0acOocmUgZCdvZmZyZSwgZGUgc2VydmljZSwgZGUgZGlzdHJpYnV0aW9uIGV0IGRlIGNvbW11bmljYXRpb24uJm5ic3A7PHU-PC91Pjx1PjwvdT48L3A-PC9kaXY-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj5KZSBtZSBzdWlzIMOpZ2FsZW1lbnQgcHLDqnTDqWUgYXUgbsOpY2Vzc2FpcmUgZXhlcmNpY2UgZHUgOiAmbmJzcDsiamUgdmV1eCBkw6ltb250cmVyIHF1ZSIuPHU-PC91Pjx1PjwvdT48L3A-PC9kaXY-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U-Jm5ic3A7PHU-PC91PjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPSJNc29Ob3JtYWwiPkplIHJlc3RlIMOgIHZvdHJlIMOpY291dGUgcG91ciBmaW5hbGlzZXIgY2V0dGUgZmljaGUgcMOpZGFnb2dpcXVlIGV0IHZhbGlkZXIgbW9uIHN1amV0IGRlIG3DqW1vaXJlIGF2YW50IGxhIHJlbnRyw6llIGRlIGphbnZpZXIgc2kgY2VsYSB2b3VzIGVzdCBwb3NzaWJsZS4gSmUgdmFpcyBkJ29yZXMgZXQgZMOpasOgIGNvbW1lbmNlciBtZXMgcmVjaGVyY2hlcyBldCBmYWlyZSB1bmUgw6liYXVjaGUgZGUgcGxhbiBwZW5kYW50IGNlcyB2YWNhbmNlcy4mbmJzcDs8dT48L3U-PHU-PC91PjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U-PC9wPjwvZGl2PjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCI-SmUgdm91cyBzb3VoYWl0ZSBkZSB0csOocyBib25uZXMgZsOqdGVzLjx1PjwvdT48dT48L3U-PC9wPjwvZGl2PjxkaXY-PHAgY2xhc3M9Ik1zb05vcm1hbCI-PHU-PC91PiZuYnNwOzx1PjwvdT48L3A-PC9kaXY-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj5CaWVuIMOgIHZvdXMsPHU-PC91Pjx1PjwvdT48L3A-PC9kaXY-PGRpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U-Jm5ic3A7PHU-PC91PjwvcD48L2Rpdj48ZGl2PjxwIGNsYXNzPSJNc29Ob3JtYWwiPkFybMOobmU8dT48L3U-PHU-PC91PjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4NCjxicj48YnI-PC9kaXY-PC9kaXY-PGJyPjwvZGl2Pg0KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4NCjwvZGl2PjwvYmxvY2txdW90ZT48L2JvZHk-PC9odG1sPg=="}}]}, :sizeEstimate=>26532}.merge(params)
62
+ end
63
+
64
+
65
+ def test_to_reply_message(params = {})
66
+ {:id=>"14aecf708ee65122", :threadId=>"14aecf708ee65122", :labelIds=>["INBOX", "IMPORTANT", "CATEGORY_PERSONAL", "UNREAD"], :snippet=>"coucou Julien Hobeika | Co-Founder &amp; CEO Email: julien@juliedesk.com Tel: +33 6 63 33 17 55 Julie", :historyId=>"232755", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Delivered-To", :value=>"julie@juliedesk.com"}, {:name=>"Received", :value=>"by 10.64.89.39 with SMTP id bl7csp1888330ieb; Thu, 15 Jan 2015 01:40:21 -0800 (PST)"}, {:name=>"X-Received", :value=>"by 10.194.2.75 with SMTP id 11mr16697173wjs.78.1421314820755; Thu, 15 Jan 2015 01:40:20 -0800 (PST)"}, {:name=>"Return-Path", :value=>"<julien@wepopp.com>"}, {:name=>"Received", :value=>"from mail-wg0-f52.google.com (mail-wg0-f52.google.com. [74.125.82.52]) by mx.google.com with ESMTPS id cz7si1861265wjc.17.2015.01.15.01.40.19 for <julie@juliedesk.com> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 15 Jan 2015 01:40:20 -0800 (PST)"}, {:name=>"Received-SPF", :value=>"pass (google.com: domain of julien@wepopp.com designates 74.125.82.52 as permitted sender) client-ip=74.125.82.52;"}, {:name=>"Authentication-Results", :value=>"mx.google.com; spf=pass (google.com: domain of julien@wepopp.com designates 74.125.82.52 as permitted sender) smtp.mail=julien@wepopp.com"}, {:name=>"Received", :value=>"by mail-wg0-f52.google.com with SMTP id x12so13734359wgg.11 for <julie@juliedesk.com>; Thu, 15 Jan 2015 01:40:19 -0800 (PST)"}, {:name=>"X-Google-DKIM-Signature", :value=>"v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc :content-type; bh=VX+NTBD3y6zC7y2eoK6dXfXslqvi6t2cSoTCjb3ydPE=; b=GJnt5rk9Ck0uf9drEbY8tmxHqEosl3+89TyqId0TMttNgmjhV+rTX5tGe1N1wbPS0o ZMl5zDe/A5GGd7PHa8ykZZwNv5GQn0cjMQIMs+nMyUTUCUYeioWirF3frDJ8siV7+EXF s+l5+8Ul3suVPTcg5+zoNGgTJu3mWBC4E+1KMbVLYNOZtOd5PEMJPCZuTu2/k8Vw0Iw6 8JG02sSAzWRxNJnUoCRrShTV7C+eNRehvI7utHGMrobP1chWb2qZgLvbwGnpo/eBceya XWo/bpd9OcAYhb0spf0M2pXJ6TL/fzYbplFj0Lj8sXfRphQJivUjUVj4F02Tty2HpQ+q 4kQw=="}, {:name=>"X-Gm-Message-State", :value=>"ALoCoQk6eM56sO2fhoPw1I+al4RvoL3xd/Mzo7nmPK4WlB/OUaOD0isPUduI2MUrEdZgQ8tty/AH"}, {:name=>"X-Received", :value=>"by 10.180.126.99 with SMTP id mx3mr17257983wib.66.1421314819809; Thu, 15 Jan 2015 01:40:19 -0800 (PST)"}, {:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.180.8.228 with HTTP; Thu, 15 Jan 2015 01:39:59 -0800 (PST)"}, {:name=>"From", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 10:39:59 +0100"}, {:name=>"Message-ID", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"To", :value=>"Julie Desk <julie@juliedesk.com>, Julien Hobeika <julien.hobeika@gmail.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=e89a8f8389d1f2fbe9050cada4ac"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>144, :data=>"Y291Y291DQoNCg0KKkp1bGllbiBIb2JlaWthIHwgQ28tRm91bmRlciAmIENFTypFbWFpbDoganVsaWVuQGp1bGllZGVzay5jb20NClRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCg0KKkp1bGllIERlc2sqDQp3d3cuanVsaWVkZXNrLmNvbQ0KDQoNCuGQpw0K"}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>742, :data=>"PGRpdiBkaXI9Imx0ciI-Y291Y291PGJyIGNsZWFyPSJhbGwiPjxkaXY-PGRpdiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj48cD48Yj5KdWxpZW4gSG9iZWlrYSB8IENvLUZvdW5kZXIgJmFtcDsgQ0VPPGJyPjwvYj5FbWFpbDrCoDxhIGhyZWY9Im1haWx0bzpqdWxpZW5AanVsaWVkZXNrLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1bGllbkBqdWxpZWRlc2suY29tPC9hPjxicj5UZWw6ICszMyA2IDYzIDMzIDE3IDU1PC9wPjxwPjxiPkp1bGllIERlc2s8L2I-PGI-PGJyPjwvYj48YSBocmVmPSJodHRwOi8vd3d3Lmp1bGllZGVzay5jb20vIiBzdHlsZT0iY29sb3I6cmdiKDE3LDg1LDIwNCk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIiB0YXJnZXQ9Il9ibGFuayI-d3d3Lmp1bGllZGVzay5jb208L2E-PGI-PGJyPjwvYj48L3A-PHA-PGJyPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaHNwYWNlPSJzdHJlYWstcHQtbWFyayIgc3R5bGU9Im1heC1oZWlnaHQ6MXB4Ij48aW1nIHN0eWxlPSJ3aWR0aDowcHg7IG1heC1oZWlnaHQ6MHB4OyIgc3JjPSJodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YWFuVnNhV1Z1UUhkbGNHOXdjQzVqYjIwJTNEJmFtcDt0eXBlPXplcm9jb250ZW50JmFtcDtndWlkPTBiMWRiODRkLTFmMTctNDE1MS05ZmE5LTUxMWNiYTg0ODAyMiI-PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjEiPuGQpzwvZm9udD48L2Rpdj48L2Rpdj4NCg=="}}]}, :sizeEstimate=>3710}
67
+ end
68
+
69
+ def test_to_reply_message2(params = {}) #without delivered_to in headers
70
+ {:id=>"14aecf708ee65122", :threadId=>"14aecf708ee65122", :labelIds=>["INBOX", "IMPORTANT", "CATEGORY_PERSONAL", "UNREAD"], :snippet=>"coucou Julien Hobeika | Co-Founder &amp; CEO Email: julien@juliedesk.com Tel: +33 6 63 33 17 55 Julie", :historyId=>"232755", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Received", :value=>"by 10.64.89.39 with SMTP id bl7csp1888330ieb; Thu, 15 Jan 2015 01:40:21 -0800 (PST)"}, {:name=>"X-Received", :value=>"by 10.194.2.75 with SMTP id 11mr16697173wjs.78.1421314820755; Thu, 15 Jan 2015 01:40:20 -0800 (PST)"}, {:name=>"Return-Path", :value=>"<julien@wepopp.com>"}, {:name=>"Received", :value=>"from mail-wg0-f52.google.com (mail-wg0-f52.google.com. [74.125.82.52]) by mx.google.com with ESMTPS id cz7si1861265wjc.17.2015.01.15.01.40.19 for <julie@juliedesk.com> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 15 Jan 2015 01:40:20 -0800 (PST)"}, {:name=>"Received-SPF", :value=>"pass (google.com: domain of julien@wepopp.com designates 74.125.82.52 as permitted sender) client-ip=74.125.82.52;"}, {:name=>"Authentication-Results", :value=>"mx.google.com; spf=pass (google.com: domain of julien@wepopp.com designates 74.125.82.52 as permitted sender) smtp.mail=julien@wepopp.com"}, {:name=>"Received", :value=>"by mail-wg0-f52.google.com with SMTP id x12so13734359wgg.11 for <julie@juliedesk.com>; Thu, 15 Jan 2015 01:40:19 -0800 (PST)"}, {:name=>"X-Google-DKIM-Signature", :value=>"v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc :content-type; bh=VX+NTBD3y6zC7y2eoK6dXfXslqvi6t2cSoTCjb3ydPE=; b=GJnt5rk9Ck0uf9drEbY8tmxHqEosl3+89TyqId0TMttNgmjhV+rTX5tGe1N1wbPS0o ZMl5zDe/A5GGd7PHa8ykZZwNv5GQn0cjMQIMs+nMyUTUCUYeioWirF3frDJ8siV7+EXF s+l5+8Ul3suVPTcg5+zoNGgTJu3mWBC4E+1KMbVLYNOZtOd5PEMJPCZuTu2/k8Vw0Iw6 8JG02sSAzWRxNJnUoCRrShTV7C+eNRehvI7utHGMrobP1chWb2qZgLvbwGnpo/eBceya XWo/bpd9OcAYhb0spf0M2pXJ6TL/fzYbplFj0Lj8sXfRphQJivUjUVj4F02Tty2HpQ+q 4kQw=="}, {:name=>"X-Gm-Message-State", :value=>"ALoCoQk6eM56sO2fhoPw1I+al4RvoL3xd/Mzo7nmPK4WlB/OUaOD0isPUduI2MUrEdZgQ8tty/AH"}, {:name=>"X-Received", :value=>"by 10.180.126.99 with SMTP id mx3mr17257983wib.66.1421314819809; Thu, 15 Jan 2015 01:40:19 -0800 (PST)"}, {:name=>"MIME-Version", :value=>"1.0"}, {:name=>"Received", :value=>"by 10.180.8.228 with HTTP; Thu, 15 Jan 2015 01:39:59 -0800 (PST)"}, {:name=>"From", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 10:39:59 +0100"}, {:name=>"Message-ID", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"To", :value=>"Julie Desk <julie@juliedesk.com>, Julien Hobeika <julien.hobeika@gmail.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=e89a8f8389d1f2fbe9050cada4ac"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>144, :data=>"Y291Y291DQoNCg0KKkp1bGllbiBIb2JlaWthIHwgQ28tRm91bmRlciAmIENFTypFbWFpbDoganVsaWVuQGp1bGllZGVzay5jb20NClRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCg0KKkp1bGllIERlc2sqDQp3d3cuanVsaWVkZXNrLmNvbQ0KDQoNCuGQpw0K"}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>742, :data=>"PGRpdiBkaXI9Imx0ciI-Y291Y291PGJyIGNsZWFyPSJhbGwiPjxkaXY-PGRpdiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj48cD48Yj5KdWxpZW4gSG9iZWlrYSB8IENvLUZvdW5kZXIgJmFtcDsgQ0VPPGJyPjwvYj5FbWFpbDrCoDxhIGhyZWY9Im1haWx0bzpqdWxpZW5AanVsaWVkZXNrLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1bGllbkBqdWxpZWRlc2suY29tPC9hPjxicj5UZWw6ICszMyA2IDYzIDMzIDE3IDU1PC9wPjxwPjxiPkp1bGllIERlc2s8L2I-PGI-PGJyPjwvYj48YSBocmVmPSJodHRwOi8vd3d3Lmp1bGllZGVzay5jb20vIiBzdHlsZT0iY29sb3I6cmdiKDE3LDg1LDIwNCk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIiB0YXJnZXQ9Il9ibGFuayI-d3d3Lmp1bGllZGVzay5jb208L2E-PGI-PGJyPjwvYj48L3A-PHA-PGJyPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaHNwYWNlPSJzdHJlYWstcHQtbWFyayIgc3R5bGU9Im1heC1oZWlnaHQ6MXB4Ij48aW1nIHN0eWxlPSJ3aWR0aDowcHg7IG1heC1oZWlnaHQ6MHB4OyIgc3JjPSJodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YWFuVnNhV1Z1UUhkbGNHOXdjQzVqYjIwJTNEJmFtcDt0eXBlPXplcm9jb250ZW50JmFtcDtndWlkPTBiMWRiODRkLTFmMTctNDE1MS05ZmE5LTUxMWNiYTg0ODAyMiI-PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjEiPuGQpzwvZm9udD48L2Rpdj48L2Rpdj4NCg=="}}]}, :sizeEstimate=>3710}
71
+ end
72
+
73
+ def test_reply_message(params = {})
74
+ {body: "test"}
75
+ end
76
+
77
+ def test_forward_message
78
+ {to: "julien@wepopp.com", bbc: "julien.hobeika@gmail.com", cc: "julien@juliedesk.com, nicolas@juliedesk.com", subject: "cool subject", body: "test"}
79
+ end
80
+
81
+ def test_forward_message_with_html
82
+ {to: "julien@wepopp.com", bbc: "julien.hobeika@gmail.com", cc: "julien@juliedesk.com, nicolas@juliedesk.com", subject: "cool subject", text: "test", html: "<b>test</b>"}
83
+ end
84
+
85
+ def test_forwarded_message
86
+ {:id=>"14aef32bd53a74bb", :threadId=>"14aecf708ee65122", :labelIds=>["SENT"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: &gt;coucou &gt;", :historyId=>"234207", :payload=>{:partId=>"", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 12:04:47 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 12:04:47 -0800"}, {:name=>"To", :value=>"julien@wepopp.com"}, {:name=>"Cc", :value=>"julien@juliedesk.com, nicolas@juliedesk.com"}, {:name=>"Message-Id", :value=>"<CAFXNVWTyUTRoC-yqHd0zmaAF8heyWAO3Hskfv_uxESWwgtX9Mg@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"cool subject"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, :sizeEstimate=>948}
87
+ end
88
+
89
+
90
+ def test_forwarded_message_with_html
91
+ {:id=>"14aef33bfcd19656", :threadId=>"14aecf708ee65122", :labelIds=>["SENT"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: coucou Julien", :historyId=>"234237", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 12:05:53 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 12:05:53 -0800"}, {:name=>"To", :value=>"julien@wepopp.com"}, {:name=>"Cc", :value=>"julien@juliedesk.com, nicolas@juliedesk.com"}, {:name=>"Message-Id", :value=>"<CAFXNVWR8k5sc39WbqyUoEA-ssYRtx0RALtNUkdDL1M9g6w3dEA@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"cool subject"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=\"--==_mimepart_54b81da0a179_d3733fe0444541d8958c\"; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"7bit"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>1005, :data=>"PGRpdj48Yj50ZXN0PC9iPjwvZGl2Pg0KPGJyPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI-IFRodSwgMTUgSmFuIDIwMTUgMTA6Mzk6NTkgKzAxMDAgSnVsaWVuIEhvYmVpa2EgJmx0O2p1bGllbkBqdWxpZWRlc2suY29tJmd0Ozo8YnI-PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI-PGRpdiBkaXI9Imx0ciI-Y291Y291PGJyIGNsZWFyPSJhbGwiPjxkaXY-PGRpdiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj48cD48Yj5KdWxpZW4gSG9iZWlrYSB8IENvLUZvdW5kZXIgJmFtcDsgQ0VPPGJyPjwvYj5FbWFpbDrCoDxhIGhyZWY9Im1haWx0bzpqdWxpZW5AanVsaWVkZXNrLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1bGllbkBqdWxpZWRlc2suY29tPC9hPjxicj5UZWw6ICszMyA2IDYzIDMzIDE3IDU1PC9wPjxwPjxiPkp1bGllIERlc2s8L2I-PGI-PGJyPjwvYj48YSBocmVmPSJodHRwOi8vd3d3Lmp1bGllZGVzay5jb20vIiBzdHlsZT0iY29sb3I6cmdiKDE3LDg1LDIwNCk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIiB0YXJnZXQ9Il9ibGFuayI-d3d3Lmp1bGllZGVzay5jb208L2E-PGI-PGJyPjwvYj48L3A-PHA-PGJyPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaHNwYWNlPSJzdHJlYWstcHQtbWFyayIgc3R5bGU9Im1heC1oZWlnaHQ6MXB4Ij48aW1nIHN0eWxlPSJ3aWR0aDowcHg7IG1heC1oZWlnaHQ6MHB4OyIgc3JjPSJodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YWFuVnNhV1Z1UUhkbGNHOXdjQzVqYjIwJTNEJmFtcDt0eXBlPXplcm9jb250ZW50JmFtcDtndWlkPTBiMWRiODRkLTFmMTctNDE1MS05ZmE5LTUxMWNiYTg0ODAyMiI-PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjEiPuGQpzwvZm9udD48L2Rpdj48L2Rpdj4NCjwvYmxvY2txdW90ZT48L2Rpdj48YnI-"}}]}, :sizeEstimate=>2448}
92
+ end
93
+
94
+ def test_reply_message_with_html(params = {})
95
+ {html: "<b>test</b>", text: "test"}
96
+ end
97
+
98
+ def test_replied_message(params = {})
99
+ {:id=>"14aecf9e31d945ba", :threadId=>"14aecf708ee65122", :labelIds=>["SENT", "INBOX", "UNREAD"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: &gt;coucou &gt;", :historyId=>"232799", :payload=>{:partId=>"", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"To", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien.hobeika@gmail.com>, Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Message-Id", :value=>"<CAFXNVWSqyaY6Qp7s6iTm9GwTVpCxgTxSCaa3UMU8rpNzZc+-Uw@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, :sizeEstimate=>1089}
100
+ end
101
+
102
+
103
+ def test_replied_message_with_html(params = {})
104
+ {:id=>"14aef0d08d39b4df", :threadId=>"14aecf708ee65122", :labelIds=>["SENT", "INBOX", "UNREAD"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: coucou Julien", :historyId=>"234054", :payload=>{:mimeType=>"multipart/alternative", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 11:23:36 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 11:23:36 -0800"}, {:name=>"To", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien.hobeika@gmail.com>, Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Message-Id", :value=>"<CAFXNVWQO=9Z5LaNgSUQTEA4ucDw4LA5BbA-Qv6RpcLq0kOKM6A@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"multipart/alternative; boundary=\"--==_mimepart_54b813b749eaa_d0963fc7bc45c1d0581fa\"; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"7bit"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>0}, :parts=>[{:partId=>"0", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, {:partId=>"1", :mimeType=>"text/html", :filename=>"", :headers=>[{:name=>"Content-Type", :value=>"text/html; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}], :body=>{:size=>1005, :data=>"PGRpdj48Yj50ZXN0PC9iPjwvZGl2Pg0KPGJyPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI-IFRodSwgMTUgSmFuIDIwMTUgMTA6Mzk6NTkgKzAxMDAgSnVsaWVuIEhvYmVpa2EgJmx0O2p1bGllbkBqdWxpZWRlc2suY29tJmd0Ozo8YnI-PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI-PGRpdiBkaXI9Imx0ciI-Y291Y291PGJyIGNsZWFyPSJhbGwiPjxkaXY-PGRpdiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj48cD48Yj5KdWxpZW4gSG9iZWlrYSB8IENvLUZvdW5kZXIgJmFtcDsgQ0VPPGJyPjwvYj5FbWFpbDrCoDxhIGhyZWY9Im1haWx0bzpqdWxpZW5AanVsaWVkZXNrLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1bGllbkBqdWxpZWRlc2suY29tPC9hPjxicj5UZWw6ICszMyA2IDYzIDMzIDE3IDU1PC9wPjxwPjxiPkp1bGllIERlc2s8L2I-PGI-PGJyPjwvYj48YSBocmVmPSJodHRwOi8vd3d3Lmp1bGllZGVzay5jb20vIiBzdHlsZT0iY29sb3I6cmdiKDE3LDg1LDIwNCk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIiB0YXJnZXQ9Il9ibGFuayI-d3d3Lmp1bGllZGVzay5jb208L2E-PGI-PGJyPjwvYj48L3A-PHA-PGJyPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaHNwYWNlPSJzdHJlYWstcHQtbWFyayIgc3R5bGU9Im1heC1oZWlnaHQ6MXB4Ij48aW1nIHN0eWxlPSJ3aWR0aDowcHg7IG1heC1oZWlnaHQ6MHB4OyIgc3JjPSJodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YWFuVnNhV1Z1UUhkbGNHOXdjQzVqYjIwJTNEJmFtcDt0eXBlPXplcm9jb250ZW50JmFtcDtndWlkPTBiMWRiODRkLTFmMTctNDE1MS05ZmE5LTUxMWNiYTg0ODAyMiI-PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjEiPuGQpzwvZm9udD48L2Rpdj48L2Rpdj4NCjwvYmxvY2txdW90ZT48L2Rpdj48YnI-"}}]}, :sizeEstimate=>2597}
105
+ end
106
+
107
+
108
+
109
+ def test_unread_message(params = {})
110
+ {:id=>"14aecf9e31d945ba", :threadId=>"14aecf708ee65122", :labelIds=>["IMPORTANT", "CATEGORY_PERSONAL","UNREAD"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: &gt;coucou &gt;", :historyId=>"232799", :payload=>{:partId=>"", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"To", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien.hobeika@gmail.com>, Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Message-Id", :value=>"<CAFXNVWSqyaY6Qp7s6iTm9GwTVpCxgTxSCaa3UMU8rpNzZc+-Uw@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, :sizeEstimate=>1089}
111
+ end
112
+
113
+ def test_sent_message(params = {})
114
+ {:id=>"14aecf9e31d945ba", :threadId=>"14aecf708ee65122", :labelIds=>["IMPORTANT", "CATEGORY_PERSONAL","SENT"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: &gt;coucou &gt;", :historyId=>"232799", :payload=>{:partId=>"", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"To", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien.hobeika@gmail.com>, Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Message-Id", :value=>"<CAFXNVWSqyaY6Qp7s6iTm9GwTVpCxgTxSCaa3UMU8rpNzZc+-Uw@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, :sizeEstimate=>1089}
115
+ end
116
+
117
+ def test_inbox_message(params = {})
118
+ {:id=>"14aecf9e31d945ba", :threadId=>"14aecf708ee65122", :labelIds=>["IMPORTANT", "CATEGORY_PERSONAL","INBOX"], :snippet=>"test Thu, 15 Jan 2015 10:39:59 +0100 Julien Hobeika &lt;julien@juliedesk.com&gt;: &gt;coucou &gt;", :historyId=>"232799", :payload=>{:partId=>"", :mimeType=>"text/plain", :filename=>"", :headers=>[{:name=>"Received", :value=>"from 992877924458-i6nbjvo0fspv8hpmpss0i9aglneqrdpm.apps.googleusercontent.com named unknown by gmailapi.google.com with HTTPREST; Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"Date", :value=>"Thu, 15 Jan 2015 01:43:27 -0800"}, {:name=>"To", :value=>"Julien Hobeika <julien@juliedesk.com>"}, {:name=>"Cc", :value=>"Julien Hobeika <julien.hobeika@gmail.com>, Julien Hobeika <julien@juliedesk.com>, Nicolas Marlier <nicolas@wepopp.com>"}, {:name=>"Message-Id", :value=>"<CAFXNVWSqyaY6Qp7s6iTm9GwTVpCxgTxSCaa3UMU8rpNzZc+-Uw@mail.gmail.com>"}, {:name=>"In-Reply-To", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"References", :value=>"<CAA-2G7UbpEhf1G6-fF_ruSew7SRjsOpU+wPbmWufrknmbxQVZg@mail.gmail.com>"}, {:name=>"Subject", :value=>"test reply message"}, {:name=>"Mime-Version", :value=>"1.0"}, {:name=>"Content-Type", :value=>"text/plain; charset=UTF-8"}, {:name=>"Content-Transfer-Encoding", :value=>"quoted-printable"}, {:name=>"From", :value=>"julie@juliedesk.com"}], :body=>{:size=>238, :data=>"dGVzdA0KDQpUaHUsIDE1IEphbiAyMDE1IDEwOjM5OjU5ICswMTAwIEp1bGllbiBIb2JlaWthIDxqdWxpZW5AanVsaWVkZXNrLmNvbT46DQoNCj5jb3Vjb3UNCj4NCj4NCj4qSnVsaWVuIEhvYmVpa2EgfCBDby1Gb3VuZGVyICYgQ0VPKkVtYWlsOiBqdWxpZW5AanVsaWVkZXNrLmNvbQ0KPlRlbDogKzMzIDYgNjMgMzMgMTcgNTUNCj4NCj4qSnVsaWUgRGVzayoNCj53d3cuanVsaWVkZXNrLmNvbQ0KPg0KPg0KPuGQpw0KPg=="}}, :sizeEstimate=>1089}
119
+ end
120
+
121
+ def test_message_list
122
+ {:messages=>[{:id=>"14ae456f2ff1e3e4", :threadId=>"14ae456f2ff1e3e4"}, {:id=>"14ae456891f20924", :threadId=>"14ae4438ed604170"}, {:id=>"14ae455204ed507e", :threadId=>"14ae4438ed604170"}, {:id=>"14ae45432aaf0c5a", :threadId=>"14ae4438ed604170"}, {:id=>"14ae4438ed604170", :threadId=>"14ae4438ed604170"}], :nextPageToken=>"05968490989102563512", :resultSizeEstimate=>20}
123
+ end
124
+
125
+
126
+ end
127
+ end
@@ -0,0 +1,38 @@
1
+ require 'gmail'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'stringio'
5
+ require 'shoulda'
6
+ require File.expand_path('../test_data', __FILE__)
7
+
8
+ # monkeypatch request methods
9
+ module Gmail
10
+ @client = nil
11
+
12
+ def self.connect
13
+
14
+ end
15
+
16
+ def self.client= value
17
+ @client = value
18
+ end
19
+
20
+ end
21
+
22
+ class Test::Unit::TestCase
23
+ include Gmail::TestData
24
+ include Mocha
25
+
26
+ setup do
27
+ @mock = mock
28
+ Gmail.client = @mock
29
+ Gmail.new(client_id: "foo", client_secret: "foo", refresh_token: "foo", application_name: "test", application_version: "test")
30
+ end
31
+
32
+ teardown do
33
+ Gmail.client = nil
34
+ Gmail.client_id = nil
35
+ Gmail.client_secret = nil
36
+ Gmail.refresh_token = nil
37
+ end
38
+ end
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google-gmail-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.14
5
+ platform: ruby
6
+ authors:
7
+ - Julien Hobeika
8
+ - Keiran Betteley
9
+ - Evaldas Grudzinskas
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2018-04-30 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mime
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0.1'
29
+ - !ruby/object:Gem::Dependency
30
+ name: mail
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.2.1
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.2.1
43
+ - !ruby/object:Gem::Dependency
44
+ name: activesupport
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: google-api-client
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '='
62
+ - !ruby/object:Gem::Version
63
+ version: 0.8.6
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 0.8.6
71
+ - !ruby/object:Gem::Dependency
72
+ name: hooks
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.0
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.4.0
85
+ - !ruby/object:Gem::Dependency
86
+ name: hashie
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 3.3.2
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 3.3.2
99
+ - !ruby/object:Gem::Dependency
100
+ name: stringex
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: rake
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: test-unit
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: mocha
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: 1.0.0
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: 1.0.0
155
+ - !ruby/object:Gem::Dependency
156
+ name: shoulda
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: 3.5.0
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: 3.5.0
169
+ - !ruby/object:Gem::Dependency
170
+ name: gem-release
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ description: "A Ruby interface to Gmail API (NO IMAP, NO SMTP).\n Search, read and
184
+ send multipart emails; archive, mark as read/unread,\n delete emails; and manage
185
+ labels. Everything is done through the Gmail API without going through IMAP or SMTP
186
+ Protocol\n "
187
+ email:
188
+ executables: []
189
+ extensions: []
190
+ extra_rdoc_files: []
191
+ files:
192
+ - ".bundle/config"
193
+ - ".gitignore"
194
+ - ".travis.yml"
195
+ - CHANGELOG.md
196
+ - Gemfile
197
+ - LICENSE
198
+ - README.md
199
+ - Rakefile
200
+ - TODO.md
201
+ - account.yml.example
202
+ - gmail.gemspec
203
+ - lib/gmail.rb
204
+ - lib/gmail/api_resource.rb
205
+ - lib/gmail/base/create.rb
206
+ - lib/gmail/base/delete.rb
207
+ - lib/gmail/base/get.rb
208
+ - lib/gmail/base/list.rb
209
+ - lib/gmail/base/modify.rb
210
+ - lib/gmail/base/trash.rb
211
+ - lib/gmail/base/update.rb
212
+ - lib/gmail/draft.rb
213
+ - lib/gmail/gmail_object.rb
214
+ - lib/gmail/label.rb
215
+ - lib/gmail/message.rb
216
+ - lib/gmail/thread.rb
217
+ - lib/gmail/util.rb
218
+ - lib/gmail/version.rb
219
+ - test/gmail/api_resource_test.rb
220
+ - test/gmail/draft_test.rb
221
+ - test/gmail/gmail_object_test.rb
222
+ - test/gmail/label_test.rb
223
+ - test/gmail/message_test.rb
224
+ - test/gmail/thread_test.rb
225
+ - test/gmail/util_test.rb
226
+ - test/test_data.rb
227
+ - test/test_helper.rb
228
+ homepage: https://github.com/evaldasg/google-gmail-api
229
+ licenses:
230
+ - MIT
231
+ metadata: {}
232
+ post_install_message:
233
+ rdoc_options: []
234
+ require_paths:
235
+ - lib
236
+ required_ruby_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: 1.9.3
241
+ required_rubygems_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ requirements: []
247
+ rubyforge_project:
248
+ rubygems_version: 2.7.6
249
+ signing_key:
250
+ specification_version: 4
251
+ summary: A Ruby interface to Gmail API (NO IMAP, NO SMTP), with all the tools you
252
+ will need.
253
+ test_files:
254
+ - test/gmail/api_resource_test.rb
255
+ - test/gmail/draft_test.rb
256
+ - test/gmail/gmail_object_test.rb
257
+ - test/gmail/label_test.rb
258
+ - test/gmail/message_test.rb
259
+ - test/gmail/thread_test.rb
260
+ - test/gmail/util_test.rb
261
+ - test/test_data.rb
262
+ - test/test_helper.rb