Commit
Author: Mauro D [mauro@stalw.art]
Hash: 7fa02c7f6379419192160ea8f4f2aadaf91d5c66
Timestamp: Thu, 01 Dec 2022 15:01:28 +0000 (1 year ago)

+4953 -3117 +/-64 browse
v0.1.0
1diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
2new file mode 100644
3index 0000000..e2b24cc
4--- /dev/null
5+++ b/.github/FUNDING.yml
6 @@ -0,0 +1,13 @@
7+ # These are supported funding model platforms
8+
9+ github: stalwartlabs
10+ patreon: # Replace with a single Patreon username
11+ open_collective: # Replace with a single Open Collective username
12+ ko_fi: # Replace with a single Ko-fi username
13+ tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
14+ community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
15+ liberapay: # Replace with a single Liberapay username
16+ issuehunt: # Replace with a single IssueHunt username
17+ otechie: # Replace with a single Otechie username
18+ lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
19+ custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
20 diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
21new file mode 100644
22index 0000000..5c2da0c
23--- /dev/null
24+++ b/.github/workflows/rust.yml
25 @@ -0,0 +1,22 @@
26+ name: "CI"
27+
28+ on:
29+ push:
30+ branches: [ main ]
31+ pull_request:
32+ branches: [ main ]
33+
34+ env:
35+ CARGO_TERM_COLOR: always
36+
37+ jobs:
38+ build:
39+
40+ runs-on: ubuntu-latest
41+
42+ steps:
43+ - uses: actions/checkout@v2
44+ - name: Build
45+ run: cargo build --verbose
46+ - name: Run tests
47+ run: cargo test --verbose
48 diff --git a/CHANGELOG.md b/CHANGELOG.md
49new file mode 100644
50index 0000000..173f38e
51--- /dev/null
52+++ b/CHANGELOG.md
53 @@ -0,0 +1,3 @@
54+ mail-auth 0.1.0
55+ ================================
56+ - Initial release.
57 diff --git a/Cargo.toml b/Cargo.toml
58index 2ae36a2..a7fbffe 100644
59--- a/Cargo.toml
60+++ b/Cargo.toml
61 @@ -1,12 +1,22 @@
62 [package]
63 name = "mail-auth"
64+ description = "DKIM, ARC, SPF and DMARC library for Rust"
65 version = "0.1.0"
66 edition = "2021"
67+ authors = [ "Stalwart Labs <hello@stalw.art>"]
68+ license = "Apache-2.0 OR MIT"
69+ repository = "https://github.com/stalwartlabs/mail-auth"
70+ homepage = "https://github.com/stalwartlabs/mail-auth"
71+ keywords = ["dkim", "dmarc", "spf", "arc", "email", "mail", "e-mail"]
72+ categories = ["email", "authentication"]
73+ readme = "README.md"
74+ resolver = "2"
75
76+ [lib]
77+ doctest = false
78
79 [dependencies]
80- #mail-parser = { version = "0.7", git = "https://github.com/stalwartlabs/mail-parser", features = ["ludicrous_mode", "full_encoding"]
81- mail-parser = { path = "/home/vagrant/code/mail-parser", features = ["ludicrous_mode", "full_encoding"] }
82+ mail-parser = { version = "0.8", git = "https://github.com/stalwartlabs/mail-parser", features = ["ludicrous_mode", "full_encoding"] }
83 mail-builder = { version = "0.2.4", git = "https://github.com/stalwartlabs/mail-builder", features = ["ludicrous_mode"] }
84 rsa = {version = "0.7.0"}
85 ed25519-dalek = "1.0.1"
86 diff --git a/LICENSE-APACHE b/LICENSE-APACHE
87new file mode 100644
88index 0000000..16fe87b
89--- /dev/null
90+++ b/LICENSE-APACHE
91 @@ -0,0 +1,201 @@
92+ Apache License
93+ Version 2.0, January 2004
94+ http://www.apache.org/licenses/
95+
96+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
97+
98+ 1. Definitions.
99+
100+ "License" shall mean the terms and conditions for use, reproduction,
101+ and distribution as defined by Sections 1 through 9 of this document.
102+
103+ "Licensor" shall mean the copyright owner or entity authorized by
104+ the copyright owner that is granting the License.
105+
106+ "Legal Entity" shall mean the union of the acting entity and all
107+ other entities that control, are controlled by, or are under common
108+ control with that entity. For the purposes of this definition,
109+ "control" means (i) the power, direct or indirect, to cause the
110+ direction or management of such entity, whether by contract or
111+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
112+ outstanding shares, or (iii) beneficial ownership of such entity.
113+
114+ "You" (or "Your") shall mean an individual or Legal Entity
115+ exercising permissions granted by this License.
116+
117+ "Source" form shall mean the preferred form for making modifications,
118+ including but not limited to software source code, documentation
119+ source, and configuration files.
120+
121+ "Object" form shall mean any form resulting from mechanical
122+ transformation or translation of a Source form, including but
123+ not limited to compiled object code, generated documentation,
124+ and conversions to other media types.
125+
126+ "Work" shall mean the work of authorship, whether in Source or
127+ Object form, made available under the License, as indicated by a
128+ copyright notice that is included in or attached to the work
129+ (an example is provided in the Appendix below).
130+
131+ "Derivative Works" shall mean any work, whether in Source or Object
132+ form, that is based on (or derived from) the Work and for which the
133+ editorial revisions, annotations, elaborations, or other modifications
134+ represent, as a whole, an original work of authorship. For the purposes
135+ of this License, Derivative Works shall not include works that remain
136+ separable from, or merely link (or bind by name) to the interfaces of,
137+ the Work and Derivative Works thereof.
138+
139+ "Contribution" shall mean any work of authorship, including
140+ the original version of the Work and any modifications or additions
141+ to that Work or Derivative Works thereof, that is intentionally
142+ submitted to Licensor for inclusion in the Work by the copyright owner
143+ or by an individual or Legal Entity authorized to submit on behalf of
144+ the copyright owner. For the purposes of this definition, "submitted"
145+ means any form of electronic, verbal, or written communication sent
146+ to the Licensor or its representatives, including but not limited to
147+ communication on electronic mailing lists, source code control systems,
148+ and issue tracking systems that are managed by, or on behalf of, the
149+ Licensor for the purpose of discussing and improving the Work, but
150+ excluding communication that is conspicuously marked or otherwise
151+ designated in writing by the copyright owner as "Not a Contribution."
152+
153+ "Contributor" shall mean Licensor and any individual or Legal Entity
154+ on behalf of whom a Contribution has been received by Licensor and
155+ subsequently incorporated within the Work.
156+
157+ 2. Grant of Copyright License. Subject to the terms and conditions of
158+ this License, each Contributor hereby grants to You a perpetual,
159+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
160+ copyright license to reproduce, prepare Derivative Works of,
161+ publicly display, publicly perform, sublicense, and distribute the
162+ Work and such Derivative Works in Source or Object form.
163+
164+ 3. Grant of Patent License. Subject to the terms and conditions of
165+ this License, each Contributor hereby grants to You a perpetual,
166+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
167+ (except as stated in this section) patent license to make, have made,
168+ use, offer to sell, sell, import, and otherwise transfer the Work,
169+ where such license applies only to those patent claims licensable
170+ by such Contributor that are necessarily infringed by their
171+ Contribution(s) alone or by combination of their Contribution(s)
172+ with the Work to which such Contribution(s) was submitted. If You
173+ institute patent litigation against any entity (including a
174+ cross-claim or counterclaim in a lawsuit) alleging that the Work
175+ or a Contribution incorporated within the Work constitutes direct
176+ or contributory patent infringement, then any patent licenses
177+ granted to You under this License for that Work shall terminate
178+ as of the date such litigation is filed.
179+
180+ 4. Redistribution. You may reproduce and distribute copies of the
181+ Work or Derivative Works thereof in any medium, with or without
182+ modifications, and in Source or Object form, provided that You
183+ meet the following conditions:
184+
185+ (a) You must give any other recipients of the Work or
186+ Derivative Works a copy of this License; and
187+
188+ (b) You must cause any modified files to carry prominent notices
189+ stating that You changed the files; and
190+
191+ (c) You must retain, in the Source form of any Derivative Works
192+ that You distribute, all copyright, patent, trademark, and
193+ attribution notices from the Source form of the Work,
194+ excluding those notices that do not pertain to any part of
195+ the Derivative Works; and
196+
197+ (d) If the Work includes a "NOTICE" text file as part of its
198+ distribution, then any Derivative Works that You distribute must
199+ include a readable copy of the attribution notices contained
200+ within such NOTICE file, excluding those notices that do not
201+ pertain to any part of the Derivative Works, in at least one
202+ of the following places: within a NOTICE text file distributed
203+ as part of the Derivative Works; within the Source form or
204+ documentation, if provided along with the Derivative Works; or,
205+ within a display generated by the Derivative Works, if and
206+ wherever such third-party notices normally appear. The contents
207+ of the NOTICE file are for informational purposes only and
208+ do not modify the License. You may add Your own attribution
209+ notices within Derivative Works that You distribute, alongside
210+ or as an addendum to the NOTICE text from the Work, provided
211+ that such additional attribution notices cannot be construed
212+ as modifying the License.
213+
214+ You may add Your own copyright statement to Your modifications and
215+ may provide additional or different license terms and conditions
216+ for use, reproduction, or distribution of Your modifications, or
217+ for any such Derivative Works as a whole, provided Your use,
218+ reproduction, and distribution of the Work otherwise complies with
219+ the conditions stated in this License.
220+
221+ 5. Submission of Contributions. Unless You explicitly state otherwise,
222+ any Contribution intentionally submitted for inclusion in the Work
223+ by You to the Licensor shall be under the terms and conditions of
224+ this License, without any additional terms or conditions.
225+ Notwithstanding the above, nothing herein shall supersede or modify
226+ the terms of any separate license agreement you may have executed
227+ with Licensor regarding such Contributions.
228+
229+ 6. Trademarks. This License does not grant permission to use the trade
230+ names, trademarks, service marks, or product names of the Licensor,
231+ except as required for reasonable and customary use in describing the
232+ origin of the Work and reproducing the content of the NOTICE file.
233+
234+ 7. Disclaimer of Warranty. Unless required by applicable law or
235+ agreed to in writing, Licensor provides the Work (and each
236+ Contributor provides its Contributions) on an "AS IS" BASIS,
237+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
238+ implied, including, without limitation, any warranties or conditions
239+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
240+ PARTICULAR PURPOSE. You are solely responsible for determining the
241+ appropriateness of using or redistributing the Work and assume any
242+ risks associated with Your exercise of permissions under this License.
243+
244+ 8. Limitation of Liability. In no event and under no legal theory,
245+ whether in tort (including negligence), contract, or otherwise,
246+ unless required by applicable law (such as deliberate and grossly
247+ negligent acts) or agreed to in writing, shall any Contributor be
248+ liable to You for damages, including any direct, indirect, special,
249+ incidental, or consequential damages of any character arising as a
250+ result of this License or out of the use or inability to use the
251+ Work (including but not limited to damages for loss of goodwill,
252+ work stoppage, computer failure or malfunction, or any and all
253+ other commercial damages or losses), even if such Contributor
254+ has been advised of the possibility of such damages.
255+
256+ 9. Accepting Warranty or Additional Liability. While redistributing
257+ the Work or Derivative Works thereof, You may choose to offer,
258+ and charge a fee for, acceptance of support, warranty, indemnity,
259+ or other liability obligations and/or rights consistent with this
260+ License. However, in accepting such obligations, You may act only
261+ on Your own behalf and on Your sole responsibility, not on behalf
262+ of any other Contributor, and only if You agree to indemnify,
263+ defend, and hold each Contributor harmless for any liability
264+ incurred by, or claims asserted against, such Contributor by reason
265+ of your accepting any such warranty or additional liability.
266+
267+ END OF TERMS AND CONDITIONS
268+
269+ APPENDIX: How to apply the Apache License to your work.
270+
271+ To apply the Apache License to your work, attach the following
272+ boilerplate notice, with the fields enclosed by brackets "[]"
273+ replaced with your own identifying information. (Don't include
274+ the brackets!) The text should be enclosed in the appropriate
275+ comment syntax for the file format. We also recommend that a
276+ file or class name and description of purpose be included on the
277+ same "printed page" as the copyright notice for easier
278+ identification within third-party archives.
279+
280+ Copyright [yyyy] [name of copyright owner]
281+
282+ Licensed under the Apache License, Version 2.0 (the "License");
283+ you may not use this file except in compliance with the License.
284+ You may obtain a copy of the License at
285+
286+ http://www.apache.org/licenses/LICENSE-2.0
287+
288+ Unless required by applicable law or agreed to in writing, software
289+ distributed under the License is distributed on an "AS IS" BASIS,
290+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
291+ See the License for the specific language governing permissions and
292+ limitations under the License.
293 diff --git a/LICENSE-MIT b/LICENSE-MIT
294new file mode 100644
295index 0000000..31aa793
296--- /dev/null
297+++ b/LICENSE-MIT
298 @@ -0,0 +1,23 @@
299+ Permission is hereby granted, free of charge, to any
300+ person obtaining a copy of this software and associated
301+ documentation files (the "Software"), to deal in the
302+ Software without restriction, including without
303+ limitation the rights to use, copy, modify, merge,
304+ publish, distribute, sublicense, and/or sell copies of
305+ the Software, and to permit persons to whom the Software
306+ is furnished to do so, subject to the following
307+ conditions:
308+
309+ The above copyright notice and this permission notice
310+ shall be included in all copies or substantial portions
311+ of the Software.
312+
313+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
314+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
315+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
316+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
317+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
318+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
319+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
320+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
321+ DEALINGS IN THE SOFTWARE.
322 diff --git a/README.md b/README.md
323index 243c8b6..4acd5e8 100644
324--- a/README.md
325+++ b/README.md
326 @@ -1,2 +1,243 @@
327 # mail-auth
328- DKIM, SPF and DMARC library for Rust
329+
330+ [![crates.io](https://img.shields.io/crates/v/mail-auth)](https://crates.io/crates/mail-auth)
331+ [![build](https://github.com/stalwartlabs/mail-auth/actions/workflows/rust.yml/badge.svg)](https://github.com/stalwartlabs/mail-auth/actions/workflows/rust.yml)
332+ [![docs.rs](https://img.shields.io/docsrs/mail-auth)](https://docs.rs/mail-auth)
333+ [![crates.io](https://img.shields.io/crates/l/mail-auth)](http://www.apache.org/licenses/LICENSE-2.0)
334+
335+ _mail-auth_ is an e-mail authentication and reporting library written in Rust that supports the **DKIM**, **ARC**, **SPF** and **DMARC**
336+ protocols. The library aims to be fast, safe and correct while supporting all major [message authentication and reporting RFCs](#conformed-rfcs).
337+
338+ Features:
339+
340+ - **DomainKeys Identified Mail (DKIM)**:
341+ - ED25519-SHA256 (Edwards-Curve Digital Signature Algorithm), RSA-SHA256 and RSA-SHA1 signing and verification.
342+ - DKIM Authorized Third-Party Signatures.
343+ - DKIM failure reporting using the Abuse Reporting Format.
344+ - **Authenticated Received Chain (ARC)**:
345+ - ED25519-SHA256 (Edwards-Curve Digital Signature Algorithm), RSA-SHA256 and RSA-SHA1 chain verification.
346+ - ARC sealing.
347+ - **Sender Policy Framework (SPF)**:
348+ - Policy evalution.
349+ - SPF failure reporting using the Abuse Reporting Format.
350+ - **Domain-based Message Authentication, Reporting, and Conformance (DMARC)**:
351+ - Policy evaluation.
352+ - DMARC aggregate report parsing and generation.
353+ - **Abuse Reporting Format (ARF)**:
354+ - Abuse and Authentication failure reporting.
355+ - Feedback report parsing and generation.
356+
357+
358+ ## Usage examples
359+
360+ ### DKIM Signature Verification
361+
362+ ```rust
363+ // Create a resolver using Cloudflare DNS
364+ let resolver = Resolver::new_cloudflare_tls().unwrap();
365+
366+ // Parse message
367+ let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
368+
369+ // Validate signature
370+ let result = resolver.verify_dkim(&authenticated_message).await;
371+
372+ // Make sure all signatures passed verification
373+ assert!(result.iter().all(|s| s.result() == &DKIMResult::Pass));
374+ ```
375+
376+ ### DKIM Signing
377+
378+ ```rust
379+ // Sign an e-mail message using RSA-SHA256
380+ let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
381+ let signature_rsa = Signature::new()
382+ .headers(["From", "To", "Subject"])
383+ .domain("example.com")
384+ .selector("default")
385+ .sign(RFC5322_MESSAGE.as_bytes(), &pk_rsa)
386+ .unwrap();
387+
388+ // Sign an e-mail message using ED25519-SHA256
389+ let pk_ed = PrivateKey::from_ed25519(
390+ &base64_decode(ED25519_PUBLIC_KEY.as_bytes()).unwrap(),
391+ &base64_decode(ED25519_PRIVATE_KEY.as_bytes()).unwrap(),
392+ )
393+ .unwrap();
394+ let signature_ed = Signature::new()
395+ .headers(["From", "To", "Subject"])
396+ .domain("example.com")
397+ .selector("default-ed")
398+ .sign(RFC5322_MESSAGE.as_bytes(), &pk_ed)
399+ .unwrap();
400+
401+ // Print the message including both signatures to stdout
402+ println!(
403+ "{}{}{}",
404+ signature_rsa.to_header(),
405+ signature_ed.to_header(),
406+ RFC5322_MESSAGE
407+ );
408+ ```
409+
410+ ### ARC Chain Verification
411+
412+ ```rust
413+ // Create a resolver using Cloudflare DNS
414+ let resolver = Resolver::new_cloudflare_tls().unwrap();
415+
416+ // Parse message
417+ let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
418+
419+ // Validate ARC chain
420+ let result = resolver.verify_arc(&authenticated_message).await;
421+
422+ // Make sure ARC passed verification
423+ assert_eq!(result.result(), &DKIMResult::Pass);
424+ ```
425+
426+ ### ARC Chain Sealing
427+
428+ ```rust
429+ // Create a resolver using Cloudflare DNS
430+ let resolver = Resolver::new_cloudflare_tls().unwrap();
431+
432+ // Parse message to be sealed
433+ let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
434+
435+ // Verify ARC and DKIM signatures
436+ let arc_result = resolver.verify_arc(&authenticated_message).await;
437+ let dkim_result = resolver.verify_dkim(&authenticated_message).await;
438+
439+ // Build Authenticated-Results header
440+ let auth_results = AuthenticationResults::new("mx.mydomain.org")
441+ .with_dkim_result(&dkim_result, "sender@example.org")
442+ .with_arc_result(&arc_result, "127.0.0.1".parse().unwrap());
443+
444+ // Seal message
445+ if arc_result.can_be_sealed() {
446+ // Seal the e-mail message using RSA-SHA256
447+ let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
448+ let arc_set = ARC::new(&auth_results)
449+ .domain("example.org")
450+ .selector("default")
451+ .headers(["From", "To", "Subject", "DKIM-Signature"])
452+ .seal(&authenticated_message, &arc_result, &pk_rsa)
453+ .unwrap();
454+
455+ // Print the sealed message to stdout
456+ println!("{}{}", arc_set.to_header(), RFC5322_MESSAGE)
457+ } else {
458+ eprintln!("The message could not be sealed, probably an ARC chain with cv=fail was found.")
459+ }
460+ ```
461+
462+ ### SPF Policy Evaluation
463+
464+ ```rust
465+ // Create a resolver using Cloudflare DNS
466+ let resolver = Resolver::new_cloudflare_tls().unwrap();
467+
468+ // Verify HELO identity
469+ let result = resolver
470+ .verify_spf_helo("127.0.0.1".parse().unwrap(), "gmail.com")
471+ .await;
472+ assert_eq!(result.result(), SPFResult::Fail);
473+
474+ // Verify MAIL-FROM identity
475+ let result = resolver
476+ .verify_spf_sender("::1".parse().unwrap(), "gmail.com", "sender@gmail.com")
477+ .await;
478+ assert_eq!(result.result(), SPFResult::Fail);
479+ ```
480+
481+ ### DMARC Policy Evaluation
482+
483+ ```rust
484+ // Create a resolver using Cloudflare DNS
485+ let resolver = Resolver::new_cloudflare_tls().unwrap();
486+
487+ // Verify DKIM signatures
488+ let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
489+ let dkim_result = resolver.verify_dkim(&authenticated_message).await;
490+
491+ // Verify SPF MAIL-FROM identity
492+ let spf_result = resolver
493+ .verify_spf_sender("::1".parse().unwrap(), "example.org", "sender@example.org")
494+ .await;
495+
496+ // Verify DMARC
497+ let dmarc_result = resolver
498+ .verify_dmarc(
499+ &authenticated_message,
500+ &dkim_result,
501+ "example.org",
502+ &spf_result,
503+ )
504+ .await;
505+ assert_eq!(dmarc_result.dkim_result(), &DMARCResult::Pass);
506+ assert_eq!(dmarc_result.spf_result(), &DMARCResult::Pass);
507+ ```
508+
509+ More examples available under the [examples](examples) directory.
510+
511+ ## Testing & Fuzzing
512+
513+ To run the testsuite:
514+
515+ ```bash
516+ $ cargo test --all-features
517+ ```
518+
519+ To fuzz the library with `cargo-fuzz`:
520+
521+ ```bash
522+ $ cargo +nightly fuzz run mail_parser
523+ ```
524+
525+ ## Conformed RFCs
526+
527+ ### DKIM
528+
529+ - [RFC 6376 - DomainKeys Identified Mail (DKIM) Signatures](https://datatracker.ietf.org/doc/html/rfc6376)
530+ - [RFC 6541 - DomainKeys Identified Mail (DKIM) Authorized Third-Party Signatures](https://datatracker.ietf.org/doc/html/rfc6541)
531+ - [RFC 6651 - Extensions to DomainKeys Identified Mail (DKIM) for Failure Reporting](https://datatracker.ietf.org/doc/html/rfc6651)
532+ - [RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA)](https://datatracker.ietf.org/doc/html/rfc8032)
533+ - [RFC 4686 - Analysis of Threats Motivating DomainKeys Identified Mail (DKIM)](https://datatracker.ietf.org/doc/html/rfc4686)
534+ - [RFC 5016 - Requirements for a DomainKeys Identified Mail (DKIM) Signing Practices Protocol](https://datatracker.ietf.org/doc/html/rfc5016)
535+ - [RFC 5585 - DomainKeys Identified Mail (DKIM) Service Overview](https://datatracker.ietf.org/doc/html/rfc5585)
536+ - [RFC 5672 - DomainKeys Identified Mail (DKIM) Signatures -- Update](https://datatracker.ietf.org/doc/html/rfc5672)
537+ - [RFC 5863 - DomainKeys Identified Mail (DKIM) Development, Deployment, and Operations](https://datatracker.ietf.org/doc/html/rfc5863)
538+ - [RFC 6377 - DomainKeys Identified Mail (DKIM) and Mailing Lists](https://datatracker.ietf.org/doc/html/rfc6377)
539+
540+ ### SPF
541+ - [RFC 7208 - Sender Policy Framework (SPF)](https://datatracker.ietf.org/doc/html/rfc7208)
542+ - [RFC 6652 - Sender Policy Framework (SPF) Authentication Failure Reporting Using the Abuse Reporting Format](https://datatracker.ietf.org/doc/html/rfc6652)
543+
544+ ### DMARC
545+ - [RFC 7489 - Domain-based Message Authentication, Reporting, and Conformance (DMARC)](https://datatracker.ietf.org/doc/html/rfc7489)
546+ - [RFC 8617 - The Authenticated Received Chain (ARC) Protocol](https://datatracker.ietf.org/doc/html/rfc8617)
547+ - [RFC 8601 - Message Header Field for Indicating Message Authentication Status](https://datatracker.ietf.org/doc/html/rfc8601)
548+ - [RFC 8616 - Email Authentication for Internationalized Mail](https://datatracker.ietf.org/doc/html/rfc8616)
549+ - [RFC 7960 - Interoperability Issues between Domain-based Message Authentication, Reporting, and Conformance (DMARC) and Indirect Email Flows](https://datatracker.ietf.org/doc/html/rfc7960)
550+
551+ ### ARF
552+ - [RFC 5965 - An Extensible Format for Email Feedback Reports](https://datatracker.ietf.org/doc/html/rfc5965)
553+ - [RFC 6430 - Email Feedback Report Type Value: not-spam](https://datatracker.ietf.org/doc/html/rfc6430)
554+ - [RFC 6590 - Redaction of Potentially Sensitive Data from Mail Abuse Reports](https://datatracker.ietf.org/doc/html/rfc6590)
555+ - [RFC 6591 - Authentication Failure Reporting Using the Abuse Reporting Format](https://datatracker.ietf.org/doc/html/rfc6591)
556+ - [RFC 6650 - Creation and Use of Email Feedback Reports: An Applicability Statement for the Abuse Reporting Format (ARF)](https://datatracker.ietf.org/doc/html/rfc6650)
557+
558+ ## License
559+
560+ Licensed under either of
561+
562+ * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
563+ * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
564+
565+ at your option.
566+
567+ ## Copyright
568+
569+ Copyright (C) 2020-2022, Stalwart Labs Ltd.
570+
571 diff --git a/examples/arc_seal.rs b/examples/arc_seal.rs
572new file mode 100644
573index 0000000..7a93c9c
574--- /dev/null
575+++ b/examples/arc_seal.rs
576 @@ -0,0 +1,67 @@
577+ /*
578+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
579+ *
580+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
581+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
582+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
583+ * option. This file may not be copied, modified, or distributed
584+ * except according to those terms.
585+ */
586+
587+ use mail_auth::{
588+ arc::ARC, common::headers::HeaderWriter, AuthenticatedMessage, AuthenticationResults,
589+ PrivateKey, Resolver,
590+ };
591+
592+ const TEST_MESSAGE: &str = include_str!("../resources/arc/001.txt");
593+
594+ const RSA_PRIVATE_KEY: &str = r#"-----BEGIN RSA PRIVATE KEY-----
595+ MIICXwIBAAKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYtIxN2SnFC
596+ jxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/RtdC2UzJ1lWT947qR+Rcac2gb
597+ to/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB
598+ AoGBALmn+XwWk7akvkUlqb+dOxyLB9i5VBVfje89Teolwc9YJT36BGN/l4e0l6QX
599+ /1//6DWUTB3KI6wFcm7TWJcxbS0tcKZX7FsJvUz1SbQnkS54DJck1EZO/BLa5ckJ
600+ gAYIaqlA9C0ZwM6i58lLlPadX/rtHb7pWzeNcZHjKrjM461ZAkEA+itss2nRlmyO
601+ n1/5yDyCluST4dQfO8kAB3toSEVc7DeFeDhnC1mZdjASZNvdHS4gbLIA1hUGEF9m
602+ 3hKsGUMMPwJBAPW5v/U+AWTADFCS22t72NUurgzeAbzb1HWMqO4y4+9Hpjk5wvL/
603+ eVYizyuce3/fGke7aRYw/ADKygMJdW8H/OcCQQDz5OQb4j2QDpPZc0Nc4QlbvMsj
604+ 7p7otWRO5xRa6SzXqqV3+F0VpqvDmshEBkoCydaYwc2o6WQ5EBmExeV8124XAkEA
605+ qZzGsIxVP+sEVRWZmW6KNFSdVUpk3qzK0Tz/WjQMe5z0UunY9Ax9/4PVhp/j61bf
606+ eAYXunajbBSOLlx4D+TunwJBANkPI5S9iylsbLs6NkaMHV6k5ioHBBmgCak95JGX
607+ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
608+ -----END RSA PRIVATE KEY-----"#;
609+
610+ #[tokio::main]
611+ async fn main() {
612+ // Create a resolver using Cloudflare DNS
613+ let resolver = Resolver::new_cloudflare_tls().unwrap();
614+
615+ // Parse message to be sealed
616+ let authenticated_message = AuthenticatedMessage::parse(TEST_MESSAGE.as_bytes()).unwrap();
617+
618+ // Verify ARC and DKIM signatures
619+ let arc_result = resolver.verify_arc(&authenticated_message).await;
620+ let dkim_result = resolver.verify_dkim(&authenticated_message).await;
621+
622+ // Build Authenticated-Results header
623+ let auth_results = AuthenticationResults::new("mx.mydomain.org")
624+ .with_dkim_result(&dkim_result, "sender@example.org")
625+ .with_arc_result(&arc_result, "127.0.0.1".parse().unwrap());
626+
627+ // Seal message
628+ if arc_result.can_be_sealed() {
629+ // Seal the e-mail message using RSA-SHA256
630+ let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
631+ let arc_set = ARC::new(&auth_results)
632+ .domain("example.org")
633+ .selector("default")
634+ .headers(["From", "To", "Subject", "DKIM-Signature"])
635+ .seal(&authenticated_message, &arc_result, &pk_rsa)
636+ .unwrap();
637+
638+ // Print the sealed message to stdout
639+ println!("{}{}", arc_set.to_header(), TEST_MESSAGE)
640+ } else {
641+ eprintln!("The message could not be sealed, probably an ARC chain with cv=fail was found.")
642+ }
643+ }
644 diff --git a/examples/arc_verify.rs b/examples/arc_verify.rs
645new file mode 100644
646index 0000000..e04cf22
647--- /dev/null
648+++ b/examples/arc_verify.rs
649 @@ -0,0 +1,28 @@
650+ /*
651+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
652+ *
653+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
654+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
655+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
656+ * option. This file may not be copied, modified, or distributed
657+ * except according to those terms.
658+ */
659+
660+ use mail_auth::{AuthenticatedMessage, DKIMResult, Resolver};
661+
662+ const TEST_MESSAGE: &str = include_str!("../resources/arc/001.txt");
663+
664+ #[tokio::main]
665+ async fn main() {
666+ // Create a resolver using Cloudflare DNS
667+ let resolver = Resolver::new_cloudflare_tls().unwrap();
668+
669+ // Parse message
670+ let authenticated_message = AuthenticatedMessage::parse(TEST_MESSAGE.as_bytes()).unwrap();
671+
672+ // Validate ARC chain
673+ let result = resolver.verify_arc(&authenticated_message).await;
674+
675+ // Make sure ARC passed verification
676+ assert_eq!(result.result(), &DKIMResult::Pass);
677+ }
678 diff --git a/examples/dkim_sign.rs b/examples/dkim_sign.rs
679new file mode 100644
680index 0000000..07f6d04
681--- /dev/null
682+++ b/examples/dkim_sign.rs
683 @@ -0,0 +1,70 @@
684+ /*
685+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
686+ *
687+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
688+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
689+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
690+ * option. This file may not be copied, modified, or distributed
691+ * except according to those terms.
692+ */
693+
694+ use mail_auth::{common::headers::HeaderWriter, dkim::Signature, PrivateKey};
695+ use mail_parser::decoders::base64::base64_decode;
696+
697+ const RSA_PRIVATE_KEY: &str = r#"-----BEGIN RSA PRIVATE KEY-----
698+ MIICXwIBAAKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYtIxN2SnFC
699+ jxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/RtdC2UzJ1lWT947qR+Rcac2gb
700+ to/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB
701+ AoGBALmn+XwWk7akvkUlqb+dOxyLB9i5VBVfje89Teolwc9YJT36BGN/l4e0l6QX
702+ /1//6DWUTB3KI6wFcm7TWJcxbS0tcKZX7FsJvUz1SbQnkS54DJck1EZO/BLa5ckJ
703+ gAYIaqlA9C0ZwM6i58lLlPadX/rtHb7pWzeNcZHjKrjM461ZAkEA+itss2nRlmyO
704+ n1/5yDyCluST4dQfO8kAB3toSEVc7DeFeDhnC1mZdjASZNvdHS4gbLIA1hUGEF9m
705+ 3hKsGUMMPwJBAPW5v/U+AWTADFCS22t72NUurgzeAbzb1HWMqO4y4+9Hpjk5wvL/
706+ eVYizyuce3/fGke7aRYw/ADKygMJdW8H/OcCQQDz5OQb4j2QDpPZc0Nc4QlbvMsj
707+ 7p7otWRO5xRa6SzXqqV3+F0VpqvDmshEBkoCydaYwc2o6WQ5EBmExeV8124XAkEA
708+ qZzGsIxVP+sEVRWZmW6KNFSdVUpk3qzK0Tz/WjQMe5z0UunY9Ax9/4PVhp/j61bf
709+ eAYXunajbBSOLlx4D+TunwJBANkPI5S9iylsbLs6NkaMHV6k5ioHBBmgCak95JGX
710+ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
711+ -----END RSA PRIVATE KEY-----"#;
712+
713+ const ED25519_PRIVATE_KEY: &str = "nWGxne/9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A=";
714+ const ED25519_PUBLIC_KEY: &str = "11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=";
715+
716+ const TEST_MESSAGE: &str = r#"From: bill@example.com
717+ To: jdoe@example.com
718+ Subject: TPS Report
719+
720+ I'm going to need those TPS reports ASAP. So, if you could do that, that'd be great.
721+ "#;
722+
723+ fn main() {
724+ // Sign an e-mail message using RSA-SHA256
725+ let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
726+ let signature_rsa = Signature::new()
727+ .headers(["From", "To", "Subject"])
728+ .domain("example.com")
729+ .selector("default")
730+ .sign(TEST_MESSAGE.as_bytes(), &pk_rsa)
731+ .unwrap();
732+
733+ // Sign an e-mail message using ED25519-SHA256
734+ let pk_ed = PrivateKey::from_ed25519(
735+ &base64_decode(ED25519_PUBLIC_KEY.as_bytes()).unwrap(),
736+ &base64_decode(ED25519_PRIVATE_KEY.as_bytes()).unwrap(),
737+ )
738+ .unwrap();
739+ let signature_ed = Signature::new()
740+ .headers(["From", "To", "Subject"])
741+ .domain("example.com")
742+ .selector("default-ed")
743+ .sign(TEST_MESSAGE.as_bytes(), &pk_ed)
744+ .unwrap();
745+
746+ // Print the message including both signatures to stdout
747+ println!(
748+ "{}{}{}",
749+ signature_rsa.to_header(),
750+ signature_ed.to_header(),
751+ TEST_MESSAGE
752+ );
753+ }
754 diff --git a/examples/dkim_verify.rs b/examples/dkim_verify.rs
755new file mode 100644
756index 0000000..622fec9
757--- /dev/null
758+++ b/examples/dkim_verify.rs
759 @@ -0,0 +1,53 @@
760+ /*
761+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
762+ *
763+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
764+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
765+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
766+ * option. This file may not be copied, modified, or distributed
767+ * except according to those terms.
768+ */
769+
770+ use mail_auth::{AuthenticatedMessage, DKIMResult, Resolver};
771+
772+ const TEST_MESSAGE: &str = r#"DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed;
773+ d=football.example.com; i=@football.example.com;
774+ q=dns/txt; s=brisbane; t=1528637909; h=from : to :
775+ subject : date : message-id : from : subject : date;
776+ bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
777+ b=/gCrinpcQOoIfuHNQIbq4pgh9kyIK3AQUdt9OdqQehSwhEIug4D11Bus
778+ Fa3bT3FY5OsU7ZbnKELq+eXdp1Q1Dw==
779+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
780+ d=football.example.com; i=@football.example.com;
781+ q=dns/txt; s=test; t=1528637909; h=from : to : subject :
782+ date : message-id : from : subject : date;
783+ bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
784+ b=F45dVWDfMbQDGHJFlXUNB2HKfbCeLRyhDXgFpEL8GwpsRe0IeIixNTe3
785+ DhCVlUrSjV4BwcVcOF6+FF3Zo9Rpo1tFOeS9mPYQTnGdaSGsgeefOsk2Jz
786+ dA+L10TeYt9BgDfQNZtKdN1WO//KgIqXP7OdEFE4LjFYNcUxZQ4FADY+8=
787+ From: Joe SixPack <joe@football.example.com>
788+ To: Suzie Q <suzie@shopping.example.net>
789+ Subject: Is dinner ready?
790+ Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
791+ Message-ID: <20030712040037.46341.5F8J@football.example.com>
792+
793+ Hi.
794+
795+ We lost the game. Are you hungry yet?
796+
797+ Joe."#;
798+
799+ #[tokio::main]
800+ async fn main() {
801+ // Create a resolver using Cloudflare DNS
802+ let resolver = Resolver::new_cloudflare_tls().unwrap();
803+
804+ // Parse message
805+ let authenticated_message = AuthenticatedMessage::parse(TEST_MESSAGE.as_bytes()).unwrap();
806+
807+ // Validate signature
808+ let result = resolver.verify_dkim(&authenticated_message).await;
809+
810+ // Make sure all signatures passed verification
811+ assert!(result.iter().all(|s| s.result() == &DKIMResult::Pass));
812+ }
813 diff --git a/examples/dmarc_verify.rs b/examples/dmarc_verify.rs
814new file mode 100644
815index 0000000..cbf1049
816--- /dev/null
817+++ b/examples/dmarc_verify.rs
818 @@ -0,0 +1,65 @@
819+ /*
820+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
821+ *
822+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
823+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
824+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
825+ * option. This file may not be copied, modified, or distributed
826+ * except according to those terms.
827+ */
828+
829+ use mail_auth::{AuthenticatedMessage, DMARCResult, Resolver};
830+
831+ const TEST_MESSAGE: &str = r#"DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed;
832+ d=football.example.com; i=@football.example.com;
833+ q=dns/txt; s=brisbane; t=1528637909; h=from : to :
834+ subject : date : message-id : from : subject : date;
835+ bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
836+ b=/gCrinpcQOoIfuHNQIbq4pgh9kyIK3AQUdt9OdqQehSwhEIug4D11Bus
837+ Fa3bT3FY5OsU7ZbnKELq+eXdp1Q1Dw==
838+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
839+ d=football.example.com; i=@football.example.com;
840+ q=dns/txt; s=test; t=1528637909; h=from : to : subject :
841+ date : message-id : from : subject : date;
842+ bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
843+ b=F45dVWDfMbQDGHJFlXUNB2HKfbCeLRyhDXgFpEL8GwpsRe0IeIixNTe3
844+ DhCVlUrSjV4BwcVcOF6+FF3Zo9Rpo1tFOeS9mPYQTnGdaSGsgeefOsk2Jz
845+ dA+L10TeYt9BgDfQNZtKdN1WO//KgIqXP7OdEFE4LjFYNcUxZQ4FADY+8=
846+ From: Joe SixPack <joe@football.example.com>
847+ To: Suzie Q <suzie@shopping.example.net>
848+ Subject: Is dinner ready?
849+ Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT)
850+ Message-ID: <20030712040037.46341.5F8J@football.example.com>
851+
852+ Hi.
853+
854+ We lost the game. Are you hungry yet?
855+
856+ Joe."#;
857+
858+ #[tokio::main]
859+ async fn main() {
860+ // Create a resolver using Cloudflare DNS
861+ let resolver = Resolver::new_cloudflare_tls().unwrap();
862+
863+ // Verify DKIM signatures
864+ let authenticated_message = AuthenticatedMessage::parse(TEST_MESSAGE.as_bytes()).unwrap();
865+ let dkim_result = resolver.verify_dkim(&authenticated_message).await;
866+
867+ // Verify SPF MAIL-FROM identity
868+ let spf_result = resolver
869+ .verify_spf_sender("::1".parse().unwrap(), "example.org", "sender@example.org")
870+ .await;
871+
872+ // Verify DMARC
873+ let dmarc_result = resolver
874+ .verify_dmarc(
875+ &authenticated_message,
876+ &dkim_result,
877+ "example.org",
878+ &spf_result,
879+ )
880+ .await;
881+ assert_eq!(dmarc_result.dkim_result(), &DMARCResult::Pass);
882+ assert_eq!(dmarc_result.spf_result(), &DMARCResult::Pass);
883+ }
884 diff --git a/examples/report_arf_generate.rs b/examples/report_arf_generate.rs
885new file mode 100644
886index 0000000..c37ec71
887--- /dev/null
888+++ b/examples/report_arf_generate.rs
889 @@ -0,0 +1,51 @@
890+ /*
891+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
892+ *
893+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
894+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
895+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
896+ * option. This file may not be copied, modified, or distributed
897+ * except according to those terms.
898+ */
899+
900+ use mail_auth::report::{AuthFailureType, Feedback, FeedbackType, IdentityAlignment};
901+
902+ fn main() {
903+ // Generate ARF feedback
904+ let feedback = Feedback::new(FeedbackType::AuthFailure)
905+ .with_arrival_date(5934759438)
906+ .with_authentication_results("dkim=pass")
907+ .with_incidents(10)
908+ .with_original_envelope_id("821-abc-123")
909+ .with_original_mail_from("hello@world.org")
910+ .with_original_rcpt_to("ciao@mundo.org")
911+ .with_reported_domain("example.org")
912+ .with_reported_domain("example2.org")
913+ .with_reported_uri("uri:domain.org")
914+ .with_reported_uri("uri:domain2.org")
915+ .with_reporting_mta("Manchegator 2.0")
916+ .with_source_ip("192.168.1.1".parse().unwrap())
917+ .with_user_agent("DMARC-Meister")
918+ .with_version(2)
919+ .with_source_port(1234)
920+ .with_auth_failure(AuthFailureType::Dmarc)
921+ .with_dkim_adsp_dns("v=dkim1")
922+ .with_dkim_canonicalized_body("base64 goes here")
923+ .with_dkim_canonicalized_header("more base64")
924+ .with_dkim_domain("dkim-domain.org")
925+ .with_dkim_identity("my-dkim-identity@domain.org")
926+ .with_dkim_selector("the-selector")
927+ .with_dkim_selector_dns("v=dkim1;")
928+ .with_spf_dns("v=spf1")
929+ .with_identity_alignment(IdentityAlignment::DkimSpf)
930+ .with_message(&b"From: hello@world.org\r\nTo: ciao@mundo.org\r\n\r\n"[..])
931+ .as_rfc5322(
932+ "no-reply@example.org",
933+ "ruf@otherdomain.com",
934+ "DMARC Authentication Failure Report",
935+ )
936+ .unwrap();
937+
938+ // Print ARF feedback to stdout
939+ println!("{}", feedback);
940+ }
941 diff --git a/examples/report_arf_parse.rs b/examples/report_arf_parse.rs
942new file mode 100644
943index 0000000..907b0eb
944--- /dev/null
945+++ b/examples/report_arf_parse.rs
946 @@ -0,0 +1,21 @@
947+ /*
948+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
949+ *
950+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
951+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
952+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
953+ * option. This file may not be copied, modified, or distributed
954+ * except according to those terms.
955+ */
956+
957+ use mail_auth::report::Feedback;
958+
959+ const TEST_MESSAGE: &str = include_str!("../resources/arf/001.eml");
960+
961+ fn main() {
962+ // Parse Abuse Report Format feedback repot
963+ let report = Feedback::parse_rfc5322(TEST_MESSAGE.as_bytes()).unwrap();
964+
965+ // Write ARF to stdout at JSPON
966+ println!("{}", serde_json::to_string_pretty(&report).unwrap());
967+ }
968 diff --git a/examples/report_dmarc_generate.rs b/examples/report_dmarc_generate.rs
969new file mode 100644
970index 0000000..8e1fcd4
971--- /dev/null
972+++ b/examples/report_dmarc_generate.rs
973 @@ -0,0 +1,110 @@
974+ /*
975+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
976+ *
977+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
978+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
979+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
980+ * option. This file may not be copied, modified, or distributed
981+ * except according to those terms.
982+ */
983+
984+ use mail_auth::report::{
985+ ActionDisposition, Alignment, DKIMAuthResult, DKIMResult, DMARCResult, Disposition,
986+ PolicyOverride, PolicyOverrideReason, Record, Report, SPFAuthResult, SPFDomainScope, SPFResult,
987+ };
988+
989+ fn main() {
990+ // Generate DMARC aggregate report
991+ let report = Report::new()
992+ .with_version(1.0)
993+ .with_org_name("Initech Industries Incorporated")
994+ .with_email("dmarc@initech.net")
995+ .with_extra_contact_info("XMPP:dmarc@initech.net")
996+ .with_report_id("abc-123")
997+ .with_date_range_begin(12345)
998+ .with_date_range_end(12346)
999+ .with_error("Did not include TPS report cover.")
1000+ .with_domain("example.org")
1001+ .with_version_published(1.0)
1002+ .with_adkim(Alignment::Relaxed)
1003+ .with_aspf(Alignment::Strict)
1004+ .with_p(Disposition::Quarantine)
1005+ .with_sp(Disposition::Reject)
1006+ .with_testing(false)
1007+ .with_record(
1008+ Record::new()
1009+ .with_source_ip("192.168.1.2".parse().unwrap())
1010+ .with_count(3)
1011+ .with_action_disposition(ActionDisposition::Pass)
1012+ .with_dmarc_dkim_result(DMARCResult::Pass)
1013+ .with_dmarc_spf_result(DMARCResult::Fail)
1014+ .with_policy_override_reason(
1015+ PolicyOverrideReason::new(PolicyOverride::Forwarded)
1016+ .with_comment("it was forwarded"),
1017+ )
1018+ .with_policy_override_reason(
1019+ PolicyOverrideReason::new(PolicyOverride::MailingList)
1020+ .with_comment("sent from mailing list"),
1021+ )
1022+ .with_envelope_from("hello@example.org")
1023+ .with_envelope_to("other@example.org")
1024+ .with_header_from("bye@example.org")
1025+ .with_dkim_auth_result(
1026+ DKIMAuthResult::new()
1027+ .with_domain("test.org")
1028+ .with_selector("my-selector")
1029+ .with_result(DKIMResult::PermError)
1030+ .with_human_result("failed to parse record"),
1031+ )
1032+ .with_spf_auth_result(
1033+ SPFAuthResult::new()
1034+ .with_domain("test.org")
1035+ .with_scope(SPFDomainScope::Helo)
1036+ .with_result(SPFResult::SoftFail)
1037+ .with_human_result("dns timed out"),
1038+ ),
1039+ )
1040+ .with_record(
1041+ Record::new()
1042+ .with_source_ip("a:b:c::e:f".parse().unwrap())
1043+ .with_count(99)
1044+ .with_action_disposition(ActionDisposition::Reject)
1045+ .with_dmarc_dkim_result(DMARCResult::Fail)
1046+ .with_dmarc_spf_result(DMARCResult::Pass)
1047+ .with_policy_override_reason(
1048+ PolicyOverrideReason::new(PolicyOverride::LocalPolicy)
1049+ .with_comment("on the white list"),
1050+ )
1051+ .with_policy_override_reason(
1052+ PolicyOverrideReason::new(PolicyOverride::SampledOut)
1053+ .with_comment("it was sampled out"),
1054+ )
1055+ .with_envelope_from("hello2example.org")
1056+ .with_envelope_to("other2@example.org")
1057+ .with_header_from("bye2@example.org")
1058+ .with_dkim_auth_result(
1059+ DKIMAuthResult::new()
1060+ .with_domain("test2.org")
1061+ .with_selector("my-other-selector")
1062+ .with_result(DKIMResult::Neutral)
1063+ .with_human_result("something went wrong"),
1064+ )
1065+ .with_spf_auth_result(
1066+ SPFAuthResult::new()
1067+ .with_domain("test.org")
1068+ .with_scope(SPFDomainScope::MailFrom)
1069+ .with_result(SPFResult::None)
1070+ .with_human_result("no policy found"),
1071+ ),
1072+ )
1073+ .as_rfc5322(
1074+ "initech.net",
1075+ "Initech Industries",
1076+ "noreply-dmarc@initech.net",
1077+ "dmarc-reports@example.org",
1078+ )
1079+ .unwrap();
1080+
1081+ // Print report to stdout
1082+ println!("{}", report);
1083+ }
1084 diff --git a/examples/report_dmarc_parse.rs b/examples/report_dmarc_parse.rs
1085new file mode 100644
1086index 0000000..941d2bf
1087--- /dev/null
1088+++ b/examples/report_dmarc_parse.rs
1089 @@ -0,0 +1,21 @@
1090+ /*
1091+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
1092+ *
1093+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
1094+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
1095+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
1096+ * option. This file may not be copied, modified, or distributed
1097+ * except according to those terms.
1098+ */
1099+
1100+ use mail_auth::report::Report;
1101+
1102+ const TEST_MESSAGE: &str = include_str!("../resources/dmarc-feedback/100.eml");
1103+
1104+ fn main() {
1105+ // Parse DMARC aggregate report
1106+ let report = Report::parse_rfc5322(TEST_MESSAGE.as_bytes()).unwrap();
1107+
1108+ // Write report to stdout at JSPON
1109+ println!("{}", serde_json::to_string_pretty(&report).unwrap());
1110+ }
1111 diff --git a/examples/spf_verify.rs b/examples/spf_verify.rs
1112new file mode 100644
1113index 0000000..93930f7
1114--- /dev/null
1115+++ b/examples/spf_verify.rs
1116 @@ -0,0 +1,29 @@
1117+ /*
1118+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
1119+ *
1120+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
1121+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
1122+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
1123+ * option. This file may not be copied, modified, or distributed
1124+ * except according to those terms.
1125+ */
1126+
1127+ use mail_auth::{Resolver, SPFResult};
1128+
1129+ #[tokio::main]
1130+ async fn main() {
1131+ // Create a resolver using Cloudflare DNS
1132+ let resolver = Resolver::new_cloudflare_tls().unwrap();
1133+
1134+ // Verify HELO identity
1135+ let result = resolver
1136+ .verify_spf_helo("127.0.0.1".parse().unwrap(), "gmail.com")
1137+ .await;
1138+ assert_eq!(result.result(), SPFResult::Fail);
1139+
1140+ // Verify MAIL-FROM identity
1141+ let result = resolver
1142+ .verify_spf_sender("::1".parse().unwrap(), "gmail.com", "sender@gmail.com")
1143+ .await;
1144+ assert_eq!(result.result(), SPFResult::Fail);
1145+ }
1146 diff --git a/fuzz/.gitignore b/fuzz/.gitignore
1147new file mode 100644
1148index 0000000..a092511
1149--- /dev/null
1150+++ b/fuzz/.gitignore
1151 @@ -0,0 +1,3 @@
1152+ target
1153+ corpus
1154+ artifacts
1155 diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml
1156new file mode 100644
1157index 0000000..7b38df1
1158--- /dev/null
1159+++ b/fuzz/Cargo.toml
1160 @@ -0,0 +1,25 @@
1161+ [package]
1162+ name = "mail-auth-fuzz"
1163+ version = "0.0.0"
1164+ authors = ["Automatically generated"]
1165+ publish = false
1166+ edition = "2018"
1167+
1168+ [package.metadata]
1169+ cargo-fuzz = true
1170+
1171+ [dependencies]
1172+ libfuzzer-sys = "0.4"
1173+
1174+ [dependencies.mail-auth]
1175+ path = ".."
1176+
1177+ # Prevent this from interfering with workspaces
1178+ [workspace]
1179+ members = ["."]
1180+
1181+ [[bin]]
1182+ name = "mail_auth"
1183+ path = "fuzz_targets/mail_auth.rs"
1184+ test = false
1185+ doc = false
1186 diff --git a/fuzz/fuzz_targets/mail_auth.rs b/fuzz/fuzz_targets/mail_auth.rs
1187new file mode 100644
1188index 0000000..b4b36cf
1189--- /dev/null
1190+++ b/fuzz/fuzz_targets/mail_auth.rs
1191 @@ -0,0 +1,76 @@
1192+ /*
1193+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
1194+ *
1195+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
1196+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
1197+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
1198+ * option. This file may not be copied, modified, or distributed
1199+ * except according to those terms.
1200+ */
1201+
1202+ #![no_main]
1203+ use libfuzzer_sys::fuzz_target;
1204+
1205+ use mail_auth::{
1206+ arc,
1207+ common::parse::TxtRecordParser,
1208+ dkim::{self, Atps, DomainKey, DomainKeyReport},
1209+ dmarc::DMARC,
1210+ report::{Feedback, Report},
1211+ spf::{Macro, SPF},
1212+ AuthenticatedMessage,
1213+ };
1214+
1215+ static RFC822_ALPHABET: &[u8] = b"0123456789abcdefghijklmnopqrstuvwxyz:=- \r\n";
1216+ static XML_ALPHABET: &[u8] = b"abcdefghijklmnopqrstuvwxyz</>";
1217+ static TXT_ALPHABET: &[u8] = b"abcdefghijklmnopqrstuvwxyz1=;:";
1218+
1219+ fuzz_target!(|data: &[u8]| {
1220+ let data_rfc822 = into_alphabet(data, RFC822_ALPHABET);
1221+ let data_txt = into_alphabet(data, TXT_ALPHABET);
1222+
1223+ dkim::Signature::parse(data).ok();
1224+ dkim::Signature::parse(&data_txt).ok();
1225+
1226+ arc::Signature::parse(data).ok();
1227+ arc::Signature::parse(&data_txt).ok();
1228+
1229+ arc::Seal::parse(data).ok();
1230+ arc::Seal::parse(&data_txt).ok();
1231+
1232+ arc::Results::parse(data).ok();
1233+ arc::Results::parse(&data_txt).ok();
1234+
1235+ AuthenticatedMessage::parse(data);
1236+ AuthenticatedMessage::parse(&data_rfc822);
1237+
1238+ DomainKey::parse(data).ok();
1239+ DomainKey::parse(&data_txt).ok();
1240+
1241+ DomainKeyReport::parse(data).ok();
1242+ DomainKeyReport::parse(&data_txt).ok();
1243+
1244+ Atps::parse(data).ok();
1245+ Atps::parse(&data_txt).ok();
1246+
1247+ DMARC::parse(data).ok();
1248+ DMARC::parse(&data_txt).ok();
1249+
1250+ SPF::parse(data).ok();
1251+ SPF::parse(&data_txt).ok();
1252+
1253+ Macro::parse(data).ok();
1254+ Macro::parse(&data_txt).ok();
1255+
1256+ Report::parse_xml(data).ok();
1257+ Report::parse_xml(&into_alphabet(data, XML_ALPHABET)).ok();
1258+
1259+ Feedback::parse_arf(data);
1260+ Feedback::parse_arf(&data_rfc822);
1261+ });
1262+
1263+ fn into_alphabet(data: &[u8], alphabet: &[u8]) -> Vec<u8> {
1264+ data.iter()
1265+ .map(|&byte| alphabet[byte as usize % alphabet.len()])
1266+ .collect()
1267+ }
1268 diff --git a/resources/arc/001.txt b/resources/arc/001.txt
1269index 495e1f3..52dabed 100644
1270--- a/resources/arc/001.txt
1271+++ b/resources/arc/001.txt
1272 @@ -2,7 +2,6 @@ arc-20160816._domainkey.google.com k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1273 ietf1._domainkey.ietf.org k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNzNnjKTd5cczd2CDzHflCZuv1tMWYwd7zE+deoJ6s/fXR7/n9ZIBnDS5egt7HAHjNjZrmjcoRlfSsNxRJvUQFyYvaU1BT1s8R+mkPgSOqZ4t9HqAVjiczn2B9+dbjdNN+S/zvSyMMuSCSJDKKAXhBpDeQTpeY7/UdP9s6ws0yjQIDAQAB
1274 velikisrpan22._domainkey.stalw.art v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvzwKQIIWzQXv0nihasFTT3+JO23hXCge+ESWNxCJdVLxKL5edxrumEU3DnrPeGD6q6E/vjoXwBabpm8F5o96MEPm7v12O5IIK7wx7gIJiQWvexwh+GJvW4aFFa0g13Ai75UdZjGFNKHAEGeLmkQYybK/EHW5ymRlSg3g8zydJGEcI/melLCiBoShHjfZFJEThxLmPHNSi+KOUMypxqYHd7hzg6W7qnq6t9puZYXMWj6tEaf6ORWgb7DOXZSTJJjAJPBWa2+UrxXX6Ro7L7Xy1zzeYFCk8W5vmn0wMgGpjkWw0ljJWNwIpxZAj9p5wMedWasaPS74TZ1b7tI39ncp6QIDAQAB
1275
1276- Delivered-To: mauro@degennaro.me
1277 Received: by 2002:adf:b343:0:0:0:0:0 with SMTP id k3csp2230702wrd;
1278 Mon, 7 Nov 2022 23:51:18 -0800 (PST)
1279 X-Google-Smtp-Source: AMsMyM7H9v9q2HbUtfgLEbIKzpE2HA/rU5t0NWXFi8ofP0dnpTMVE1iS6XCwU854K6aOmoFdAKGT
1280 @@ -36,11 +35,6 @@ ARC-Authentication-Results: i=1; mx.google.com;
1281 spf=pass (google.com: domain of jmap-bounces@ietf.org designates 50.223.129.194 as permitted sender) smtp.mailfrom=jmap-bounces@ietf.org;
1282 dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=stalw.art
1283 Return-Path: <jmap-bounces@ietf.org>
1284- Received: from mail.ietf.org (mail.ietf.org. [50.223.129.194])
1285- by mx.google.com with ESMTPS id r7-20020a1709028bc700b0018862b71d11si11837558plo.381.2022.11.07.23.51.17
1286- for <mauro@degennaro.me>
1287- (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
1288- Mon, 07 Nov 2022 23:51:18 -0800 (PST)
1289 Received-SPF: pass (google.com: domain of jmap-bounces@ietf.org designates 50.223.129.194 as permitted sender) client-ip=50.223.129.194;
1290 Authentication-Results: mx.google.com;
1291 dkim=pass header.i=@ietf.org header.s=ietf1 header.b=jqktrzno;
1292 @@ -48,9 +42,6 @@ Authentication-Results: mx.google.com;
1293 dkim=neutral (body hash did not verify) header.i=@stalw.art header.s=velikisrpan22 header.b=QS+O8z2Y;
1294 spf=pass (google.com: domain of jmap-bounces@ietf.org designates 50.223.129.194 as permitted sender) smtp.mailfrom=jmap-bounces@ietf.org;
1295 dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=stalw.art
1296- Received: from ietfa.amsl.com (localhost [IPv6:::1])
1297- by ietfa.amsl.com (Postfix) with ESMTP id C3412C1594A9
1298- for <mauro@degennaro.me>; Mon, 7 Nov 2022 23:51:12 -0800 (PST)
1299 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1;
1300 t=1667893872; bh=wA8UHicgWC9Xhbg+MPaDDXiNuk7OpeLzC4PgU7LJ3mQ=;
1301 h=From:To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:
1302 diff --git a/resources/arc/002.txt b/resources/arc/002.txt
1303deleted file mode 100644
1304index b775fdd..0000000
1305--- a/resources/arc/002.txt
1306+++ /dev/null
1307 @@ -1,2302 +0,0 @@
1308- arc-20160816._domainkey.google.com k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Lztpxs7yUxQEsbDFhjMc9kZVZu5P/COYEUIX4B39IL4SXAbv4viIlT9E6F6iZmTh1go7+9WQLywwgwjXMJx/Dz0RgMoPeyp5NRy4l320DPYibNqVMWa5iQ2WiImQC0en1O9uhLLvzaSZJ03fvGmCo9jMo0GwKzLNe14xMgn/px2L5N/3IKlKX4bqUAJTUt8L993ZlWzvgMnSFSt8B+euSKSrtAiopdy4r1yO4eN5goBASrGW0eLQc1lYouNvCrcTQpos4/GEAqiGzpqueJLmBfOO4clNvVvpPkvQs2BHw9I9LmIjaMxTNGxkGBRaP3utDiKXXqu1K+LRzl0HCNSdQIDAQAB
1309- arcselector9901._domainkey.microsoft.com v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAohCECx8ACVIj42taMc8G2ljiDmsboUW4mgasOg3/2Ay1D37DwK0CE1aok6x0x6dQ4FC/NGdeksPjT/ZLYH+zwwUvElJwd8adtZK4E7AT9Rzr6WPtTiFHi87em6n12HTvp8plpGHXnm8vdFrTxcCUguwUBzbe6MB12Dc3vSURcOUqfa6Dlj/6cNehl+PMonqlLxOl2KmpTJ/Vy9jhdFOu50xEhXIT5ocOa4tX12hfoMpZfBW6iU5QIyvnEFkJuF8Ibs7Hhr7Ec1GZc6tgOd5uNTAnnvh+xiYs8e722H5iDecMsBzj+I9U+CBY1ACwY9hTC1UDNu3xS+WKQNgvnifdIQIDAQAB
1310- selector1._domainkey.vatovec.si v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUFq8+oDncCa2jNpwZvJbw6e5Amx4Lo/bzjM8AszdhAmck01is5OnLAmYtWVu7hO8ldFXsFaZuBKZZVnt2hCBPZMwTkEOr5g/hKXIkWX8KpVgDfqYGVViIdF49bcQ4RYnwQlARl6M9aYGLl8U+icqGx6+Iu/k2+RvOxipraQel6wIDAQAB; n=1024,1450260163,1466071363
1311-
1312- Delivered-To: mauro@degennaro.me
1313- Received: by 2002:adf:b343:0:0:0:0:0 with SMTP id k3csp415470wrd;
1314- Fri, 4 Nov 2022 08:30:18 -0700 (PDT)
1315- X-Google-Smtp-Source: AMsMyM5abK2vbvt3VueR2GF7skojK+76IWFqlt5Yw/xEuosCF02MAhrVCaXSw8nTy3DNqCHkUvJH
1316- X-Received: by 2002:a05:6402:428a:b0:42e:8f7e:1638 with SMTP id g10-20020a056402428a00b0042e8f7e1638mr36152425edc.228.1667575818118;
1317- Fri, 04 Nov 2022 08:30:18 -0700 (PDT)
1318- ARC-Seal: i=2; a=rsa-sha256; t=1667575818; cv=pass;
1319- d=google.com; s=arc-20160816;
1320- b=RIZRdvNDbmeZiWTQmPaG68b2Uop5eM9v5WG9OcGyDps78/oWIM++Dn8G86t1PUlyuy
1321- 1JGk6d7leFjX7UHTeVaeEAwwCwk4+AP6ACZ+/ueMqwTN6cLhXpUmzK7O12Rfi4qJ4w9U
1322- wipgznVCnyHqHH8WdERikcHeoUcIZ6E7EDdC08ex4X0oLXqGlqs99wOoEZGIYTuv4XfF
1323- Sw1/UREsPnxvOQEfqgFab8pVj+bN+H8501eqIVNiHErjsESx/pBahb9HDiq3nO0OjUev
1324- GWAbJpOo0gOyxsGd4mN+PuiFGGvd0WPTnklfg4pGh44ZVchn5eQGk2NmA9DJTXFCflni
1325- 8UsA==
1326- ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
1327- h=mime-version:content-language:accept-language:in-reply-to
1328- :references:message-id:date:thread-index:thread-topic:subject:cc:to
1329- :from:dkim-signature;
1330- bh=tMH3ryy0U0w8b6JMDGLM9JLLv6RozVeX3XYFfHG3Qv0=;
1331- b=grmnn7KkgPHnxh81DIorbb9aQjDdq4aMnk47JXcC15TFIGHeHiMzfeMF2fJqja6usa
1332- jWF+lV/9niUGwmAZsF39ViN3162k/NkModLUxaR87kcBoRC+r25QK5w+KeNuDeUjPUko
1333- jFKiyF1XLdM+YqL9/9L3lzhbf9HkOSKhL5SSMLYT2PMD08WNH5VjUVbjNVWzyR2SBHZK
1334- HFkVAAgElkbxYyfP7uerEDQlItb9lCY0ydRssngb4m2mm6+KCZi0oHQwnCgTn4OPQj8M
1335- xv9TvPHRzwipxVcBqt7t0GYStIVifQ1tcexmtnJnfOdEoUett8LTK70SCafhsvPs1VqB
1336- a2zw==
1337- ARC-Authentication-Results: i=2; mx.google.com;
1338- dkim=pass header.i=@vatovec.si header.s=selector1 header.b=U1n54F4X;
1339- arc=pass (i=1 spf=pass spfdomain=vatovec.si dkim=pass dkdomain=vatovec.si dmarc=pass fromdomain=vatovec.si);
1340- spf=pass (google.com: domain of vlado@vatovec.si designates 40.107.20.126 as permitted sender) smtp.mailfrom=vlado@vatovec.si
1341- Return-Path: <vlado@vatovec.si>
1342- Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2126.outbound.protection.outlook.com. [40.107.20.126])
1343- by mx.google.com with ESMTPS id n2-20020a170906164200b0078decbc3f73si4485382ejd.460.2022.11.04.08.30.17
1344- for <mauro@degennaro.me>
1345- (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
1346- Fri, 04 Nov 2022 08:30:17 -0700 (PDT)
1347- Received-SPF: pass (google.com: domain of vlado@vatovec.si designates 40.107.20.126 as permitted sender) client-ip=40.107.20.126;
1348- Authentication-Results: mx.google.com;
1349- dkim=pass header.i=@vatovec.si header.s=selector1 header.b=U1n54F4X;
1350- arc=pass (i=1 spf=pass spfdomain=vatovec.si dkim=pass dkdomain=vatovec.si dmarc=pass fromdomain=vatovec.si);
1351- spf=pass (google.com: domain of vlado@vatovec.si designates 40.107.20.126 as permitted sender) smtp.mailfrom=vlado@vatovec.si
1352- ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
1353- b=nvfHZZNJdD165VKHIM2jy9w6SJ735AZShb4SMt2e4Fk9zxq+JvQZCgoU3IMpI08s+rrrm4prMwtUGETUmJQudKivXn030g3LJElnX5kbbDVAnT9yVpvRjdzj0gLqPr0xquyNmNHjxYzHjqXMuNV8JgV/fOUSmWN3iwzNTaK8T+kHMi/esCI1EgtHW4TnCD+eEfZjP1dvepH+GvZpbQQXFXr0E92bwy0qzRnGuCkXBHCzNfbfZcuM7g/TtG2SGznLiciAfcEVU+AKTIZlBiLwnKgFbT7flh4sP3juD6YC6FWfkhIpGyRdU5ROElllgRxNp9vfZuKCZ+f/Vr2T2QYDSg==
1354- ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
1355- s=arcselector9901;
1356- h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
1357- bh=tMH3ryy0U0w8b6JMDGLM9JLLv6RozVeX3XYFfHG3Qv0=;
1358- b=gfnMGagd8VdEg3POHuu9ja7MQb8Zxh7l1nih39TFl7WqYe2ewNYyevwDA88VmVuoBqXOm5rKTdy0qGOIJHiLU3LOnQI+V95NX/bDo3gpL2m4TzR0ntnBENmP5NZI6gfZv42yjZZTKppiWKDqvWRvFfBNo3M+/cxMFYdxR6l0fg4lEV2hzIrId76wDyRQKYsBpPfjO+07aUtma1kbPYZq7BEgIE/5tECGwj9DIq3uG6xaHRdcGH5tlexCDx1CuwzAIfmOFAzKk0b9H/k8RbDcljX4oy6Zx2+9TriMUY3DRP3f9gK/2u5d79OVqLjo447bYrsPFi2HsycZ/o/ctvwcTg==
1359- ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
1360- smtp.mailfrom=vatovec.si; dmarc=pass action=none header.from=vatovec.si;
1361- dkim=pass header.d=vatovec.si; arc=none
1362- DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vatovec.si;
1363- s=selector1;
1364- h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
1365- bh=tMH3ryy0U0w8b6JMDGLM9JLLv6RozVeX3XYFfHG3Qv0=;
1366- b=U1n54F4XZo8WC7zR0ejVd1XO916dD261Lbeu4Cza6dzRdy6HHyShZ3VoUboFpILal2idObhYNALejiYoSKYk3RWvSuBO1Djhic3yK3C05IGHceSvKnMZP2z6zBu32XBvPASiwgk/cOiIxwat1XqLYWf7HXdXCnuZ/94kv4Zxhc0=
1367- Received: from DU0PR05MB9819.eurprd05.prod.outlook.com (2603:10a6:10:473::18)
1368- by VE1PR05MB7216.eurprd05.prod.outlook.com (2603:10a6:800:1a8::21) with
1369- Microsoft SMTP Server (version=TLS1_2,
1370- cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.20; Fri, 4 Nov
1371- 2022 15:30:14 +0000
1372- Received: from DU0PR05MB9819.eurprd05.prod.outlook.com
1373- ([fe80::879:4a51:c1ed:6467]) by DU0PR05MB9819.eurprd05.prod.outlook.com
1374- ([fe80::879:4a51:c1ed:6467%7]) with mapi id 15.20.5791.022; Fri, 4 Nov 2022
1375- 15:30:14 +0000
1376- From: Vlado Vatovec <vlado@vatovec.si>
1377- To: "mauro@degennaro.me" <mauro@degennaro.me>
1378- CC: =?utf-8?B?TWF0amHFviBWYXRvdmVj?= <Matjaz@vatovec.si>
1379- Subject: De Gennaro from Ljubljana to Vitoria-Gasteiz
1380- Thread-Topic: De Gennaro from Ljubljana to Vitoria-Gasteiz
1381- Thread-Index: AQHY8GJVVWCeb4Z6qkms3JK80PUmfw==
1382- Date: Fri, 4 Nov 2022 15:30:14 +0000
1383- Message-ID:
1384- <DU0PR05MB9819EC59C67766ACFA0F67FFC23B9@DU0PR05MB9819.eurprd05.prod.outlook.com>
1385- References:
1386- <CAGxp_yhJwfA9Pan2DrhXixRSy9CorLPgibm-6mBQjT6tqoKYog@mail.gmail.com>
1387- <DB9PR05MB7980BF3F7BFEFBF8552DEC3CBC399@DB9PR05MB7980.eurprd05.prod.outlook.com>
1388- In-Reply-To:
1389- <DB9PR05MB7980BF3F7BFEFBF8552DEC3CBC399@DB9PR05MB7980.eurprd05.prod.outlook.com>
1390- Accept-Language: en-GB, sl-SI, en-US
1391- Content-Language: en-GB
1392- X-MS-Has-Attach: yes
1393- X-MS-TNEF-Correlator:
1394- authentication-results: dkim=none (message not signed)
1395- header.d=none;dmarc=none action=none header.from=vatovec.si;
1396- x-ms-publictraffictype: Email
1397- x-ms-traffictypediagnostic: DU0PR05MB9819:EE_|VE1PR05MB7216:EE_
1398- x-ms-office365-filtering-correlation-id: 05720521-a0d2-4894-c510-08dabe797857
1399- x-ms-exchange-senderadcheck: 1
1400- x-ms-exchange-antispam-relay: 0
1401- x-microsoft-antispam: BCL:0;
1402- x-microsoft-antispam-message-info:
1403- bCaSU7plJxkNsq9uE3gtCbZTp8XtEKCqBbov+2ft3IAN574Ba444OVEJ5AC0Ubf6WJDr868wLoag5eLRRCqpiu3Ff+k3+U/G3KBu2RNncV46275aSVy6L9lEzIGyxHdhGqfk2HEAN0bzYDop6bMVAfAzm/Rr1Pa94DPtbownQO8GpK0XhgAF7ATRmGRs64a2pgbtcFFH0bNRCayH7LX3mHNidPGF0jiu0LjMIxTGgcTEOsfA9yoadanPNcMKs3MHGBGwOyeNdhSshM8QzqXA4p29I1GIKKl1QDhJUigm9lU8+F7qyiwaYghqQ6oHXZoRu+l3PPMNTQrJW7TnP7ikPieWVZ3o2mq7dqPfJP1kvJ+fsuJzz+fhwoWwepVMOHvGvLVz3CTNZ94FM6p97l8bYE6QndPnM2wHrcjTV2b6WRW7j5JhMgK5d8SEaQ3ikrSYIcormUHNMusBeDHo7D1o761Vsyf6iTD3GOzG8wxtb65SgDYsA8Bnm4tC9/y/ZCfY48SxZ/ArG1DrawARwk89i88alizNhGdw7/xaLbzWXMF5Etv4Je2Wu8M68lK2C+t5V1gPpgchRe6Ci0fn78223avA/i+mGzXW/V6Izm8Bu11t2K4UOfBpJaOuBAQcpEKOVNo6OgfHSXo16ZtkWEWWoTjEC3Gqd2axe9wRb2TzqE3ohWy3B3Bl1dIFQpVC78uwtVwz7f1IXZDiizDACWTS4kQvAnN714i6EC68Abn4R3+uDRneQUX8Np5Qt0QKPTbM5jGzzsb/9CzP6lJ5+gCg3YaWkG42OmgTo20RWUgrLvMR8ZJLb3U9qJp6YGd/4ABR
1404- x-forefront-antispam-report:
1405- CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR05MB9819.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(39830400003)(136003)(396003)(366004)(346002)(451199015)(38070700005)(86362001)(6506007)(9686003)(316002)(41300700001)(7696005)(8676002)(38100700002)(71200400001)(166002)(66946007)(66556008)(2906002)(186003)(7066003)(26005)(6916009)(55016003)(66476007)(64756008)(66446008)(83380400001)(76116006)(4326008)(53546011)(66899015)(33656002)(8936002)(5660300002)(478600001)(107886003)(52536014)(99936003)(122000001)(579004);DIR:OUT;SFP:1102;
1406- x-ms-exchange-antispam-messagedata-chunkcount: 1
1407- x-ms-exchange-antispam-messagedata-0:
1408- =?utf-8?B?a2YvNmFwSkx1Tk1iR25KSWhWNlZITERWandxNndkQjFJUnBCMGRjRFpqQnl6?=
1409- =?utf-8?B?MmJ2UmNmUVFmRk0rY1VBMU9JMUF1dVJGY0kvbFdQVHhuRkdDelF0cE5JbTVX?=
1410- =?utf-8?B?enhlaVE3dFVLMmJWamRyMUhDTVJVdEo5Zm9QZEhhbXlQbnZYdENEQ2crYUt0?=
1411- =?utf-8?B?Tm1rUzJPM1FJVzF0b0MyakRrQnNGWUtnVVBHNCtpOGt5RnhQbUQ2bVJ4Wmdl?=
1412- =?utf-8?B?YmVaT241QVNvUFdRWWdNYVV1MW14dHNjNjZWWE9YWGZ6ZlZ4WnhtWlpNUmRw?=
1413- =?utf-8?B?RDFvRVBpNzk4V1hkNTd3SE5qajB1OW5iYko5bWJRUExRSjVyQThOWThEcU9U?=
1414- =?utf-8?B?S2xBcmpaa0NhcVMzTVhmNkVxMmVaeEFJUzgyRHVhcS93eGpHaVhJMDZ3QUlv?=
1415- =?utf-8?B?MlBXaC9qV3NtSDlBL0FJYmNDdDlhYk5iWEUvUUswNzJFWFB4aW1xV3N6bW5W?=
1416- =?utf-8?B?TzFXaC9MWG1OVEhEWmViTWxXcXlmaFQ2SHFlVVVWd0M4ZXNsYnd6UGN1bEVq?=
1417- =?utf-8?B?Z1BUVTViVFgzUEFGL09RL2U2dCsrYnFLc2FvQVBiUkw1VTVDRisrYk16RURN?=
1418- =?utf-8?B?dGhORTZyRnJaZU1Tdm5sczc4WjBHZnMyVHdNbTMyaGZGZTJuZktleGdjNlFk?=
1419- =?utf-8?B?MzZZVVZLZXZKejcvYThzNlFSSW1JalZzVkdlQWJsOGRXN2p6cWRMYjdGc3dp?=
1420- =?utf-8?B?TlRYeFZ6QjRoZ01QbWIwUnJlRmRNcEhKL0ZnUGJ1c0hDS04rZm56SXdMVllC?=
1421- =?utf-8?B?aDRtR0kvTWUyN2lYK2NtU1hnanRKNUlqcWlCR0p6R1lWdkRaem9aTW1PL1Na?=
1422- =?utf-8?B?NkJLTUJiWjdYRnhBbnNENWUyTjI3L3lMREp6Nzh5a1ZjdklHeUdaaktaWkUx?=
1423- =?utf-8?B?cldwYmMwM2Z0ZGJpWE5DcWJ1ekVCVGtYMXZOWkYzakNRa0kxenFjQjdwSkYw?=
1424- =?utf-8?B?WjVpYWMzVDJRQjhTRU1EaDlPTFN3a0FEYTlSOXhxb3JYZlFZdVJJSk1jNnBx?=
1425- =?utf-8?B?bGZOSWNlSDY2ZDVTOXJQZFlGRElCK2tqVmxxalQ1YWV2YnhrVW80d2tscFlu?=
1426- =?utf-8?B?cVBsd25reVQ3ZmpxblZ2OUlwQ3hpQWdJV3VWcWUyakluc2NxU0pwK2JMMUtG?=
1427- =?utf-8?B?dUt5TU1xMEN1dm1aNE9rYTVDcVlBOGNIQk42bkxKWjAzRGk2Mi96RlRlQXNL?=
1428- =?utf-8?B?Ni9DaE9qcEt6MzVvbUpDRmp4bEdSNkRsN1NtclBMV3FlMURNTlhUdGdUakFn?=
1429- =?utf-8?B?aWNoYy80MXBERCtraDU3MU8vNG01Z1ZnNU1GYW9DNWpqRXJuYTlLNy9rNGNs?=
1430- =?utf-8?B?U2kwNjVzVU96dnhUZlhGUnVGTGFGMExaa2VlbHlEV3lHb0x6T2hPYURsMkhj?=
1431- =?utf-8?B?dFJJYnRWOENDTnJkS0N0MDZvL284TkV6bk1EMnpOSExXVlpNVWpTRW9EVE9Z?=
1432- =?utf-8?B?T0t1Qlptd0E5RHg4UlA1dWRHaWx2NVVOY0tUUktVWWh4WVkxTG52SzJ3UVd1?=
1433- =?utf-8?B?b1BRS2p1WVR1Wlo2WHo2b1lTUkxFQklmV3NQQ2JyVnppd3oxeldDd2szUmxw?=
1434- =?utf-8?B?TFhOTkdac24xME9sVy9zVk1kaDBrT0pldWhCRGxMMkFoenFvRjZXYVVXbUhi?=
1435- =?utf-8?B?MkMwOS8rSHJQRXRyRnlBY0VLN0JmMUJQdVVSZlcxZjhJTHJWSDlaZzJDSk5N?=
1436- =?utf-8?B?QVltRldYdUV6bFJoQkEvc3pMU2N2bGN4UCtDMFB1a1hnZ1hLRWgvdGVxZUV3?=
1437- =?utf-8?B?dExVaWRRVWlRM0ZKV2tDNys3QWRQOEpkVEJjd2xiK3B3YjVBeDhOWHhuWVg1?=
1438- =?utf-8?B?WVlCUTVnWnp1QWNldHVQK213RTZzeDlQcDVQR2k3ck53d1c2dEdZZDM2VzZt?=
1439- =?utf-8?B?aWxSek54aiswSFVDdDN1NzRKd0UzNVExM1dDVkZrTzFTZlpMRHMxcHlXS1A0?=
1440- =?utf-8?B?NGFyWTdNSmFTRFQ2MmhFc0lHSTZqSkpvZW9lRGRONUtxeVNieXBLZ280Nyt4?=
1441- =?utf-8?B?T2VnOXpZSUdOMEpDaWJvdlRzS1REc0g2VGNDc3FtNEtMemx4NkJYcGtyYTRn?=
1442- =?utf-8?B?WHZzZnRaY3RmMlI5V2wybWQ2MUtwNHUxbEwyWXJmaWY0N0RHTXZ5T1lRb2lM?=
1443- =?utf-8?Q?IFiA=3D?=
1444- Content-Type: multipart/related;
1445- boundary="_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_";
1446- type="multipart/alternative"
1447- MIME-Version: 1.0
1448- X-OriginatorOrg: vatovec.si
1449- X-MS-Exchange-CrossTenant-AuthAs: Internal
1450- X-MS-Exchange-CrossTenant-AuthSource: DU0PR05MB9819.eurprd05.prod.outlook.com
1451- X-MS-Exchange-CrossTenant-Network-Message-Id: 05720521-a0d2-4894-c510-08dabe797857
1452- X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Nov 2022 15:30:14.5059
1453- (UTC)
1454- X-MS-Exchange-CrossTenant-fromentityheader: Hosted
1455- X-MS-Exchange-CrossTenant-id: 23351a1b-91df-4a51-bf0a-093c5e13358c
1456- X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
1457- X-MS-Exchange-CrossTenant-userprincipalname: xpTBMWhVwz0uVBFeL037W5hVodvYmSlIVvcDtcayDpmwYpRIXPaaNFZ0fPQAkRq1XGTLrbabrpxhMQcRqnxcUA==
1458- X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR05MB7216
1459-
1460- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
1461- Content-Type: multipart/alternative;
1462- boundary="_000_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_"
1463-
1464- --_000_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
1465- Content-Type: text/plain; charset="utf-8"
1466- Content-Transfer-Encoding: base64
1467-
1468- RGVhciBNYXVybywNCg0KUmF0ZSB0byBtb3ZlIGxpc3RlZCBnb29kcyBmcm9tIExqdWJsamFuYSB0
1469- byBWaXRvcmlhLUdhc3RlaXogaXMg4oKsIDEuNzAwICsgaW5zdXJhbmNlIGNvdmVyLg0KSW5jbCBw
1470- YWNraW5nLCBsb2FkaW5nLCB0cmFuc3BvcnQsIHVubG9hZGluZyB0byByZXNpZGVuY2Ugd2l0aCBn
1471- b29kIGFjY2VzcywgY2FycnkgdXAgdG8gMXN0IGZsb29yLCB1bnBhY2tpbmcsIHJlbW92YWwgb2Yg
1472- cGFja2luZyBtYXRlcmlhbHMgb24gZGF5IG9mIGRlbGl2ZXJ5Lg0KRXhjbCBWQVQgMjIlLCBzdG9y
1473- YWdlLCBkaWZmaWN1bHQgYWNjZXNzIGF0IGJvdGggZW5kcy4NClJhdGUgdmFsaWQgNjAgZGF5cw0K
1474- UGF5bWVudCBiZWZvcmUgc2hpcHBpbmcgZnJvbSBTbG92ZW5pYS4NCg0KDQpLaW5kIHJlZ2FyZHMs
1475- DQpWbGFkbyBWYXRvdmVjDQorMzg2IDQxIDc1NiAzNDANCg0KW0xvZ28sIGNvbXBhbnkgbmFtZSAg
1476- RGVzY3JpcHRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWRdIFZhdG92ZWMgZC5vLm8uDQrEjHVm
1477- YXJqZXZhIDUNCjEwMDAgTGp1YmxqYW5hDQpTbG92ZW5pYQ0KKzM4NiAxIDQzMCAxMyA0MA0Kd3d3
1478- LnZhdG92ZWMuc2k8aHR0cDovL3d3dy52YXRvdmVjLnNpLz4NCltjaWQ6aW1hZ2UwMDMucG5nQDAx
1479- RDhGMDZBLkI2OTcyQ0YwXTxodHRwczovL3d3dy5maWRpLm9yZy9hYm91dC1maWRpPltjaWQ6aW1h
1480- Z2UwMDQucG5nQDAxRDhGMDZBLkI2OTcyQ0YwXTxodHRwczovL3d3dy5maWRpLm9yZy9xdWFsaXR5
1481- L2ZpZGktZmFpbS1jZXJ0aWZpY2F0aW9uPltEaWFncmFtICBEZXNjcmlwdGlvbiBhdXRvbWF0aWNh
1482- bGx5IGdlbmVyYXRlZCB3aXRoIGxvdyBjb25maWRlbmNlXTxodHRwczovL3d3dy5maWRpLm9yZy9h
1483- Ym91dC1maWRpL2ZpZGktcGNncz5bTG9nbywgY29tcGFueSBuYW1lICBEZXNjcmlwdGlvbiBhdXRv
1484- bWF0aWNhbGx5IGdlbmVyYXRlZF08aHR0cHM6Ly93d3cuaWFtb3ZlcnMub3JnLz4NCg0KV2UgdGFr
1485- ZSBwcml2YWN5IHNlcmlvdXNseS4gUmVhZCBtb3JlIG9uIG91ciBwcml2YWN5IHBvbGljeSBoZXJl
1486- PGh0dHA6Ly93d3cudmF0b3ZlYy5zaS9lbi90b3AtcXVhbGl0eS1tb3Zpbmctc2VydmljZXMvZGF0
1487- YS1wcml2YWN5Pi4gT3VyIGFudGktdHJ1c3QsIGNvcnBvcmF0ZSByZXNwb25zaWJpbGl0eSBhbmQg
1488- ZW52aXJvbm1lbnRhbCBwb2xpY3kgaXMgYXZhaWxhYmxlIGhlcmU8aHR0cHM6Ly92YXRvdmVjLnNp
1489- L2VuL3RvcC1xdWFsaXR5LW1vdmluZy1zZXJ2aWNlcy9jb3Jwb3JhdGUtc29jaWFsLXJlc3BvbnNp
1490- YmlsaXR5Lz4uDQoNCg0KDQoNCkZyb206IEluZm8gVmF0b3ZlYyA8aW5mb0B2YXRvdmVjLnNpPg0K
1491- U2VudDogV2VkbmVzZGF5LCBOb3ZlbWJlciAyLCAyMDIyIDY6NTAgQU0NClRvOiBWbGFkbyBWYXRv
1492- dmVjIDx2bGFkb0B2YXRvdmVjLnNpPg0KQ2M6IE1hdGphxb4gVmF0b3ZlYyA8TWF0amF6QHZhdG92
1493- ZWMuc2k+DQpTdWJqZWN0OiBGVzogUXVvdGUgbW92ZSBmcm9tIExqdWJsamFuYSB0byBTcGFpbg0K
1494- DQoNCg0KRnJvbTogTWF1cm8gRGUgR2VubmFybyA8bWF1cm9AZGVnZW5uYXJvLm1lPG1haWx0bzpt
1495- YXVyb0BkZWdlbm5hcm8ubWU+Pg0KU2VudDogTW9uZGF5LCBPY3RvYmVyIDMxLCAyMDIyIDExOjU2
1496- IEFNDQpUbzogSW5mbyBWYXRvdmVjIDxpbmZvQHZhdG92ZWMuc2k8bWFpbHRvOmluZm9AdmF0b3Zl
1497- Yy5zaT4+DQpTdWJqZWN0OiBRdW90ZSBtb3ZlIGZyb20gTGp1YmxqYW5hIHRvIFNwYWluDQoNCkhl
1498- bGxvLA0KDQpJIGZvdW5kIHlvdXIgY29tcGFueSBvbiBHb29nbGUgc2VhcmNoLiBXZSBhcmUgbW92
1499- aW5nIGZyb20gTGp1YmxqYW5hIERyYXZsamUgdG8gVml0b3JpYS1HYXN0ZWl6LCBTcGFpbiBhcm91
1500- bmQgbWlkIEphbnVhcnkgYW5kIHdvdWxkIGxpa2UgdG8gcmVjZWl2ZSBhIHF1b3RlIHRvIHRyYW5z
1501- cG9ydCBhcm91bmQgMyBjdWJpYyBtZXRlcnMuIEl0IGlzIG9ubHkgc29tZSBib3hlcyBhbmQgYmlr
1502- ZXMgYnV0IG5vIGZ1cm5pdHVyZSBvciBob21lIGFwcGxpYW5jZXMsIHBsZWFzZSBmaW5kIGJlbG93
1503- IHRoZSBkaW1lbnNpb25zIGFuZCBlc3RpbWF0ZWQgd2VpZ2h0czoNCg0KRGVzY3JpcHRpb24NClF0
1504- eQ0KRGltZW5zaW9uDQpEaW1lbnNpb24NCkRpbWVuc2lvbg0KV2VpZ2h0IChrZykNCkJveCBJa2Vh
1505- DQoxNA0KNTYNCjMzDQo0MQ0KOA0KMS4wNjA3NTINCkJveCBUb3BlYWsNCjENCjY4DQozMw0KNDEN
1506- CjEwDQowLjA5MjAwNA0KVG9vbGJveA0KMQ0KNjcNCjMwDQo0MA0KMTUNCjAuMDgwNA0KQm94IERl
1507- Y2FudGFsbw0KMQ0KNDQNCjM0DQozNw0KOA0KMC4wNTUzNTINCkJveGVzDQozDQo1MA0KMzANCjQ1
1508- DQo4DQowLjIwMjUNCkJveCBJbmRvb3INCjENCjIwDQo1Nw0KNDkNCjUNCjAuMDU1ODYNClBsYXN0
1509- aWMgQm94DQoyDQo1OA0KMzgNCjMyDQoxMA0KMC4xNDEwNTYNCkZvbGRpbmcgYmlrZXMNCjINCjYw
1510- DQoyNg0KNjANCjEwDQowLjE4NzINCkJpa2VzICh3aGVlbHMgcmVtb3ZlZCkNCjINCjEwNA0KNjcN
1511- CjI3DQo3DQowLjM3NjI3Mg0KT3RoZXIgaXRlbXMNCjENCjEwNw0KNTgNCjEwDQo0DQowLjA2MjA2
1512- DQo4NQ0Ka2cNCjIuMzEzNDU2DQpjdWJpYyBtZXRlcnMNCg0KSWYgeW91IGhhdmUgYW55IHF1ZXN0
1513- aW9ucyBwbGVhc2UgZmVlbCBmcmVlIHRvIGVtYWlsIG9yIGNhbGwgbWUgYXQgMDMwIDMyMiAxMzku
1514- DQoNClRoYW5rIHlvdSBpbiBhZHZhbmNlLg0KDQoNCktpbmQgcmVnYXJkcywNCk1hdXJvIERlIEdl
1515- bm5hcm8NCg0KDQoNCg==
1516-
1517- --_000_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
1518- Content-Type: text/html; charset="utf-8"
1519- Content-Transfer-Encoding: base64
1520-
1521- PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
1522- bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
1523- YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
1524- cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
1525- VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
1526- Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv
1527- ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPCEtLVtp
1528- ZiAhbXNvXT48c3R5bGU+dlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kb1w6KiB7
1529- YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0
1530- I1ZNTCk7fQ0KLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQo8L3N0eWxlPjwh
1531- W2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNl
1532- DQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYg
1533- MyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIg
1534- MTUgNSAyIDIgMiA0IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNhbGlicmkg
1535- TGlnaHQiOw0KCXBhbm9zZS0xOjIgMTUgMyAyIDIgMiA0IDMgMiA0O30NCi8qIFN0eWxlIERlZmlu
1536- aXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21h
1537- cmdpbjowY207DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fu
1538- cy1zZXJpZjt9DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1zdHlsZS1wcmlvcml0
1539- eTo5OTsNCgljb2xvcjojMDU2M0MxOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0Kc3Bh
1540- bi5FbWFpbFN0eWxlMjANCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1m
1541- YW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9DQouTXNvQ2hw
1542- RGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAuMHB0
1543- O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsNCgltYXJnaW46
1544- NzAuODVwdCA3MC44NXB0IDcwLjg1cHQgNzAuODVwdDt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3Bh
1545- Z2U6V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8
1546- bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI3IiAvPg0KPC94bWw+PCFb
1547- ZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0i
1548- ZWRpdCI+DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91
1549- dD48L3htbD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IlNMIiBsaW5rPSIjMDU2
1550- M0MxIiB2bGluaz0iIzk1NEY3MiIgc3R5bGU9IndvcmQtd3JhcDpicmVhay13b3JkIj4NCjxkaXYg
1551- Y2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i
1552- bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkRlYXIgTWF1cm8sPG86cD48L286cD48L3NwYW4+
1553- PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1
1554- YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y
1555- bWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPlJhdGUgdG8gbW92
1556- ZSBsaXN0ZWQgZ29vZHMgZnJvbSBManVibGphbmEgdG8gVml0b3JpYS1HYXN0ZWl6IGlzIOKCrCAx
1557- LjcwMCArIGluc3VyYW5jZSBjb3Zlci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i
1558- TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkluY2wg
1559- cGFja2luZywgbG9hZGluZywgdHJhbnNwb3J0LCB1bmxvYWRpbmcgdG8gcmVzaWRlbmNlIHdpdGgg
1560- Z29vZCBhY2Nlc3MsIGNhcnJ5IHVwIHRvIDFzdCBmbG9vciwgdW5wYWNraW5nLCByZW1vdmFsIG9m
1561- IHBhY2tpbmcgbWF0ZXJpYWxzIG9uIGRheSBvZiBkZWxpdmVyeS48bzpwPjwvbzpwPjwvc3Bhbj48
1562- L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3Vh
1563- Z2U6RU4tVVMiPkV4Y2wgVkFUIDIyJSwgc3RvcmFnZSwgZGlmZmljdWx0IGFjY2VzcyBhdCBib3Ro
1564- IGVuZHMuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
1565- c3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5SYXRlIHZhbGlkIDYwIGRheXM8bzpw
1566- PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNv
1567- LWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPlBheW1lbnQgYmVmb3JlIHNoaXBwaW5nIGZyb20gU2xv
1568- dmVuaWEuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
1569- c3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bh
1570- bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNs
1571- YXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEyLjBw
1572- dDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+S2luZCByZWdhcmRzLDxicj4NClZsYWRvIFZh
1573- dG92ZWM8YnI+DQorMzg2IDQxIDc1NiAzNDA8YnI+DQo8L3NwYW4+PHU+PHNwYW4gbGFuZz0iRU4t
1574- VVMiIHN0eWxlPSJjb2xvcjojMDU2M0MxO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48YnI+
1575- DQo8L3NwYW4+PC91PjwhLS1baWYgZ3RlIHZtbCAxXT48djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90
1576- NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0i
1577- dCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4N
1578- Cjx2OnN0cm9rZSBqb2luc3R5bGU9Im1pdGVyIiAvPg0KPHY6Zm9ybXVsYXM+DQo8djpmIGVxbj0i
1579- aWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiIC8+DQo8djpmIGVxbj0ic3VtIEAwIDEgMCIg
1580- Lz4NCjx2OmYgZXFuPSJzdW0gMCAwIEAxIiAvPg0KPHY6ZiBlcW49InByb2QgQDIgMSAyIiAvPg0K
1581- PHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIgLz4NCjx2OmYgZXFuPSJwcm9kIEAz
1582- IDIxNjAwIHBpeGVsSGVpZ2h0IiAvPg0KPHY6ZiBlcW49InN1bSBAMCAwIDEiIC8+DQo8djpmIGVx
1583- bj0icHJvZCBANiAxIDIiIC8+DQo8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRoIiAv
1584- Pg0KPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIiAvPg0KPHY6ZiBlcW49InByb2QgQDcgMjE2MDAg
1585- cGl4ZWxIZWlnaHQiIC8+DQo8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIiAvPg0KPC92OmZvcm11
1586- bGFzPg0KPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29u
1587- bmVjdHR5cGU9InJlY3QiIC8+DQo8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIg
1588- Lz4NCjwvdjpzaGFwZXR5cGU+PHY6c2hhcGUgaWQ9IlBpY3R1cmVfeDAwMjBfMjgiIG86c3BpZD0i
1589- X3gwMDAwX3MxMDI2IiB0eXBlPSIjX3gwMDAwX3Q3NSIgYWx0PSJMb2dvLCBjb21wYW55IG5hbWUm
1590- IzEwOyYjMTA7RGVzY3JpcHRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQiIHN0eWxlPSdwb3Np
1591- dGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6Ljc1cHQ7d2lkdGg6MTg2Ljc1
1592- cHQ7aGVpZ2h0OjcxLjlwdDt6LWluZGV4OjI1MTY1OTI2NDt2aXNpYmlsaXR5OnZpc2libGU7bXNv
1593- LXdyYXAtc3R5bGU6c3F1YXJlO21zby13aWR0aC1wZXJjZW50OjA7bXNvLWhlaWdodC1wZXJjZW50
1594- OjA7bXNvLXdyYXAtZGlzdGFuY2UtbGVmdDo5cHQ7bXNvLXdyYXAtZGlzdGFuY2UtdG9wOjA7bXNv
1595- LXdyYXAtZGlzdGFuY2UtcmlnaHQ6OXB0O21zby13cmFwLWRpc3RhbmNlLWJvdHRvbTowO21zby1w
1596- b3NpdGlvbi1ob3Jpem9udGFsOmxlZnQ7bXNvLXBvc2l0aW9uLWhvcml6b250YWwtcmVsYXRpdmU6
1597- bWFyZ2luO21zby1wb3NpdGlvbi12ZXJ0aWNhbDphYnNvbHV0ZTttc28tcG9zaXRpb24tdmVydGlj
1598- YWwtcmVsYXRpdmU6dGV4dDttc28td2lkdGgtcGVyY2VudDowO21zby1oZWlnaHQtcGVyY2VudDow
1599- O21zby13aWR0aC1yZWxhdGl2ZTpwYWdlO21zby1oZWlnaHQtcmVsYXRpdmU6cGFnZSc+DQo8djpp
1600- bWFnZWRhdGEgc3JjPSJjaWQ6aW1hZ2UwMDEucG5nQDAxRDhGMDZBLkI2OTcyQ0YwIiBvOnRpdGxl
1601- PSJMb2dvLCBjb21wYW55IG5hbWUmIzEwOyYjMTA7RGVzY3JpcHRpb24gYXV0b21hdGljYWxseSBn
1602- ZW5lcmF0ZWQiIC8+DQo8dzp3cmFwIHR5cGU9InNxdWFyZSIgYW5jaG9yeD0ibWFyZ2luIi8+DQo8
1603- L3Y6c2hhcGU+PCFbZW5kaWZdLS0+PCFbaWYgIXZtbF0+PGltZyB3aWR0aD0iMjQ5IiBoZWlnaHQ9
1604- Ijk2IiBzdHlsZT0id2lkdGg6Mi41OTM3aW47aGVpZ2h0OjEuMGluIiBzcmM9ImNpZDppbWFnZTAw
1605- Mi5qcGdAMDFEOEYwNkEuQjY5NzJDRjAiIGFsaWduPSJsZWZ0IiBoc3BhY2U9IjEyIiBhbHQ9Ikxv
1606- Z28sIGNvbXBhbnkgbmFtZQoKRGVzY3JpcHRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQiIHY6
1607- c2hhcGVzPSJQaWN0dXJlX3gwMDIwXzI4Ij48IVtlbmRpZl0+PHNwYW4gbGFuZz0iRU4tVVMiIHN0
1608- eWxlPSJmb250LXNpemU6MTAuMHB0O21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj4NCiBWYXRv
1609- dmVjIGQuby5vLjxicj4NCsSMdWZhcmpldmEgNTxicj4NCjEwMDAgTGp1YmxqYW5hPGJyPg0KU2xv
1610- dmVuaWE8YnI+DQorMzg2IDEgNDMwIDEzIDQwPGJyPg0KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVT
1611- IiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxhIGhyZWY9Imh0dHA6Ly93d3cu
1612- dmF0b3ZlYy5zaS8iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0Ij53d3cudmF0b3ZlYy5z
1613- aTwvc3Bhbj48L2E+PGJyPg0KPC9zcGFuPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpZGkub3JnL2Fi
1614- b3V0LWZpZGkiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iY29sb3I6d2luZG93dGV4dDttc28t
1615- ZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt0ZXh0LWRlY29yYXRpb246bm9uZSI+PGltZyBib3JkZXI9
1616- IjAiIHdpZHRoPSI3MyIgaGVpZ2h0PSI2NSIgc3R5bGU9IndpZHRoOi43NjA0aW47aGVpZ2h0Oi42
1617- NzdpbiIgaWQ9IkdyYXBoaWNfeDAwMjBfMzkiIHNyYz0iY2lkOmltYWdlMDAzLnBuZ0AwMUQ4RjA2
1618- QS5CNjk3MkNGMCI+PC9zcGFuPjwvYT48YSBocmVmPSJodHRwczovL3d3dy5maWRpLm9yZy9xdWFs
1619- aXR5L2ZpZGktZmFpbS1jZXJ0aWZpY2F0aW9uIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImNv
1620- bG9yOndpbmRvd3RleHQ7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVM7dGV4dC1kZWNvcmF0aW9u
1621- Om5vbmUiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMTM3IiBoZWlnaHQ9IjY2IiBzdHlsZT0id2lk
1622- dGg6MS40MjdpbjtoZWlnaHQ6LjY4NzVpbiIgaWQ9IkdyYXBoaWNfeDAwMjBfNDAiIHNyYz0iY2lk
1623- OmltYWdlMDA0LnBuZ0AwMUQ4RjA2QS5CNjk3MkNGMCI+PC9zcGFuPjwvYT48YSBocmVmPSJodHRw
1624- czovL3d3dy5maWRpLm9yZy9hYm91dC1maWRpL2ZpZGktcGNncyI+PHNwYW4gbGFuZz0iRU4tVVMi
1625- IHN0eWxlPSJmb250LXNpemU6Ni4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZx
1626- dW90OyxzYW5zLXNlcmlmO2NvbG9yOndpbmRvd3RleHQ7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4t
1627- VVM7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMTY1IiBoZWln
1628- aHQ9IjU4IiBzdHlsZT0id2lkdGg6MS43MTg3aW47aGVpZ2h0Oi42MDQxaW4iIGlkPSJQaWN0dXJl
1629- X3gwMDIwXzQxIiBzcmM9ImNpZDppbWFnZTAwNS5qcGdAMDFEOEYwNkEuQjY5NzJDRjAiIGFsdD0i
1630- RGlhZ3JhbQoKRGVzY3JpcHRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd2l0aCBsb3cgY29u
1631- ZmlkZW5jZSI+PC9zcGFuPjwvYT48YSBocmVmPSJodHRwczovL3d3dy5pYW1vdmVycy5vcmcvIj48
1632- c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZTo2LjBwdDtjb2xvcjp3aW5kb3d0ZXh0
1633- O21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTO3RleHQtZGVjb3JhdGlvbjpub25lIj48aW1nIGJv
1634- cmRlcj0iMCIgd2lkdGg9Ijg5IiBoZWlnaHQ9IjUyIiBzdHlsZT0id2lkdGg6LjkyN2luO2hlaWdo
1635- dDouNTQxNmluIiBpZD0iUGljdHVyZV94MDAyMF82NSIgc3JjPSJjaWQ6aW1hZ2UwMDYucG5nQDAx
1636- RDhGMDZBLkI2OTcyQ0YwIiBhbHQ9IkxvZ28sIGNvbXBhbnkgbmFtZQoKRGVzY3JpcHRpb24gYXV0
1637- b21hdGljYWxseSBnZW5lcmF0ZWQiPjwvc3Bhbj48L2E+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl
1638- PSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PGJyPg0KPC9zcGFuPjxzcGFuIGxhbmc9IkVO
1639- LVVTIiBzdHlsZT0iZm9udC1zaXplOjUuMHB0O21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48
1640- YnI+DQo8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6OC4wcHQ7Zm9u
1641- dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0
1642- LWxhbmd1YWdlOkVOLVVTIj5XZSB0YWtlIHByaXZhY3kgc2VyaW91c2x5LiBSZWFkIG1vcmUgb24g
1643- b3VyIHByaXZhY3kgcG9saWN5DQo8L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJtc28t
1644- ZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PGEgaHJlZj0iaHR0cDovL3d3dy52YXRvdmVjLnNpL2Vu
1645- L3RvcC1xdWFsaXR5LW1vdmluZy1zZXJ2aWNlcy9kYXRhLXByaXZhY3kiPjxzcGFuIHN0eWxlPSJm
1646- b250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZxdW90OyxzYW5z
1647- LXNlcmlmIj5oZXJlPC9zcGFuPjwvYT48L3NwYW4+PHU+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl
1648- PSJmb250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZxdW90Oyxz
1649- YW5zLXNlcmlmO2NvbG9yOiMwNTYzQzE7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPi48L3Nw
1650- YW4+PC91PjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjguMHB0O2ZvbnQtZmFt
1651- aWx5OiZxdW90O0NhbGlicmkgTGlnaHQmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMDU2M0MxO21z
1652- by1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj4NCjwvc3Bhbj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5
1653- bGU9ImZvbnQtc2l6ZTo4LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpIExpZ2h0JnF1b3Q7
1654- LHNhbnMtc2VyaWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPk91ciBhbnRpLXRydXN0LCBj
1655- b3Jwb3JhdGUgcmVzcG9uc2liaWxpdHkgYW5kIGVudmlyb25tZW50YWwgcG9saWN5IGlzIGF2YWls
1656- YWJsZQ0KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3Vh
1657- Z2U6RU4tVVMiPjxhIGhyZWY9Imh0dHBzOi8vdmF0b3ZlYy5zaS9lbi90b3AtcXVhbGl0eS1tb3Zp
1658- bmctc2VydmljZXMvY29ycG9yYXRlLXNvY2lhbC1yZXNwb25zaWJpbGl0eS8iPjxzcGFuIHN0eWxl
1659- PSJmb250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZxdW90Oyxz
1660- YW5zLXNlcmlmIj5oZXJlPC9zcGFuPjwvYT48L3NwYW4+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl
1661- PSJmb250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSBMaWdodCZxdW90Oyxz
1662- YW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj4uPGJyPg0KPGJyPg0KPG86cD48
1663- L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48
1664- L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3Vh
1665- Z2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt
1666- YWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4mbmJzcDs8
1667- L286cD48L3NwYW4+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10
1668- b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSAwY20gMGNtIj4NCjxwIGNs
1669- YXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLUdCIj5Gcm9tOjwvc3Bhbj48L2I+PHNw
1670- YW4gbGFuZz0iRU4tR0IiPiBJbmZvIFZhdG92ZWMgJmx0O2luZm9AdmF0b3ZlYy5zaSZndDsNCjxi
1671- cj4NCjxiPlNlbnQ6PC9iPiBXZWRuZXNkYXksIE5vdmVtYmVyIDIsIDIwMjIgNjo1MCBBTTxicj4N
1672- CjxiPlRvOjwvYj4gVmxhZG8gVmF0b3ZlYyAmbHQ7dmxhZG9AdmF0b3ZlYy5zaSZndDs8YnI+DQo8
1673- Yj5DYzo8L2I+IE1hdGphxb4gVmF0b3ZlYyAmbHQ7TWF0amF6QHZhdG92ZWMuc2kmZ3Q7PGJyPg0K
1674- PGI+U3ViamVjdDo8L2I+IEZXOiBRdW90ZSBtb3ZlIGZyb20gTGp1YmxqYW5hIHRvIFNwYWluPG86
1675- cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi
1676- PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9
1677- Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+
1678- DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6
1679- RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxkaXYgc3R5bGU9ImJvcmRlcjpu
1680- b25lO2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSAwY20g
1681- MGNtIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVTIj5Gcm9tOjwv
1682- c3Bhbj48L2I+PHNwYW4gbGFuZz0iRU4tVVMiPiBNYXVybyBEZSBHZW5uYXJvICZsdDs8YSBocmVm
1683- PSJtYWlsdG86bWF1cm9AZGVnZW5uYXJvLm1lIj5tYXVyb0BkZWdlbm5hcm8ubWU8L2E+Jmd0Ow0K
1684- PGJyPg0KPGI+U2VudDo8L2I+IE1vbmRheSwgT2N0b2JlciAzMSwgMjAyMiAxMTo1NiBBTTxicj4N
1685- CjxiPlRvOjwvYj4gSW5mbyBWYXRvdmVjICZsdDs8YSBocmVmPSJtYWlsdG86aW5mb0B2YXRvdmVj
1686- LnNpIj5pbmZvQHZhdG92ZWMuc2k8L2E+Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBRdW90ZSBt
1687- b3ZlIGZyb20gTGp1YmxqYW5hIHRvIFNwYWluPG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+
1688- DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxkaXY+DQo8ZGl2
1689- Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SGVsbG8sPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk
1690- aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0K
1691- PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkkgZm91bmQgeW91ciBjb21wYW55IG9uIEdvb2ds
1692- ZSBzZWFyY2guIFdlIGFyZSBtb3ZpbmcgZnJvbSBManVibGphbmEgRHJhdmxqZSB0byBWaXRvcmlh
1693- LUdhc3RlaXosIFNwYWluIGFyb3VuZCBtaWQgSmFudWFyeSBhbmQgd291bGQgbGlrZSB0byByZWNl
1694- aXZlIGEgcXVvdGUgdG8gdHJhbnNwb3J0IGFyb3VuZCAzIGN1YmljIG1ldGVycy4gSXQgaXMgb25s
1695- eSBzb21lIGJveGVzIGFuZCBiaWtlcyBidXQgbm8gZnVybml0dXJlDQogb3IgaG9tZSBhcHBsaWFu
1696- Y2VzLCBwbGVhc2UgZmluZCBiZWxvdyB0aGUgZGltZW5zaW9ucyBhbmQgZXN0aW1hdGVkIHdlaWdo
1697- dHM6PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48
1698- bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjx0YWJsZSBjbGFzcz0iTXNvTm9y
1699- bWFsVGFibGUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0
1700- aD0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSI+DQo8dGJvZHk+DQo8dHIgc3R5
1701- bGU9ImhlaWdodDoxNS43NXB0Ij4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpz
1702- b2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWln
1703- aHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
1704- c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fu
1705- cy1zZXJpZiI+RGVzY3JpcHRpb248bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZh
1706- bGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLWxl
1707- ZnQ6bm9uZTtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7
1708- b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250
1709- LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPlF0
1710- eTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxl
1711- PSJib3JkZXI6c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItbGVmdDpub25lO3BhZGRpbmc6MS41
1712- cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0K
1713- PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1m
1714- YW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+RGltZW5zaW9uPG86cD48L286cD48
1715- L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpzb2xp
1716- ZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1sZWZ0Om5vbmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41
1717- cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNv
1718- Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtB
1719- cmlhbCZxdW90OyxzYW5zLXNlcmlmIj5EaW1lbnNpb248bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8
1720- L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyOnNvbGlkICNDQ0NDQ0MgMS4w
1721- cHQ7Ym9yZGVyLWxlZnQ6bm9uZTtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVp
1722- Z2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu
1723- IHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNh
1724- bnMtc2VyaWYiPkRpbWVuc2lvbjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFs
1725- aWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItbGVm
1726- dDpub25lO3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtv
1727- dmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt
1728- c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+V2Vp
1729- Z2h0IChrZyk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9t
1730- IiBzdHlsZT0iYm9yZGVyOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLWxlZnQ6bm9uZTtwYWRk
1731- aW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlk
1732- ZGVuIj4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0ND
1733- Q0NDQyAxLjBwdDtib3JkZXItbGVmdDpub25lO3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIu
1734- MjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjx0ZCB2YWxpZ249
1735- ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1sZWZ0Om5v
1736- bmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJm
1737- bG93OmhpZGRlbiI+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iaGVpZ2h0OjE1Ljc1cHQiPg0K
1738- PHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9y
1739- ZGVyLXRvcDpub25lO3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUu
1740- NzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9
1741- ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJp
1742- ZiI+Qm94IElrZWE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90
1743- dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRv
1744- bTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh
1745- ZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpo
1746- aWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1h
1747- bGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
1748- b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MTQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3Rk
1749- Pg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0
1750- Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xp
1751- ZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6
1752- MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJp
1753- Z2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4w
1754- cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+NTY8bzpwPjwvbzpw
1755- Pjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRv
1756- cDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0
1757- O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEu
1758- NXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1z
1759- b05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5
1760- bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1z
1761- ZXJpZiI+MzM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9t
1762- IiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpz
1763- b2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRp
1764- bmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRk
1765- ZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGln
1766- bjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7
1767- QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+NDE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0K
1768- PHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5v
1769- bmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAj
1770- Q0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUu
1771- NzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0
1772- IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7
1773- Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+ODxvOnA+PC9vOnA+PC9z
1774- cGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5v
1775- bmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9y
1776- ZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQg
1777- Mi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGln
1778- bj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVy
1779- LWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEu
1780- MHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVy
1781- ZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0i
1782- dGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p
1783- bHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MS4wNjA3NTI8bzpwPjwvbzpwPjwvc3Bh
1784- bj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25l
1785- O2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRl
1786- ci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIu
1787- MjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjwvdHI+DQo8dHIg
1788- c3R5bGU9ImhlaWdodDoxNS43NXB0Ij4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRl
1789- cjpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjEuNXB0IDIuMjVw
1790- dCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNz
1791- PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZx
1792- dW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPkJveCBUb3BlYWs8bzpwPjwvbzpwPjwvc3Bhbj48
1793- L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2Jv
1794- cmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1y
1795- aWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVw
1796- dDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg
1797- YWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQt
1798- c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MTxv
1799- OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJi
1800- b3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0ND
1801- Q0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAy
1802- LjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBj
1803- bGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48
1804- c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90
1805- OyxzYW5zLXNlcmlmIj42ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWdu
1806- PSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXIt
1807- Ym90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4w
1808- cHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJm
1809- bG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0
1810- ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls
1811- eTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4zMzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N
1812- CjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVy
1813- LWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0
1814- OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hl
1815- aWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGln
1816- bj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXpl
1817- OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj40MTxvOnA+
1818- PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3Jk
1819- ZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0Mg
1820- MS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1
1821- cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFz
1822- cz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3Bh
1823- biBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90Oyxz
1824- YW5zLXNlcmlmIj4xMDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJi
1825- b3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90
1826- dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7
1827- cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93
1828- OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpu
1829- b25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2Jv
1830- cmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0
1831- IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05v
1832- cm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9
1833- ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJp
1834- ZiI+MC4wOTIwMDQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90
1835- dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRv
1836- bTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh
1837- ZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpo
1838- aWRkZW4iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImhlaWdodDoxNS43NXB0Ij4NCjx0ZCB2
1839- YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci10
1840- b3A6bm9uZTtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7
1841- b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250
1842- LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPlRv
1843- b2xib3g8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBz
1844- dHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xp
1845- ZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6
1846- MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4i
1847- Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpy
1848- aWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJp
1849- YWwmcXVvdDssc2Fucy1zZXJpZiI+MTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQg
1850- dmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTti
1851- b3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0ND
1852- Q0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0
1853- O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0
1854- eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250
1855- LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj42NzxvOnA+PC9vOnA+PC9zcGFu
1856- PjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7
1857- Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVy
1858- LXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4y
1859- NXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFs
1860- IiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9u
1861- dC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4z
1862- MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxl
1863- PSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICND
1864- Q0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVw
1865- dCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8
1866- cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0
1867- Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZx
1868- dW90OyxzYW5zLXNlcmlmIj40MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFs
1869- aWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3Jk
1870- ZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0Mg
1871- MS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292
1872- ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxl
1873- PSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZh
1874- bWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4xNTxvOnA+PC9vOnA+PC9zcGFuPjwv
1875- cD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9y
1876- ZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJp
1877- Z2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0
1878- O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90
1879- dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRv
1880- bTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh
1881- ZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpo
1882- aWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1h
1883- bGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
1884- b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MC4wODA0PG86cD48L286cD48L3NwYW4+PC9wPg0K
1885- PC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXIt
1886- bGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6
1887- c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVp
1888- Z2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJo
1889- ZWlnaHQ6MTUuNzVwdCI+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQg
1890- I0NDQ0NDQyAxLjBwdDtib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQg
1891- Mi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9y
1892- bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlh
1893- bCZxdW90OyxzYW5zLXNlcmlmIj5Cb3ggRGVjYW50YWxvPG86cD48L286cD48L3NwYW4+PC9wPg0K
1894- PC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXIt
1895- bGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6
1896- c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVp
1897- Z2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWdu
1898- PSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6
1899- MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjE8bzpwPjwv
1900- bzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVy
1901- LXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEu
1902- MHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0
1903- IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9
1904- Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4g
1905- c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fu
1906- cy1zZXJpZiI+NDQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90
1907- dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRv
1908- bTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh
1909- ZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpo
1910- aWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1h
1911- bGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
1912- b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MzQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3Rk
1913- Pg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0
1914- Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xp
1915- ZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6
1916- MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJp
1917- Z2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4w
1918- cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+Mzc8bzpwPjwvbzpw
1919- Pjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRv
1920- cDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0
1921- O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEu
1922- NXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1z
1923- b05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5
1924- bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1z
1925- ZXJpZiI+ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20i
1926- IHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNv
1927- bGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGlu
1928- ZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRl
1929- biI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2Jv
1930- cmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1y
1931- aWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVw
1932- dDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg
1933- YWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQt
1934- c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MC4w
1935- NTUzNTI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBz
1936- dHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xp
1937- ZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6
1938- MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4i
1939- Pg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImhlaWdodDoxNS43NXB0Ij4NCjx0ZCB2YWxpZ249
1940- ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci10b3A6bm9u
1941- ZTtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZs
1942- b3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6
1943- MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPkJveGVzPG86
1944- cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJv
1945- cmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0ND
1946- QyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIu
1947- MjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNs
1948- YXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxz
1949- cGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7
1950- LHNhbnMtc2VyaWYiPjM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0i
1951- Ym90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJv
1952- dHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0
1953- O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxv
1954- dzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4
1955- dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6
1956- JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+NTA8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8
1957- L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1s
1958- ZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpz
1959- b2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWln
1960- aHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249
1961- InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox
1962- MC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MzA8bzpwPjwv
1963- bzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVy
1964- LXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEu
1965- MHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0
1966- IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9
1967- Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4g
1968- c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fu
1969- cy1zZXJpZiI+NDU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90
1970- dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRv
1971- bTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh
1972- ZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpo
1973- aWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1h
1974- bGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
1975- b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+
1976- DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6
1977- bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlk
1978- ICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDox
1979- NS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHls
1980- ZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAj
1981- Q0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41
1982- cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0K
1983- PHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdo
1984- dCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwm
1985- cXVvdDssc2Fucy1zZXJpZiI+MC4yMDI1PG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0
1986- ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25l
1987- O2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0ND
1988- Q0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1
1989- cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJoZWlnaHQ6MTUu
1990- NzVwdCI+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0NDQ0NDQyAx
1991- LjBwdDtib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hl
1992- aWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh
1993- biBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90Oyxz
1994- YW5zLXNlcmlmIj5Cb3ggSW5kb29yPG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2
1995- YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2Jv
1996- cmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0ND
1997- QyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7
1998- b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5
1999- bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt
2000- ZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjE8bzpwPjwvbzpwPjwvc3Bhbj48
2001- L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2Jv
2002- cmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1y
2003- aWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVw
2004- dDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg
2005- YWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQt
2006- c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MjA8
2007- bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0i
2008- Ym9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0ND
2009- Q0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQg
2010- Mi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAg
2011- Y2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+
2012- PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVv
2013- dDssc2Fucy1zZXJpZiI+NTc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGln
2014- bj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVy
2015- LWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEu
2016- MHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVy
2017- ZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0i
2018- dGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p
2019- bHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+NDk8bzpwPjwvbzpwPjwvc3Bhbj48L3A+
2020- DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRl
2021- ci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdo
2022- dDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDto
2023- ZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxp
2024- Z249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6
2025- ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+NTxvOnA+
2026- PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3Jk
2027- ZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0Mg
2028- MS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1
2029- cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0K
2030- PHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5v
2031- bmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAj
2032- Q0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUu
2033- NzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0
2034- IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7
2035- Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MC4wNTU4NjxvOnA+PC9v
2036- OnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXIt
2037- dG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4w
2038- cHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQg
2039- MS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPC90
2040- cj4NCjx0ciBzdHlsZT0iaGVpZ2h0OjE1Ljc1cHQiPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHls
2041- ZT0iYm9yZGVyOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXRvcDpub25lO3BhZGRpbmc6MS41
2042- cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0K
2043- PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1m
2044- YW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+UGxhc3RpYyBCb3g8bzpwPjwvbzpw
2045- Pjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRv
2046- cDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0
2047- O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEu
2048- NXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1z
2049- b05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5
2050- bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1z
2051- ZXJpZiI+MjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20i
2052- IHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNv
2053- bGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGlu
2054- ZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRl
2055- biI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWdu
2056- OnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtB
2057- cmlhbCZxdW90OyxzYW5zLXNlcmlmIj41ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8
2058- dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9u
2059- ZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICND
2060- Q0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43
2061- NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQi
2062- IHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtm
2063- b250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4zODxvOnA+PC9vOnA+PC9z
2064- cGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5v
2065- bmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9y
2066- ZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQg
2067- Mi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9y
2068- bWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0i
2069- Zm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlm
2070- Ij4zMjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0
2071- eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlk
2072- ICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzox
2073- LjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+
2074- DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJp
2075- Z2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlh
2076- bCZxdW90OyxzYW5zLXNlcmlmIj4xMDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQg
2077- dmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTti
2078- b3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0ND
2079- Q0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0
2080- O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9y
2081- ZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0ND
2082- IDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4y
2083- NXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xh
2084- c3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNw
2085- YW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDss
2086- c2Fucy1zZXJpZiI+MC4xNDEwNTY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZh
2087- bGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9y
2088- ZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0ND
2089- IDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtv
2090- dmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImhlaWdodDoxNS43NXB0
2091- Ij4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlcjpzb2xpZCAjQ0NDQ0NDIDEuMHB0
2092- O2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0
2093- OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0
2094- eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMt
2095- c2VyaWYiPkZvbGRpbmcgYmlrZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZh
2096- bGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9y
2097- ZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0ND
2098- IDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtv
2099- dmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHls
2100- ZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1m
2101- YW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MjxvOnA+PC9vOnA+PC9zcGFuPjwv
2102- cD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9y
2103- ZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJp
2104- Z2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0
2105- O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBh
2106- bGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1z
2107- aXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj42MDxv
2108- OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJi
2109- b3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0ND
2110- Q0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAy
2111- LjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBj
2112- bGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48
2113- c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90
2114- OyxzYW5zLXNlcmlmIj4yNjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWdu
2115- PSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXIt
2116- Ym90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4w
2117- cHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJm
2118- bG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0
2119- ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls
2120- eTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj42MDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N
2121- CjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVy
2122- LWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0
2123- OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hl
2124- aWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGln
2125- bj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXpl
2126- OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4xMDxvOnA+
2127- PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3Jk
2128- ZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0Mg
2129- MS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1
2130- cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0K
2131- PHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5v
2132- bmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAj
2133- Q0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUu
2134- NzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0
2135- IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7
2136- Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MC4xODcyPG86cD48L286
2137- cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10
2138- b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBw
2139- dDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAx
2140- LjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8L3Ry
2141- Pg0KPHRyIHN0eWxlPSJoZWlnaHQ6MTUuNzVwdCI+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxl
2142- PSJib3JkZXI6c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxLjVw
2143- dCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8
2144- cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZh
2145- bWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj5CaWtlcyAod2hlZWxzIHJlbW92ZWQp
2146- PG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9
2147- ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0ND
2148- Q0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0
2149- IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxw
2150- IGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQi
2151- PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1
2152- b3Q7LHNhbnMtc2VyaWYiPjI8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L3RkPg0KPHRkIHZhbGln
2153- bj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVy
2154- LWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEu
2155- MHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVy
2156- ZmxvdzpoaWRkZW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249InJpZ2h0IiBzdHlsZT0i
2157- dGV4dC1hbGlnbjpyaWdodCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1p
2158- bHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZiI+MTA0PG86cD48L286cD48L3NwYW4+PC9w
2159- Pg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3Jk
2160- ZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmln
2161- aHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7
2162- aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFs
2163- aWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNp
2164- emU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjY3PG86
2165- cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJv
2166- cmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0ND
2167- QyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIu
2168- MjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNs
2169- YXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxz
2170- cGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7
2171- LHNhbnMtc2VyaWYiPjI3PG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249
2172- ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1i
2173- b3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBw
2174- dDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZs
2175- b3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRl
2176- eHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5
2177- OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8
2178- L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1s
2179- ZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpz
2180- b2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWln
2181- aHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIg
2182- c3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29s
2183- aWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5n
2184- OjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVu
2185- Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246
2186- cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0Fy
2187- aWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjAuMzc2MjcyPG86cD48L286cD48L3NwYW4+PC9wPg0KPC90
2188- ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVm
2189- dDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29s
2190- aWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0
2191- OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJoZWln
2192- aHQ6MTUuNzVwdCI+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0ND
2193- Q0NDQyAxLjBwdDtib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4y
2194- NXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFs
2195- Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZx
2196- dW90OyxzYW5zLXNlcmlmIj5PdGhlciBpdGVtczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+
2197- DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6
2198- bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlk
2199- ICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDox
2200- NS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmln
2201- aHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBw
2202- dDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4xPG86cD48L286cD48
2203- L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6
2204- bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDti
2205- b3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVw
2206- dCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29O
2207- b3JtYWwiIGFsaWduPSJyaWdodCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxl
2208- PSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2Vy
2209- aWYiPjEwNzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20i
2210- IHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNv
2211- bGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGlu
2212- ZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRl
2213- biI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWdu
2214- OnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtB
2215- cmlhbCZxdW90OyxzYW5zLXNlcmlmIj41ODxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvdGQ+DQo8
2216- dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9u
2217- ZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICND
2218- Q0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43
2219- NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0icmlnaHQi
2220- IHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtm
2221- b250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4xMDxvOnA+PC9vOnA+PC9z
2222- cGFuPjwvcD4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5v
2223- bmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9y
2224- ZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQg
2225- Mi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9y
2226- bWFsIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0i
2227- Zm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlm
2228- Ij40PG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5
2229- bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQg
2230- I0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEu
2231- NXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4N
2232- CjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVy
2233- LWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0
2234- OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hl
2235- aWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGln
2236- bj0icmlnaHQiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXpl
2237- OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmIj4wLjA2MjA2
2238- PG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9
2239- ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0ND
2240- Q0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0
2241- IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwv
2242- dGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJoZWlnaHQ6MTUuNzVwdCI+DQo8dGQgdmFsaWduPSJib3R0
2243- b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItdG9wOm5vbmU7cGFk
2244- ZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93Omhp
2245- ZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25l
2246- O2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRl
2247- ci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIu
2248- MjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjx0ZCB2YWxpZ249
2249- ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1i
2250- b3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBw
2251- dDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZs
2252- b3c6aGlkZGVuIj4NCjwvdGQ+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9w
2253- Om5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7
2254- Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41
2255- cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZh
2256- bGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9y
2257- ZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0ND
2258- IDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtv
2259- dmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRl
2260- ci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAx
2261- LjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVw
2262- dCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8
2263- dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9u
2264- ZTtib3JkZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICND
2265- Q0NDQ0MgMS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43
2266- NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0i
2267- Ym9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0ND
2268- Q0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQg
2269- Mi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90
2270- ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVm
2271- dDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29s
2272- aWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0
2273- OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJoZWln
2274- aHQ6MTUuNzVwdCI+DQo8dGQgdmFsaWduPSJib3R0b20iIHN0eWxlPSJib3JkZXI6c29saWQgI0ND
2275- Q0NDQyAxLjBwdDtib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4y
2276- NXB0O2hlaWdodDoxNS43NXB0O292ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0i
2277- Ym90dG9tIiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJv
2278- dHRvbTpzb2xpZCAjQ0NDQ0NDIDEuMHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0
2279- O3BhZGRpbmc6MS41cHQgMi4yNXB0IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxv
2280- dzpoaWRkZW4iPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6
2281- bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDti
2282- b3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVw
2283- dCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjwvdGQ+DQo8dGQgdmFs
2284- aWduPSJib3R0b20iIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWxlZnQ6bm9uZTtib3Jk
2285- ZXItYm90dG9tOnNvbGlkICNDQ0NDQ0MgMS4wcHQ7Ym9yZGVyLXJpZ2h0OnNvbGlkICNDQ0NDQ0Mg
2286- MS4wcHQ7cGFkZGluZzoxLjVwdCAyLjI1cHQgMS41cHQgMi4yNXB0O2hlaWdodDoxNS43NXB0O292
2287- ZXJmbG93OmhpZGRlbiI+DQo8L3RkPg0KPHRkIHZhbGlnbj0iYm90dG9tIiBzdHlsZT0iYm9yZGVy
2288- LXRvcDpub25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjQ0NDQ0NDIDEu
2289- MHB0O2JvcmRlci1yaWdodDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MS41cHQgMi4yNXB0
2290- IDEuNXB0IDIuMjVwdDtoZWlnaHQ6MTUuNzVwdDtvdmVyZmxvdzpoaWRkZW4iPg0KPC90ZD4NCjx0
2291- ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25l
2292- O2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0ND
2293- Q0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1
2294- cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIg
2295- c3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv
2296- bnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjg1PG86cD48L286cD48L3Nw
2297- YW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9u
2298- ZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3Jk
2299- ZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAy
2300- LjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3Jt
2301- YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFs
2302- JnF1b3Q7LHNhbnMtc2VyaWYiPmtnPG86cD48L286cD48L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2
2303- YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6bm9uZTtib3JkZXItbGVmdDpub25lO2Jv
2304- cmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDtib3JkZXItcmlnaHQ6c29saWQgI0NDQ0ND
2305- QyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVwdCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7
2306- b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJyaWdodCIgc3R5
2307- bGU9InRleHQtYWxpZ246cmlnaHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt
2308- ZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWYiPjIuMzEzNDU2PG86cD48L286cD48
2309- L3NwYW4+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249ImJvdHRvbSIgc3R5bGU9ImJvcmRlci10b3A6
2310- bm9uZTtib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b206c29saWQgI0NDQ0NDQyAxLjBwdDti
2311- b3JkZXItcmlnaHQ6c29saWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjEuNXB0IDIuMjVwdCAxLjVw
2312- dCAyLjI1cHQ7aGVpZ2h0OjE1Ljc1cHQ7b3ZlcmZsb3c6aGlkZGVuIj4NCjxwIGNsYXNzPSJNc29O
2313- b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0Fy
2314- aWFsJnF1b3Q7LHNhbnMtc2VyaWYiPmN1YmljIG1ldGVyczxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N
2315- CjwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz
2316- cz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs
2317- YXNzPSJNc29Ob3JtYWwiPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgcGxlYXNlIGZlZWwgZnJl
2318- ZSB0byBlbWFpbCBvciBjYWxsIG1lIGF0IDAzMCAzMjIgMTM5LjxvOnA+PC9vOnA+PC9wPg0KPC9k
2319- aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8
2320- L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGFuayB5b3UgaW4gYWR2YW5jZS48
2321- bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+
2322- Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86
2323- cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5L
2324- aW5kIHJlZ2FyZHMsPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNv
2325- Tm9ybWFsIj5NYXVybyBEZSBHZW5uYXJvPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8
2326- cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4N
2327- CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2
2328- Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjwv
2329- ZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
2330-
2331- --_000_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_--
2332-
2333- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
2334- Content-Type: image/png; name="image001.png"
2335- Content-Description: image001.png
2336- Content-Disposition: inline; filename="image001.png"; size=39015;
2337- creation-date="Fri, 04 Nov 2022 15:30:13 GMT";
2338- modification-date="Fri, 04 Nov 2022 15:30:13 GMT"
2339- Content-ID: <image001.png@01D8F06A.B6972CF0>
2340- Content-Transfer-Encoding: base64
2341-
2342- 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
3026- LBoDysr+f/er8XZcsB7OAAAAAElFTkSuQmCC
3027-
3028- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
3029- Content-Type: image/jpeg; name="image002.jpg"
3030- Content-Description: image002.jpg
3031- Content-Disposition: inline; filename="image002.jpg"; size=5861;
3032- creation-date="Fri, 04 Nov 2022 15:30:13 GMT";
3033- modification-date="Fri, 04 Nov 2022 15:30:13 GMT"
3034- Content-ID: <image002.jpg@01D8F06A.B6972CF0>
3035- Content-Transfer-Encoding: base64
3036-
3037- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf
3038- IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7
3039- Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABgAPkDASIA
3040- AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
3041- AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
3042- ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
3043- p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
3044- AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
3045- BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
3046- U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
3047- uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiii
3048- gAqK5urezgae6njgiT7zyMFA/E1zfjHx1Y+FYvJVRc6hIuUtweFH95z2H6mvFtb8Qap4huvtGp3T
3049- TYPyRjiNP91eg/nXbQwc6vvPRGNSso6dT1zU/iv4csWZLUz37jvCmE/76bH6ZrBm+NEm79xoQC/9
3050- NLnn9Fry+ivSjgaK3VzmdebPUYPjQd3+kaF8vrHcc/qtdDpfxS8NaiyxzTS2Eh7XKYX/AL6GR+eK
3051- 8NopSwNF7KwKvNH1DFLHPEssMiSRuMq6MCCPYin185+H/FOreGbgSafcHyicvbycxv8Ah2PuOa9s
3052- 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
3140-
3141- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
3142- Content-Type: image/png; name="image003.png"
3143- Content-Description: image003.png
3144- Content-Disposition: inline; filename="image003.png"; size=2977;
3145- creation-date="Fri, 04 Nov 2022 15:30:13 GMT";
3146- modification-date="Fri, 04 Nov 2022 15:30:14 GMT"
3147- Content-ID: <image003.png@01D8F06A.B6972CF0>
3148- Content-Transfer-Encoding: base64
3149-
3150- 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
3202- qgAAAABJRU5ErkJggg==
3203-
3204- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
3205- Content-Type: image/png; name="image004.png"
3206- Content-Description: image004.png
3207- Content-Disposition: inline; filename="image004.png"; size=5296;
3208- creation-date="Fri, 04 Nov 2022 15:30:14 GMT";
3209- modification-date="Fri, 04 Nov 2022 15:30:14 GMT"
3210- Content-ID: <image004.png@01D8F06A.B6972CF0>
3211- Content-Transfer-Encoding: base64
3212-
3213- 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
3306-
3307- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
3308- Content-Type: image/jpeg; name="image005.jpg"
3309- Content-Description: image005.jpg
3310- Content-Disposition: inline; filename="image005.jpg"; size=8964;
3311- creation-date="Fri, 04 Nov 2022 15:30:14 GMT";
3312- modification-date="Fri, 04 Nov 2022 15:30:14 GMT"
3313- Content-ID: <image005.jpg@01D8F06A.B6972CF0>
3314- Content-Transfer-Encoding: base64
3315-
3316- /9j/4AAQSkZJRgABAQEA3ADcAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYF
3317- BgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoK
3318- CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABrAS8DASIA
3319- AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
3320- AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
3321- ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
3322- p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
3323- AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
3324- BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
3325- U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
3326- uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9+KKK
3327- KACiiigAooooAKKKM0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
3328- QAUUUUAFFFFABRRRQAUUUUAFFFGaACiis3X/ABJo3hrTJtV1zUobS2gjMk09xIFVFA6kmgqMZVJK
3329- MVds0EYDrR0bLNXxP8cP+C5n7HPwn1a40Hw/qOoeKry14k/sO3DQk+glYhGI9jWd8F/+C8H7LPxS
3330- 1CTS9e0DX/Dkse3y1vrVZBIueSpiZunU98Vz/WsPGXK5I+0j4c8bSwX1pYGpyWvfle3fXU+6R8ow
3331- 1HP8Fcl8MPjH8OvjH4Zh8YfDTxlY6xp9wuY7qxuFdfpx0Psa6mNyT96uiPvRuj4ytSrYao6dSLTW
3332- 6e69UTDPeiq+parpmj232vVNQhtoc48y4mCLn0yaz/8AhYHgU/d8ZaX/AODCL/4qgg2KKp6br2ia
3333- ypfSdXtrpV+81vOrgfkTVwnAyaACis/VfE3hzQgra3r1nZq33ftVwsef++iKNI8UeHNf+bQtes7z
3334- gFjaXSyAfXaTQBoUUjHK8VUvdY0rSYfteqajb20PTzLiYIv5k4oAuUVm6X4v8K65K1voniSwvJFG
3335- WjtbxJCB64UmtBZoiDhulADqKo6hr+jaOiyaxq9taq3CNcTKgPtyasQXtpdwrPbXEckbjKvGwIP0
3336- IoAmByMiimSn5cA1S0vWdN1WWWPTtQimNvM0U6xtnY46qfQigN9jQoqK6ureyha5up1jjjUtJJIw
3337- VUUDJJJ6ACqGl+NfBuuXP2LRfFumXk20nybW+jkbA6nCkmgDUoppkQjmmyXEESeY7hQoyzN0HvQB
3338- JRVXSdc0fX7UX+h6rb3kO4r51rMsi5HUZUkZq0SB1NABmigkHvVOTWtLh1OLSJ9Rt0vJo2eG1aYe
3339- Y6jqQuckDv6UAXKKb5yULIjdDQA6immRQM5qDTtX0zWYftGlX8NzGGKNJBIGAYHBGR3BoAs0UUUA
3340- FFFFABRRRQBDczpbxNNK+1VGWavxr/4LW/t3+MfiV8SF+Anw68TyW/hKzhLag1nKVOoTLI8bqxB5
3341- RWQjb0Jzmv1s+M2tXGgfC/X9asyWltdJnlQD+8sZIr8Nf2eP2ZNX/ay0y18QJ4+0iHxrcC5Gi6L4
3342- gYol9+8Mnmhh1bc8mFPUr6A15eZyqcsadPeR+8eB+X5JRzCrneaRThQskmrpNp2k1Z6K2/Tc+dtP
3343- 8EXclpHquu6nBpdnI2Y5bvO5x6qg+Zh9BVm0uPh7o00d7pd1rM19DIDHIkaRJkHqDuLY+or134s/
3344- 8E2v27vBPi6LT/F3wW1bUnvLpYYNS04i6gZ2OF+ZeFH6CvuL9k//AIJO/Az9kP4fP+0v+2vq9jfX
3345- ml2n2yTTrph9h0/Azhh/y1f9M9jXkUcvxNSpytWXdn9S8SeKvCeV5VGrTrqvOppCnTabb7Pt8zzb
3346- /gnHYfFz4L6v/wANOWV9feE/h5PE0vipPEkiRafKF6vGrHdvbqpVTk1+pHwv+JFz8WtJtfG/hgxp
3347- 4dvIFm0+5b5pLxGGQ4H8K+nc1+In7cf7fXi/9u261jwp4R0yTSfAOiyQt4a0W3Xy2uQkm3zZVXqW
3348- GNqdBX6q/wDBIm+1O4/Yf8J6ZrN8Li406GS0kZWzs2N9zPfHSvZwVanzulFt2W/mfyx4pcOZpLLa
3349- XEGPhGlUqytyJaqLV02+rPLf+Dii+vbD/gnBeXNjezW8n/CYaaPMt5CjAYm7jmvyX/Y2/wCCYv7c
3350- X7cXw1uPir8DtZt5NJtdUksXa/8AEnkP5iAE/KzZxhhzX60f8HG5/wCNb14P+pw03+U1fAP/AASg
3351- /wCC1Pwj/wCCfH7PmofBnxx8H/EWvXV14gl1BbvSrmBEWN0VQuHIOflr0H8R+Enknxa8Cf8ABTL/
3352- AII3fE3w74g8ReONT0VtUZ59Laz1w3mn6h5RXzI5IwxQkb1yCAcNwa/aHwr/AMFJvC+q/wDBL/8A
3353- 4eHXumxokHhOS7n0vcQramkhtjaqx52tdfuw2OnNfj5/wVl/4Klp/wAFRPEPgvwh8MPhBqOkWPh6
3354- a4NjbXUiz3l7dXAiXaFjyAB5QwBydxz0r7J/ai/Z+8Y/srf8G3Fv8G/HI8rWLddOu9UtfumCS61h
3355- Lown3Qy7T2JX0qgPgjwppH/BSH/gtD8ddWk0fXL7X5rX/S9RWbUza6VosTsyxqisQiE4O0cuQrck
3356- 1c8a+Ef+CjH/AARS+N2h61qWuXmkLesZ7EWmpG40vV0QqJIXUEqx5wQQHAYEY4r7v/4NWbG2X4J/
3357- FnUPKXzm8UaajybfmZVtpCB9AXP45r9GP2hv2U/2fv2rPDVl4O/aC+GOneJtP06/+2afDfbv3E2w
3358- puUoyt91iCM4PGRwMT7wGD+yx+134L/aT/ZM0H9qvT1+x6XqWgte6jDIcC0mh3JcRZOOEkRwGIGQ
3359- Ae9fhT+0p+2L+25/wV3/AGpJvhl8GbrWm0e+vZo/C/g3TLtoYVtVziW42kAtgbmZ8he3TJ/Zz9qr
3360- 4DfCr9l//gmZ8Yvh78BfCUfhvRbf4fa7dW2n2M0hWGV7RyzLvYleQD16/U1+aP8Awa5WNpdftb/E
3361- C9mtY3mg+HrGKRkBZM3tuDj0zz07cVQHz38Vf2Gv+Cnn/BMiztPjvqyat4bjS6jRdW8Ma8LlUYnh
3362- ZhExG0njawINfsN/wSU/4KJap+2j+ybfeNfiZYrD4s8Gq8HiaOOMotztjLpOqnpvVTkdAQexFc3+
3363- 3R/wWq/ZT/ZV+NGqfs0fGf4Pax4iuLKCCa6VbW3mtZVddy/LJ6e4611X/BOL/goJ+yp+3jdeK/Cv
3364- wC+CEnhePTbFG1cNplvbrcxyEoB+5Az1PXpQB5O114q+OXi3wbbXXgjTfHXj74m6fqPiG3g8Z65d
3365- 2+i+H9GgmMcUUUMGQZT8uWKkkknIr2r4R+HfHf7MXxo+H/ha+X+zNJ+IljeQav4Rg1mbULPSdTt1
3366- EiyWkk3zrE6nBQnAPQCvO/G/7NfxW+F93o/hTUfht451KHwhdXqfD/4gfC7UoU1CDTrly7WF1FKr
3367- fKpbAOCDgHgivUv2c/gz8Y/GHxD8LfEH4neHtW0Hw94C0u5tvCum+J9US81a/ubjAlvbt0G1TtG1
3368- V6/SgD6glG0YH93Ga8u/ZsX/AInHjclv+ZyvP/Qq9RdQy7y3Ra8w/Zt/5DPjr/sc7z+Yovqjuw/+
3369- 61Pl+Yv7c7NH+xV8XGQ4b/hWuuY/8AJq+If2TPgd4l8fr8AfFnwc/YpvfhrN4YuLLU/FHxEmuLaB
3370- dX03+z5ElhVInLz+fK8Rwy/KF3HBFfor8TvAWgfFT4c698NPFQlOl+IdHudN1AQPtcwTxNG+09jt
3371- Y4PY0zwB4A0H4afD/Sfhl4Zeb+z9F02KxsvPl3SCKNAqZPGTgDnFBwnxj8N/2wP2yrT9kDxR+3b8
3372- RvEvhHUPD2ieGtfl0/wfYaRLDPNd2l7LBbSSXBchUPlneoU4G0jkkCn8VPjN+2n4O8PfFP8AZx+N
3373- 3xJ8K6lq17+zxq/jPQvEXhrSpLX+zZISLee1KGQl8+cGjkyMYyRX1Z4J/ZU+Dngr9nq6/Zgh0WXU
3374- PCN9b38F9ZalN5jXEd5JJLMrMAOrStjGMDGOlcT8Nv8Agm78A/hvpHibTG17xVr9x4p8Gv4UvNW8
3375- Ta+15dWukMjKbWB2A8tedxOCSVUknFAHyX8M/jz8ZP2Uf2a/gP8AAP4a+IdB0Wfxb8N28V32vWfg
3376- e4vjsENkIrf7NA+XldrndLcMQDsJ25YV6d8Q/wBtn9ru5+C3wm8dWvhmTwanijTdSl8aawvgu51Z
3377- tOuLZzFFGLVGVkWchpAzHKqMda9y+IX/AAT7+CHxB8IeBPC39seJtFuPhzoqaT4Z13w7rjWt9HYi
3378- GOFoHkUYkRlijLAryyKRirXj79hz4beOfDfhnw9B8Q/HOiN4V09rHT9S0TxRLHczQOqh1ndwwmLb
3379- Q25hkEkgjpQB8+/FD9uD9pN/hZ8MvFXw68Z6XNo2vaPqFx4q+IGg+A7zU7eO6t32R24s1ZZINzB9
3380- 7PnaY2GDUp/a41G/+N/wV8cyR+FPEx1j4S+KNWvvEWm6S8crTWij93btId8CMylXRgTkEdq9l1z/
3381- AIJxfBK98I+HPB/hPxl428KxeGbWe3tbrwz4mkt5bpZ3Lzm4JDLKzyEuWKg7icY6VreEv2B/2e/B
3382- Ws+DNb0PSb5T4G8O6houjwzXheOW2vf+PkzAjMjucsWyOWNAHgHwW/bK/bD/ALS+Hvi/4v6v4Q1L
3383- Q/i34d1LUdE0vR7GSO40SSG3eeFXcuROuxQGOF5qh8AP24v2v7nxB8EfG3xr8QeEdS8L/GTU73So
3384- dK0fSJbe506aISNHO0jOVYEIQy449a92+E3/AATa/Zy+Dvio+LfDE/iK5a3026sNF0/VNaae10a3
3385- uM+alrGR+6yGI6kgcCtbSv2C/gLpOh/DTw7aRas1r8J9Vmv/AAqsl/kiWVXDecdv7xcO3HFAHgug
3386- f8FCPidJ+1d4Y8J6f8QtL8UeEPFvja50Fbez8H3NrHZqqOUkjvXYpcOGjZWUAA9jxXoP/BIDn9mD
3387- VijZX/hZHiL/ANL5K3/Df/BNP4F+F/HWi+M9L8YeMvsvhvxJJrmg+G5Nd3abY3j797JFsztO9vlL
3388- EDPFejfAL9mj4d/s3t4ig+G0upR2fiTXJtWuNOurwyW9pPLzIIFx+7RmyxGTySaAPRqKKKACiiig
3389- AoooJwMmgDI8V6ND4g0C80S5jDR3VvJFIrd1YEH9K/ny+M/hjx/+zz+0r4m+F+rG48P3Wm6wo8M3
3390- 0O5FtvKP+iyI3oUIDY7s1f0PspbkCvlr/gor/wAE9rL9r/wuuueDNYj0fxZpsR+w3UkIaG6Xr5Uw
3391- I5XPQjkVw5hhpYimnT+KOqP1jwn41wPC+aToY+N6FZKMm9k1s7dtbM5H/gl5/wAFGrH9pjwNP8N/
3392- jC8Nj468N2+3Uo5mC/ao1GPPGe+B83YdelfB/wDwVn/b18V/tmfFe6+A/wAHprh/Afhm8Md1NbMV
3393- j1a8U4LM3Ty1PQHgnmsTxV8IP22v2dvFlxbeLfg7eaXrSwva2vi7w/ohukmhK7CjeXklSpxnAIrz
3394- CP8AZR/bO8cahb6Bonwn8QXVveN/o/2XT2hgbJ5LZC4/4FXnVsRjKlFUnFp7N9T944Z4J4HwHFM8
3395- 7WJpeyspQg5JqLera127LoYPgPTh4R0TVrfwxOdS1+6jhsoI7Vd8cMksm0Kp/ikz3HSv3g/4J8/B
3396- PUf2ff2U/CPw41oN/aVvpizaluPPnyfO+ffJx+FfMP8AwTN/4JERfBew074oftDW8N14ht7r7Xa6
3397- OsnmQWkmMIxPdlHboDX6DQxeUcBQOwC11Zbg5UYuU1ZvQ/K/GzxBwPE2Mjl+AlzUqcm3LpJ2skvJ
3398- anwr/wAHG43/APBNq8AP/M5ab/KavmH/AIIT/wDBOD9jz9rP9k7VPiN8fPhDZ69rFv4suLSG8mmk
3399- UrCscZVcKRxya+8P+Ctf7H3xJ/bg/ZFuPgZ8Kr2xt9Xm8QWd6smpSlIhHEJA3I7/ADCsX/gjt+xN
3400- 8VP2Df2b9Q+EHxd1DTbjUrvxJNfxyaXMXjEbIoAOQOflr05H4Gd58Dv+CZn7EH7OvilfG3wl/Z90
3401- PTtWj/1GoSQmaSI9cqXJwfcYIrzb/gvD4O1rxj/wS8+I9loNm00tiun38kca8+TDfQNI30VAzH2F
3402- fY+T0rL8XeE/DvjvwxqHgzxbpMN9peq2ctpqFncLujnhkUq6EehBIqgPx3/4Njf2l/hP8PrD4kfA
3403- zxt4xsdJ1jV9QsdT0iLULhYVvIkikjlCMxALIdpK9SG46GvqD/grD/wWd8L/ALC9p4e8KfBOLw/4
3404- x8XaldvLqVi2ob4bKxVCN7tETh3cptX+6rZ7V8nftTf8GzPxi0fxzeeJP2P/AIlabdaPNcNLp+ka
3405- 5dtbXFirE/uxMAQwUHAJGSOTzT/2Tf8Ag2i+MWr/ABAs/Ff7ZXxD0230m2uklvNJ0S8a5uL5VOfL
3406- MxA2BuhOMgdOan3gPtjwB8Vvjp/wUE/4JEeMPH3jfwPYaP4i8feB9dttF0uxZ9hh8uWCJjv5y7Kz
3407- DttKkda/Mb/g3a/aZ+FH7On7Yuu6X8X/ABPBokPirwu2l6fe3sgjhF0LiKUI7HhciMgZ7kV++Phn
3408- wd4b8G+FrLwR4U0S3sdJ02ySzsbG3j2xwwIoVUUegXAr8tP+Cg3/AAbjr8WfiPqnxj/ZH8Zafo8+
3409- rSvc33hfVVK263LNuZoJF/1asSSVIIHan7wFv/guj8Ov+CbA+FPij9obXL/TdU+KuvWMdn4bfTdd
3410- WZ3lA2q/lxsQFQcknFcn/wAGsPgfXIf+FofEOWxkj02X7HYwzMuFklyZCB64A5+teR/Cr/g2f/bQ
3411- 8Y+KYYfjX4+8N6FpSyKJry01Fr2YpnnYuBg+meK/Yz9j39kr4W/sWfBLS/gj8J9PZbGxy91eTY86
3412- 9uG+/NIfU46dB0FKNwPVqKKKoCOSTau31WvLf2aP+Qr45/7HO8/mK9Qn6D/drzD9mon+1fHA/wCp
3413- yvP/AEKpe8Ttw/8AutX5fman7V/j7XfhV+zH8QviZ4WkWPUvD/gvUtQ095F3Ks0VtI6EjvhgDivE
3414- f2Wv2M9d8GJ8P/2hND/aK8ZXWsX2lpc+OLbWtVa6tdeWe33ECJvlgZZWVlKY4XHSvpb4h+B/D3xN
3415- 8Cax8O/F1p9o0rXtLn0/UoA2PMgmjMbrntlWNeBfBf8AYP8AHXw18T+E7jxx+1J4m8U+HfAKyjwn
3416- 4cubeO3jjzGYozcvH81yY4mZV3cZOTziqOI5Pw5/wUf+Jeq+OfD/AIovP2fY4fhP4q+JDeCND8WR
3417- 60rXr332qa0Sd7XHywNPA65zkAg1Yf8A4KGfFNPiJJr0f7PkbfCuH4rH4fS+Kv7cUXy6gNQ/s43H
3418- 2bHMAuj5ec7sc1o6D/wTXm0bx5o6y/HzWLj4e+HfiLJ410PwC1jCqW+pNNNcBftAHmNCtxO8oQ9+
3419- OlPT/gm9fr4/mk/4aE1xfAU3xQ/4T3/hBfsMO3+1jeC+ZftGPM8g3X73y/XjpQBzev8A/BRj4taF
3420- 4l8TeKH/AGfLWT4e+C/imPBfiDxEuuBbpJHmtoknjgxyqtcx7ue/Heq/xs/4Kqp8K/jl4k8HWfw9
3421- 0m68NeB9as9L8TXl14jji1KWWeOKVntbXrKsaTJuzySCB0rD+EX7DHxK+Mnif4qW/wAQfijrmg+D
3422- r/8AaAudcm8I/wBmReXrMNu1nPBMszDekbvGoO3r5X1r1LxP/wAE8mvPjprnxe8F/Ff+yrXxRq9t
3423- qfiLR7rwzZ33m3MMaREwzTIXhDxxRqwU4+XI5JoAsaN+1b8ffHv7T3ir4L/Dr4EabdeG/A/iSxsP
3424- Enia/wBeEMiQ3Fss5eKHGXdNx4zggVy+kf8ABRTxQv7TFp8D/Engjwq1jr2uXOk6DcaL4vjvLpLi
3425- ONmja4iUYRX244JKk4Ne3/Dj9nbSfh349+JHj2HxDcXMnxG1K3u7y3dQq2hitFt9qEcnIXdz3rxL
3426- 4bf8EvD8P/HPgvWD8bJLrRPAviSbWND0tfDNpFcSPI0jFJ7tR5soHmkZJ7CgDx34O/tVfGPxL+yZ
3427- dePP2jNMutSaP9oJdC0e50/XWhmMf9omIIxQD93EcKFP3x1r1rxl/wAFHPHXhrxtr3iPR/gZFffD
3428- Lwz4zh8L614nGsBbv7W7rGZI7fHzRq7qCc59K2NN/wCCZ+naf8N9U+E4+L+pTaJdfFKLxrpsMljF
3429- vs5hc/aHt938aM/c8gU3xn/wTPj8WeONWa1+O+sWHgXxD4wh8S654HhsYTHcXsbK21ZyN6Rs6KxU
3430- dSKAOf8AjF/wUb+MXw68W/EK68N/s6WuseC/hbrVnb+K9ebXliuFt51Rt8MJGXZd4zzjFfXvhzWb
3431- XxFollr9hu+z31nHcQ7hztdQw/Q14V41/YI8NeM/Cfxi8Jy+Oby3j+L13bz3siWyFtO8pEQLHn73
3432- 3B971r3DwnoK+FvDmneGop2kTT7GG2WRhguEQLk+5xQBqUUUUAFFFFABRRRQAVE6nH3aloPPFAFW
3433- TT7aZcPbK3ruUU2LSrSM4S0RR32qBVpvlOQKd94cGgv2lRRsnoMjhSMfIf8A69PooPPFBBm+KPFf
3434- hjwXo76/4u8Q2Ol2MbKsl5qF0kMSEnABdyAMn3rjfhd+0l8Hfip4P8P+M9E8YWVpD4ljMmh2uqXU
3435- UFxdgEg+WhfL9P4c1n/tV/B/xP8AGHwZodp4Ss9MvLrQ/FVrq50vWtwtb+OOOVDC5GcD97uHBGUH
3436- FfN+gf8ABNP4q6ZffD5tU1nS7uDQdH0211eGG+nhS0ktNQe78yDacuG3BdpI+7ySCRQB9iXfxQ+H
3437- dhp/9q6j460e3tWtWuftU2pRLH5KlVaTcWxsDMqlugJAPJrDT4//AA3n8eW/gi01+Gb7R4Vk8QR6
3438- tDcI1l9iSZYmfzg23GTuz0285r5z8bf8E5PHWsWPjgaP44h23WuWM3gXTZGeOOz0+K+e/mtHZeV3
3439- zzyqCMgLFBkHaRTdS/4J8/E1/h4ngnw3qul2K6h8O9b0PUlmuprhba5u79b6PaWIaSHfvjZMrhWG
3440- 3AG2gD6bl+OXwZh0O38STfFjw2un3cjpb6g+uW4glKMFcLIX2ttJAOCSCRmtd/HvgiHxDF4Obxhp
3441- a6vcW/nw6X/aEQuXixnzBFu3FcA/MBjivh34g/safG5/FWlafb/D7wvNeeLLnxZeT6SkMraPoS3O
3442- laVp8UYfH3ibZ7gnC72eULtJDDtNF/4J5eP9M+ONv4v1TxbHf6XBbWL2+qNfTJdWs1toiabsEanb
3443- Irshl5OB50gKkkEAHuVx+1l8H31Pxhp2j+Il1YeCfDcOt6xcaTNHcReTK1ygRWRiDIDaS5Q4x8vr
3444- XTeBvjT8L/iLoNhr/hbx3pF3HqEYaGOHUoXff5XmtGQrH51TJZeqgEngV85/BP8AYe+Kvgf4c+NP
3445- CHiC28N2d1rXwm0jwdYzaTv2XM1jHeo15NuGQZTcqxGSRg8seT5z48/Y5+NXgf4byXemQadpfjbV
3446- vEWg2HhiPwnZSy29ksVu9neXUp4CebbTThicBQFAJbFAH098Zv2uvCPwk8YeG/BGleA/EnjDUvFV
3447- hcXukw+EbWG4DW8O3fIWeVFx8wxgnNc34n/4KGfDjw3fL4fi+GnjLUtabXjo/wDYOn6ZE90LoWYu
3448- 2XBlVTtjbk5+8CBnrVP4pfsHeF/ij8WPhrqeqw/8Up4C8K3WlLZR3ksM5ZliWEhoyOAsfOT3rjfE
3449- 37Fn7QHhH4tf8Lb+DNz4buZrP4gTa1p2n69NMEFq+lrZKrFOS4K7uvIoA9o+E/7YXwm+M3i/Q/B3
3450- gxtSa81zw9cavCt1a+X9nSCfyJYpefllWTgryOOteuV8v/sx/sVfEL4J/Fzw/wDErxN4o06+e38L
3451- 6na60LOFo1a9vL/7U3lKSSI1HyjJJ719QDPegCOdTjIFeXfs2DbrHjlf+pzvP/Qq9TkAYEevFcD8
3452- FvBPiLwjq3iq4123WNNU8TXN5Z7WzuhYjaT6H2qX8aOmjOMaE433t+Za/aQ+JOo/Br9n3xt8XNH0
3453- +O6uvDPhTUNUtbWZtqyyQW7yKpPYEqAfavk34LfEP4u/DX4v/DNvij+3zY65rnxA0+O88SfDjXrd
3454- Il8u4gdoW00IuYysg27WPzKD3FfYnxh+G+lfGP4U+JPhNrtzLDY+JtCu9LvJoT88cc8LRsy+4DZF
3455- fL/gH9hf9pbXfG/wzj/aK+I/g3VfDvwnvIb3RbrQ/D72+qaxcQW8kFv9plZ2CogkLFUADMAfaqOY
3456- 9EvP2/fhnYfDnxh8S5dA1T7H4K+KQ8B6pHtXfJfm/gshInPMZkuEbPXANc9rn7a/gz4JyfFLWtWv
3457- vFXii90v4r6b4V0vw55cZeTU7uxsmgsrLoPLbzhIS54YyHpgV558Q/8AgnT+07qmqeOPhz4E+Kvh
3458- W3+HfjT4vWvj+6j1LSJn1SO6F/aXc1qsiyiPyi9uWU7dw4HrnpPi/wD8E+PiZ4t/4TrxX4K8daXB
3459- 4i1D456H8SPBrahZu9tDcafZWVuLe6CsGZXNvLypGA6nscgGD8FP2+/EXh/xD+0N8SPjP4f8U2+l
3460- +FPGHh3TfDfgm6jie+tZruwt4xaRIr7WaS4kDAhsEOG45FT/ALSv7fXiLxZ+yP4+134ZWWueBfHn
3461- gvxJotjrOj6ls+02i3V5AEcMjMrxyxM4DA9VYHGKpeIf+CZ/xv8Ait4K+Lx+MHxA8LzeIviP4v0H
3462- xJYjT9ImFhZXGmQW6RwPG0paSJvI2HkEgk9cYuyf8E2vHutfsv8Aj74WzaZ8OfCvibxdeabc2t14
3463- Q0G4jtw1lMJokuPMmZ5l3BsEMpUOQKAO9+Jf7YfhD4AePfi74m8U6t4o1a38E6Lo91eaBCkbW8C3
3464- DTKptuhLsV+fcey471Y8G/8ABR34bamfG1h8RvAfiTwXqXgjw6mv3ml+ILdPPudLckJcx+WzA5YB
3465- dpOQSK5f4sfsE/Fj4u6d8UNS1vxxo8GsfErw3oFlMtvZv5FpcWJkaZhlslGaT5R1A65q58d/+Cd2
3466- pfHL4uePvG+p+NYbXTfGnwfi8HLbLblpIJkuRMLgknDLxjbgfWgDY8I/8FIvhrqPh3xRrnxI+Hni
3467- XwXN4Z8LDxHJYa1bxtLd6W3C3EXlsQckgFCQwJ5rqv2Xf2t7r9pKNrpfgn4k8NWMllHeadqerTWs
3468- sF5E/I2tDKxV8EEqRkV5D8AP+CffxT+FnhbxNbXug/CPT9a1Hw5/Y+m6npHhO5fzl4y12s07eYj4
3469- 5jXABNa/7GH7C3xI+A3xu1L4s+Ll8F6Ha3Ggrp0fhv4f6fc21ncSCXd9pmWaVxvxwAoUD3oA+sgT
3470- n7tLRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMit1FLRRQAVF5KFt2333VLRQA
3471- AYGBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFOcADIFNoAKKK
3472- KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
3473- AKKKKACiiigAooooA//Z
3474-
3475- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_
3476- Content-Type: image/png; name="image006.png"
3477- Content-Description: image006.png
3478- Content-Disposition: inline; filename="image006.png"; size=7034;
3479- creation-date="Fri, 04 Nov 2022 15:30:14 GMT";
3480- modification-date="Fri, 04 Nov 2022 15:30:14 GMT"
3481- Content-ID: <image006.png@01D8F06A.B6972CF0>
3482- Content-Transfer-Encoding: base64
3483-
3484- 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
3607- nvwfi0iDQOLhMeYAAAAASUVORK5CYII=
3608-
3609- --_009_DU0PR05MB9819EC59C67766ACFA0F67FFC23B9DU0PR05MB9819eurp_--
3610 diff --git a/resources/arf/001.json b/resources/arf/001.json
3611index d879e11..5345bf3 100644
3612--- a/resources/arf/001.json
3613+++ b/resources/arf/001.json
3614 @@ -13,6 +13,17 @@
3615 "user_agent": "SomeGenerator/1.0",
3616 "version": 1,
3617 "source_port": 0,
3618+ "auth_failure": "Unspecified",
3619+ "delivery_result": "Unspecified",
3620+ "dkim_adsp_dns": null,
3621+ "dkim_canonicalized_body": null,
3622+ "dkim_canonicalized_header": null,
3623+ "dkim_domain": null,
3624+ "dkim_identity": null,
3625+ "dkim_selector": null,
3626+ "dkim_selector_dns": null,
3627+ "spf_dns": null,
3628+ "identity_alignment": "Unspecified",
3629 "message": null,
3630- "auth_failure": null
3631+ "headers": null
3632 }
3633\ No newline at end of file
3634 diff --git a/resources/arf/002.json b/resources/arf/002.json
3635index 1d88b41..6466697 100644
3636--- a/resources/arf/002.json
3637+++ b/resources/arf/002.json
3638 @@ -20,6 +20,17 @@
3639 "user_agent": "SomeGenerator/1.0",
3640 "version": 1,
3641 "source_port": 0,
3642+ "auth_failure": "Unspecified",
3643+ "delivery_result": "Unspecified",
3644+ "dkim_adsp_dns": null,
3645+ "dkim_canonicalized_body": null,
3646+ "dkim_canonicalized_header": null,
3647+ "dkim_domain": null,
3648+ "dkim_identity": null,
3649+ "dkim_selector": null,
3650+ "dkim_selector_dns": null,
3651+ "spf_dns": null,
3652+ "identity_alignment": "Unspecified",
3653 "message": null,
3654- "auth_failure": null
3655+ "headers": null
3656 }
3657\ No newline at end of file
3658 diff --git a/resources/arf/003.json b/resources/arf/003.json
3659index 6af2706..e588da7 100644
3660--- a/resources/arf/003.json
3661+++ b/resources/arf/003.json
3662 @@ -17,18 +17,17 @@
3663 "user_agent": "SomeDKIMFilter/1.0",
3664 "version": 1,
3665 "source_port": 0,
3666+ "auth_failure": "BodyHash",
3667+ "delivery_result": "Unspecified",
3668+ "dkim_adsp_dns": null,
3669+ "dkim_canonicalized_body": null,
3670+ "dkim_canonicalized_header": null,
3671+ "dkim_domain": "example.net",
3672+ "dkim_identity": null,
3673+ "dkim_selector": null,
3674+ "dkim_selector_dns": null,
3675+ "spf_dns": null,
3676+ "identity_alignment": "Unspecified",
3677 "message": null,
3678- "auth_failure": {
3679- "auth_failure": "BodyHash",
3680- "delivery_result": "Other",
3681- "dkim_adsp_dns": null,
3682- "dkim_canonicalized_body": null,
3683- "dkim_canonicalized_header": null,
3684- "dkim_domain": "example.net",
3685- "dkim_identity": null,
3686- "dkim_selector": null,
3687- "dkim_selector_dns": null,
3688- "spf_dns": null,
3689- "identity_alignment": "None"
3690- }
3691+ "headers": null
3692 }
3693\ No newline at end of file
3694 diff --git a/resources/arf/004.json b/resources/arf/004.json
3695index ecf12bc..dc4fc0f 100644
3696--- a/resources/arf/004.json
3697+++ b/resources/arf/004.json
3698 @@ -17,18 +17,1473 @@
3699 "user_agent": "OpenDMARC-Filter/1.3.2",
3700 "version": 1,
3701 "source_port": 0,
3702+ "auth_failure": "Dmarc",
3703+ "delivery_result": "Unspecified",
3704+ "dkim_adsp_dns": null,
3705+ "dkim_canonicalized_body": null,
3706+ "dkim_canonicalized_header": null,
3707+ "dkim_domain": null,
3708+ "dkim_identity": null,
3709+ "dkim_selector": null,
3710+ "dkim_selector_dns": null,
3711+ "spf_dns": null,
3712+ "identity_alignment": "Unspecified",
3713 "message": null,
3714- "auth_failure": {
3715- "auth_failure": "Dmarc",
3716- "delivery_result": "Other",
3717- "dkim_adsp_dns": null,
3718- "dkim_canonicalized_body": null,
3719- "dkim_canonicalized_header": null,
3720- "dkim_domain": null,
3721- "dkim_identity": null,
3722- "dkim_selector": null,
3723- "dkim_selector_dns": null,
3724- "spf_dns": null,
3725- "identity_alignment": "None"
3726- }
3727+ "headers": [
3728+ 65,
3729+ 117,
3730+ 116,
3731+ 104,
3732+ 101,
3733+ 110,
3734+ 116,
3735+ 105,
3736+ 99,
3737+ 97,
3738+ 116,
3739+ 105,
3740+ 111,
3741+ 110,
3742+ 45,
3743+ 82,
3744+ 101,
3745+ 115,
3746+ 117,
3747+ 108,
3748+ 116,
3749+ 115,
3750+ 58,
3751+ 32,
3752+ 98,
3753+ 111,
3754+ 120,
3755+ 46,
3756+ 109,
3757+ 121,
3758+ 100,
3759+ 111,
3760+ 109,
3761+ 97,
3762+ 105,
3763+ 110,
3764+ 46,
3765+ 110,
3766+ 97,
3767+ 109,
3768+ 101,
3769+ 59,
3770+ 10,
3771+ 9,
3772+ 100,
3773+ 107,
3774+ 105,
3775+ 109,
3776+ 61,
3777+ 102,
3778+ 97,
3779+ 105,
3780+ 108,
3781+ 32,
3782+ 114,
3783+ 101,
3784+ 97,
3785+ 115,
3786+ 111,
3787+ 110,
3788+ 61,
3789+ 34,
3790+ 115,
3791+ 105,
3792+ 103,
3793+ 110,
3794+ 97,
3795+ 116,
3796+ 117,
3797+ 114,
3798+ 101,
3799+ 32,
3800+ 118,
3801+ 101,
3802+ 114,
3803+ 105,
3804+ 102,
3805+ 105,
3806+ 99,
3807+ 97,
3808+ 116,
3809+ 105,
3810+ 111,
3811+ 110,
3812+ 32,
3813+ 102,
3814+ 97,
3815+ 105,
3816+ 108,
3817+ 101,
3818+ 100,
3819+ 34,
3820+ 32,
3821+ 40,
3822+ 50,
3823+ 48,
3824+ 52,
3825+ 56,
3826+ 45,
3827+ 98,
3828+ 105,
3829+ 116,
3830+ 32,
3831+ 107,
3832+ 101,
3833+ 121,
3834+ 59,
3835+ 32,
3836+ 117,
3837+ 110,
3838+ 112,
3839+ 114,
3840+ 111,
3841+ 116,
3842+ 101,
3843+ 99,
3844+ 116,
3845+ 101,
3846+ 100,
3847+ 41,
3848+ 32,
3849+ 104,
3850+ 101,
3851+ 97,
3852+ 100,
3853+ 101,
3854+ 114,
3855+ 46,
3856+ 100,
3857+ 61,
3858+ 105,
3859+ 110,
3860+ 116,
3861+ 101,
3862+ 114,
3863+ 112,
3864+ 117,
3865+ 98,
3866+ 108,
3867+ 105,
3868+ 99,
3869+ 97,
3870+ 116,
3871+ 105,
3872+ 111,
3873+ 110,
3874+ 46,
3875+ 111,
3876+ 114,
3877+ 103,
3878+ 32,
3879+ 104,
3880+ 101,
3881+ 97,
3882+ 100,
3883+ 101,
3884+ 114,
3885+ 46,
3886+ 105,
3887+ 61,
3888+ 64,
3889+ 105,
3890+ 110,
3891+ 116,
3892+ 101,
3893+ 114,
3894+ 112,
3895+ 117,
3896+ 98,
3897+ 108,
3898+ 105,
3899+ 99,
3900+ 97,
3901+ 116,
3902+ 105,
3903+ 111,
3904+ 110,
3905+ 46,
3906+ 111,
3907+ 114,
3908+ 103,
3909+ 32,
3910+ 104,
3911+ 101,
3912+ 97,
3913+ 100,
3914+ 101,
3915+ 114,
3916+ 46,
3917+ 98,
3918+ 61,
3919+ 34,
3920+ 80,
3921+ 114,
3922+ 115,
3923+ 84,
3924+ 78,
3925+ 110,
3926+ 117,
3927+ 72,
3928+ 34,
3929+ 59,
3930+ 10,
3931+ 9,
3932+ 100,
3933+ 107,
3934+ 105,
3935+ 109,
3936+ 45,
3937+ 97,
3938+ 116,
3939+ 112,
3940+ 115,
3941+ 61,
3942+ 110,
3943+ 101,
3944+ 117,
3945+ 116,
3946+ 114,
3947+ 97,
3948+ 108,
3949+ 10,
3950+ 82,
3951+ 101,
3952+ 99,
3953+ 101,
3954+ 105,
3955+ 118,
3956+ 101,
3957+ 100,
3958+ 58,
3959+ 32,
3960+ 102,
3961+ 114,
3962+ 111,
3963+ 109,
3964+ 32,
3965+ 100,
3966+ 115,
3967+ 108,
3968+ 98,
3969+ 45,
3970+ 48,
3971+ 48,
3972+ 50,
3973+ 45,
3974+ 50,
3975+ 48,
3976+ 50,
3977+ 45,
3978+ 49,
3979+ 53,
3980+ 48,
3981+ 45,
3982+ 49,
3983+ 50,
3984+ 55,
3985+ 46,
3986+ 48,
3987+ 48,
3988+ 50,
3989+ 46,
3990+ 50,
3991+ 48,
3992+ 50,
3993+ 46,
3994+ 112,
3995+ 111,
3996+ 111,
3997+ 108,
3998+ 115,
3999+ 46,
4000+ 118,
4001+ 111,
4002+ 100,
4003+ 97,
4004+ 102,
4005+ 111,
4006+ 110,
4007+ 101,
4008+ 45,
4009+ 105,
4010+ 112,
4011+ 46,
4012+ 100,
4013+ 101,
4014+ 32,
4015+ 40,
4016+ 100,
4017+ 115,
4018+ 108,
4019+ 98,
4020+ 45,
4021+ 49,
4022+ 56,
4023+ 56,
4024+ 45,
4025+ 48,
4026+ 57,
4027+ 57,
4028+ 45,
4029+ 48,
4030+ 56,
4031+ 48,
4032+ 45,
4033+ 48,
4034+ 50,
4035+ 57,
4036+ 46,
4037+ 49,
4038+ 56,
4039+ 56,
4040+ 46,
4041+ 48,
4042+ 57,
4043+ 57,
4044+ 46,
4045+ 112,
4046+ 111,
4047+ 111,
4048+ 108,
4049+ 115,
4050+ 46,
4051+ 118,
4052+ 111,
4053+ 100,
4054+ 97,
4055+ 102,
4056+ 111,
4057+ 110,
4058+ 101,
4059+ 45,
4060+ 105,
4061+ 112,
4062+ 46,
4063+ 100,
4064+ 101,
4065+ 32,
4066+ 91,
4067+ 49,
4068+ 56,
4069+ 56,
4070+ 46,
4071+ 57,
4072+ 57,
4073+ 46,
4074+ 56,
4075+ 48,
4076+ 46,
4077+ 50,
4078+ 57,
4079+ 93,
4080+ 41,
4081+ 10,
4082+ 9,
4083+ 98,
4084+ 121,
4085+ 32,
4086+ 115,
4087+ 97,
4088+ 105,
4089+ 110,
4090+ 97,
4091+ 121,
4092+ 46,
4093+ 105,
4094+ 110,
4095+ 116,
4096+ 101,
4097+ 114,
4098+ 112,
4099+ 117,
4100+ 98,
4101+ 108,
4102+ 105,
4103+ 99,
4104+ 97,
4105+ 116,
4106+ 105,
4107+ 111,
4108+ 110,
4109+ 46,
4110+ 111,
4111+ 114,
4112+ 103,
4113+ 32,
4114+ 40,
4115+ 80,
4116+ 111,
4117+ 115,
4118+ 116,
4119+ 102,
4120+ 105,
4121+ 120,
4122+ 41,
4123+ 32,
4124+ 119,
4125+ 105,
4126+ 116,
4127+ 104,
4128+ 32,
4129+ 69,
4130+ 83,
4131+ 77,
4132+ 84,
4133+ 80,
4134+ 65,
4135+ 32,
4136+ 105,
4137+ 100,
4138+ 32,
4139+ 54,
4140+ 66,
4141+ 66,
4142+ 50,
4143+ 51,
4144+ 65,
4145+ 50,
4146+ 68,
4147+ 51,
4148+ 10,
4149+ 9,
4150+ 102,
4151+ 111,
4152+ 114,
4153+ 32,
4154+ 60,
4155+ 97,
4156+ 100,
4157+ 100,
4158+ 114,
4159+ 101,
4160+ 115,
4161+ 115,
4162+ 64,
4163+ 109,
4164+ 121,
4165+ 111,
4166+ 116,
4167+ 104,
4168+ 101,
4169+ 114,
4170+ 100,
4171+ 111,
4172+ 109,
4173+ 97,
4174+ 105,
4175+ 110,
4176+ 46,
4177+ 110,
4178+ 97,
4179+ 109,
4180+ 101,
4181+ 62,
4182+ 59,
4183+ 32,
4184+ 84,
4185+ 117,
4186+ 101,
4187+ 44,
4188+ 32,
4189+ 32,
4190+ 53,
4191+ 32,
4192+ 79,
4193+ 99,
4194+ 116,
4195+ 32,
4196+ 50,
4197+ 48,
4198+ 50,
4199+ 49,
4200+ 32,
4201+ 48,
4202+ 48,
4203+ 58,
4204+ 51,
4205+ 54,
4206+ 58,
4207+ 53,
4208+ 50,
4209+ 32,
4210+ 45,
4211+ 48,
4212+ 52,
4213+ 48,
4214+ 48,
4215+ 32,
4216+ 40,
4217+ 69,
4218+ 68,
4219+ 84,
4220+ 41,
4221+ 10,
4222+ 68,
4223+ 75,
4224+ 73,
4225+ 77,
4226+ 45,
4227+ 70,
4228+ 105,
4229+ 108,
4230+ 116,
4231+ 101,
4232+ 114,
4233+ 58,
4234+ 32,
4235+ 79,
4236+ 112,
4237+ 101,
4238+ 110,
4239+ 68,
4240+ 75,
4241+ 73,
4242+ 77,
4243+ 32,
4244+ 70,
4245+ 105,
4246+ 108,
4247+ 116,
4248+ 101,
4249+ 114,
4250+ 32,
4251+ 118,
4252+ 50,
4253+ 46,
4254+ 49,
4255+ 49,
4256+ 46,
4257+ 48,
4258+ 32,
4259+ 115,
4260+ 97,
4261+ 105,
4262+ 110,
4263+ 97,
4264+ 121,
4265+ 46,
4266+ 105,
4267+ 110,
4268+ 116,
4269+ 101,
4270+ 114,
4271+ 112,
4272+ 117,
4273+ 98,
4274+ 108,
4275+ 105,
4276+ 99,
4277+ 97,
4278+ 116,
4279+ 105,
4280+ 111,
4281+ 110,
4282+ 46,
4283+ 111,
4284+ 114,
4285+ 103,
4286+ 32,
4287+ 54,
4288+ 66,
4289+ 66,
4290+ 50,
4291+ 51,
4292+ 65,
4293+ 50,
4294+ 68,
4295+ 51,
4296+ 10,
4297+ 68,
4298+ 75,
4299+ 73,
4300+ 77,
4301+ 45,
4302+ 83,
4303+ 105,
4304+ 103,
4305+ 110,
4306+ 97,
4307+ 116,
4308+ 117,
4309+ 114,
4310+ 101,
4311+ 58,
4312+ 32,
4313+ 118,
4314+ 61,
4315+ 49,
4316+ 59,
4317+ 32,
4318+ 97,
4319+ 61,
4320+ 114,
4321+ 115,
4322+ 97,
4323+ 45,
4324+ 115,
4325+ 104,
4326+ 97,
4327+ 50,
4328+ 53,
4329+ 54,
4330+ 59,
4331+ 32,
4332+ 99,
4333+ 61,
4334+ 114,
4335+ 101,
4336+ 108,
4337+ 97,
4338+ 120,
4339+ 101,
4340+ 100,
4341+ 47,
4342+ 114,
4343+ 101,
4344+ 108,
4345+ 97,
4346+ 120,
4347+ 101,
4348+ 100,
4349+ 59,
4350+ 10,
4351+ 9,
4352+ 100,
4353+ 61,
4354+ 105,
4355+ 110,
4356+ 116,
4357+ 101,
4358+ 114,
4359+ 112,
4360+ 117,
4361+ 98,
4362+ 108,
4363+ 105,
4364+ 99,
4365+ 97,
4366+ 116,
4367+ 105,
4368+ 111,
4369+ 110,
4370+ 46,
4371+ 111,
4372+ 114,
4373+ 103,
4374+ 59,
4375+ 32,
4376+ 115,
4377+ 61,
4378+ 100,
4379+ 101,
4380+ 102,
4381+ 97,
4382+ 117,
4383+ 108,
4384+ 116,
4385+ 59,
4386+ 32,
4387+ 116,
4388+ 61,
4389+ 49,
4390+ 54,
4391+ 51,
4392+ 51,
4393+ 52,
4394+ 48,
4395+ 56,
4396+ 54,
4397+ 49,
4398+ 50,
4399+ 59,
4400+ 10,
4401+ 9,
4402+ 98,
4403+ 104,
4404+ 61,
4405+ 113,
4406+ 49,
4407+ 47,
4408+ 79,
4409+ 80,
4410+ 83,
4411+ 110,
4412+ 43,
4413+ 86,
4414+ 88,
4415+ 116,
4416+ 101,
4417+ 89,
4418+ 50,
4419+ 43,
4420+ 68,
4421+ 72,
4422+ 88,
4423+ 113,
4424+ 79,
4425+ 73,
4426+ 103,
4427+ 115,
4428+ 53,
4429+ 76,
4430+ 115,
4431+ 78,
4432+ 67,
4433+ 74,
4434+ 105,
4435+ 115,
4436+ 69,
4437+ 99,
4438+ 81,
4439+ 73,
4440+ 75,
4441+ 86,
4442+ 87,
4443+ 57,
4444+ 105,
4445+ 116,
4446+ 54,
4447+ 73,
4448+ 61,
4449+ 59,
4450+ 10,
4451+ 9,
4452+ 104,
4453+ 61,
4454+ 70,
4455+ 114,
4456+ 111,
4457+ 109,
4458+ 58,
4459+ 83,
4460+ 117,
4461+ 98,
4462+ 106,
4463+ 101,
4464+ 99,
4465+ 116,
4466+ 58,
4467+ 84,
4468+ 111,
4469+ 58,
4470+ 82,
4471+ 101,
4472+ 112,
4473+ 108,
4474+ 121,
4475+ 45,
4476+ 84,
4477+ 111,
4478+ 58,
4479+ 68,
4480+ 97,
4481+ 116,
4482+ 101,
4483+ 58,
4484+ 70,
4485+ 114,
4486+ 111,
4487+ 109,
4488+ 59,
4489+ 10,
4490+ 9,
4491+ 98,
4492+ 61,
4493+ 80,
4494+ 114,
4495+ 115,
4496+ 84,
4497+ 78,
4498+ 110,
4499+ 117,
4500+ 72,
4501+ 56,
4502+ 68,
4503+ 48,
4504+ 67,
4505+ 104,
4506+ 51,
4507+ 103,
4508+ 99,
4509+ 87,
4510+ 113,
4511+ 71,
4512+ 109,
4513+ 88,
4514+ 105,
4515+ 89,
4516+ 99,
4517+ 50,
4518+ 75,
4519+ 118,
4520+ 117,
4521+ 49,
4522+ 67,
4523+ 72,
4524+ 71,
4525+ 74,
4526+ 66,
4527+ 115,
4528+ 113,
4529+ 83,
4530+ 53,
4531+ 50,
4532+ 49,
4533+ 117,
4534+ 89,
4535+ 97,
4536+ 122,
4537+ 100,
4538+ 51,
4539+ 71,
4540+ 47,
4541+ 117,
4542+ 114,
4543+ 112,
4544+ 55,
4545+ 77,
4546+ 72,
4547+ 81,
4548+ 118,
4549+ 109,
4550+ 78,
4551+ 119,
4552+ 75,
4553+ 48,
4554+ 114,
4555+ 49,
4556+ 103,
4557+ 83,
4558+ 10,
4559+ 9,
4560+ 32,
4561+ 68,
4562+ 82,
4563+ 51,
4564+ 65,
4565+ 51,
4566+ 75,
4567+ 119,
4568+ 71,
4569+ 101,
4570+ 106,
4571+ 73,
4572+ 53,
4573+ 117,
4574+ 117,
4575+ 113,
4576+ 122,
4577+ 120,
4578+ 68,
4579+ 67,
4580+ 113,
4581+ 122,
4582+ 50,
4583+ 56,
4584+ 77,
4585+ 113,
4586+ 54,
4587+ 65,
4588+ 107,
4589+ 100,
4590+ 84,
4591+ 107,
4592+ 79,
4593+ 106,
4594+ 70,
4595+ 121,
4596+ 88,
4597+ 119,
4598+ 54,
4599+ 53,
4600+ 77,
4601+ 76,
4602+ 108,
4603+ 115,
4604+ 75,
4605+ 84,
4606+ 81,
4607+ 100,
4608+ 100,
4609+ 87,
4610+ 84,
4611+ 103,
4612+ 99,
4613+ 105,
4614+ 86,
4615+ 110,
4616+ 111,
4617+ 113,
4618+ 74,
4619+ 101,
4620+ 109,
4621+ 112,
4622+ 97,
4623+ 54,
4624+ 121,
4625+ 122,
4626+ 119,
4627+ 10,
4628+ 9,
4629+ 32,
4630+ 80,
4631+ 83,
4632+ 77,
4633+ 53,
4634+ 53,
4635+ 53,
4636+ 48,
4637+ 88,
4638+ 113,
4639+ 86,
4640+ 70,
4641+ 113,
4642+ 113,
4643+ 107,
4644+ 78,
4645+ 120,
4646+ 69,
4647+ 99,
4648+ 89,
4649+ 66,
4650+ 85,
4651+ 66,
4652+ 89,
4653+ 69,
4654+ 119,
4655+ 85,
4656+ 100,
4657+ 121,
4658+ 49,
4659+ 116,
4660+ 89,
4661+ 56,
4662+ 114,
4663+ 99,
4664+ 52,
4665+ 122,
4666+ 104,
4667+ 113,
4668+ 56,
4669+ 99,
4670+ 73,
4671+ 114,
4672+ 115,
4673+ 111,
4674+ 110,
4675+ 81,
4676+ 86,
4677+ 120,
4678+ 74,
4679+ 74,
4680+ 83,
4681+ 98,
4682+ 99,
4683+ 51,
4684+ 99,
4685+ 100,
4686+ 111,
4687+ 110,
4688+ 73,
4689+ 67,
4690+ 77,
4691+ 49,
4692+ 107,
4693+ 76,
4694+ 66,
4695+ 86,
4696+ 10,
4697+ 9,
4698+ 32,
4699+ 87,
4700+ 65,
4701+ 83,
4702+ 118,
4703+ 49,
4704+ 54,
4705+ 112,
4706+ 51,
4707+ 51,
4708+ 55,
4709+ 54,
4710+ 90,
4711+ 66,
4712+ 99,
4713+ 75,
4714+ 113,
4715+ 70,
4716+ 76,
4717+ 99,
4718+ 56,
4719+ 85,
4720+ 81,
4721+ 53,
4722+ 56,
4723+ 89,
4724+ 81,
4725+ 75,
4726+ 97,
4727+ 70,
4728+ 109,
4729+ 53,
4730+ 49,
4731+ 86,
4732+ 90,
4733+ 71,
4734+ 69,
4735+ 106,
4736+ 116,
4737+ 97,
4738+ 98,
4739+ 102,
4740+ 109,
4741+ 87,
4742+ 98,
4743+ 103,
4744+ 79,
4745+ 81,
4746+ 55,
4747+ 86,
4748+ 105,
4749+ 107,
4750+ 70,
4751+ 70,
4752+ 69,
4753+ 67,
4754+ 68,
4755+ 71,
4756+ 51,
4757+ 97,
4758+ 82,
4759+ 116,
4760+ 56,
4761+ 102,
4762+ 90,
4763+ 97,
4764+ 54,
4765+ 10,
4766+ 9,
4767+ 32,
4768+ 68,
4769+ 48,
4770+ 51,
4771+ 77,
4772+ 114,
4773+ 122,
4774+ 85,
4775+ 83,
4776+ 110,
4777+ 103,
4778+ 119,
4779+ 80,
4780+ 85,
4781+ 100,
4782+ 99,
4783+ 82,
4784+ 81,
4785+ 90,
4786+ 117,
4787+ 113,
4788+ 83,
4789+ 47,
4790+ 115,
4791+ 65,
4792+ 112,
4793+ 87,
4794+ 47,
4795+ 97,
4796+ 57,
4797+ 78,
4798+ 50,
4799+ 89,
4800+ 119,
4801+ 100,
4802+ 98,
4803+ 82,
4804+ 53,
4805+ 49,
4806+ 79,
4807+ 70,
4808+ 122,
4809+ 80,
4810+ 66,
4811+ 114,
4812+ 52,
4813+ 121,
4814+ 112,
4815+ 85,
4816+ 69,
4817+ 73,
4818+ 119,
4819+ 47,
4820+ 113,
4821+ 112,
4822+ 114,
4823+ 103,
4824+ 66,
4825+ 71,
4826+ 52,
4827+ 66,
4828+ 102,
4829+ 81,
4830+ 81,
4831+ 75,
4832+ 101,
4833+ 83,
4834+ 10,
4835+ 9,
4836+ 32,
4837+ 49,
4838+ 80,
4839+ 104,
4840+ 105,
4841+ 110,
4842+ 78,
4843+ 118,
4844+ 86,
4845+ 116,
4846+ 103,
4847+ 81,
4848+ 112,
4849+ 81,
4850+ 61,
4851+ 61,
4852+ 10,
4853+ 70,
4854+ 114,
4855+ 111,
4856+ 109,
4857+ 58,
4858+ 32,
4859+ 34,
4860+ 82,
4861+ 111,
4862+ 108,
4863+ 102,
4864+ 32,
4865+ 66,
4866+ 97,
4867+ 100,
4868+ 101,
4869+ 114,
4870+ 34,
4871+ 32,
4872+ 60,
4873+ 105,
4874+ 110,
4875+ 102,
4876+ 111,
4877+ 64,
4878+ 105,
4879+ 110,
4880+ 116,
4881+ 101,
4882+ 114,
4883+ 112,
4884+ 117,
4885+ 98,
4886+ 108,
4887+ 105,
4888+ 99,
4889+ 97,
4890+ 116,
4891+ 105,
4892+ 111,
4893+ 110,
4894+ 46,
4895+ 111,
4896+ 114,
4897+ 103,
4898+ 62,
4899+ 10,
4900+ 83,
4901+ 117,
4902+ 98,
4903+ 106,
4904+ 101,
4905+ 99,
4906+ 116,
4907+ 58,
4908+ 32,
4909+ 87,
4910+ 105,
4911+ 114,
4912+ 32,
4913+ 107,
4914+ 97,
4915+ 117,
4916+ 102,
4917+ 101,
4918+ 110,
4919+ 32,
4920+ 100,
4921+ 101,
4922+ 105,
4923+ 110,
4924+ 32,
4925+ 65,
4926+ 117,
4927+ 116,
4928+ 111,
4929+ 33,
4930+ 10,
4931+ 84,
4932+ 111,
4933+ 58,
4934+ 32,
4935+ 34,
4936+ 97,
4937+ 100,
4938+ 100,
4939+ 114,
4940+ 101,
4941+ 115,
4942+ 115,
4943+ 34,
4944+ 32,
4945+ 60,
4946+ 97,
4947+ 100,
4948+ 100,
4949+ 114,
4950+ 101,
4951+ 115,
4952+ 115,
4953+ 64,
4954+ 109,
4955+ 121,
4956+ 111,
4957+ 116,
4958+ 104,
4959+ 101,
4960+ 114,
4961+ 100,
4962+ 111,
4963+ 109,
4964+ 97,
4965+ 105,
4966+ 110,
4967+ 46,
4968+ 110,
4969+ 97,
4970+ 109,
4971+ 101,
4972+ 62,
4973+ 10,
4974+ 67,
4975+ 111,
4976+ 110,
4977+ 116,
4978+ 101,
4979+ 110,
4980+ 116,
4981+ 45,
4982+ 84,
4983+ 121,
4984+ 112,
4985+ 101,
4986+ 58,
4987+ 32,
4988+ 109,
4989+ 117,
4990+ 108,
4991+ 116,
4992+ 105,
4993+ 112,
4994+ 97,
4995+ 114,
4996+ 116,
4997+ 47,
4998+ 97,
4999+ 108,
5000+ 116,
5001+ 101,
5002+ 114,
5003+ 110,
5004+ 97,
5005+ 116,
5006+ 105,
5007+ 118,
5008+ 101,
5009+ 59,
5010+ 32,
5011+ 98,
5012+ 111,
5013+ 117,
5014+ 110,
5015+ 100,
5016+ 97,
5017+ 114,
5018+ 121,
5019+ 61,
5020+ 34,
5021+ 84,
5022+ 68,
5023+ 54,
5024+ 103,
5025+ 77,
5026+ 51,
5027+ 66,
5028+ 108,
5029+ 118,
5030+ 61,
5031+ 95,
5032+ 88,
5033+ 66,
5034+ 90,
5035+ 89,
5036+ 78,
5037+ 70,
5038+ 84,
5039+ 55,
5040+ 100,
5041+ 67,
5042+ 115,
5043+ 72,
5044+ 49,
5045+ 68,
5046+ 72,
5047+ 72,
5048+ 79,
5049+ 75,
5050+ 85,
5051+ 117,
5052+ 83,
5053+ 121,
5054+ 65,
5055+ 34,
5056+ 10,
5057+ 77,
5058+ 73,
5059+ 77,
5060+ 69,
5061+ 45,
5062+ 86,
5063+ 101,
5064+ 114,
5065+ 115,
5066+ 105,
5067+ 111,
5068+ 110,
5069+ 58,
5070+ 32,
5071+ 49,
5072+ 46,
5073+ 48,
5074+ 10,
5075+ 82,
5076+ 101,
5077+ 112,
5078+ 108,
5079+ 121,
5080+ 45,
5081+ 84,
5082+ 111,
5083+ 58,
5084+ 32,
5085+ 34,
5086+ 82,
5087+ 111,
5088+ 108,
5089+ 102,
5090+ 32,
5091+ 66,
5092+ 97,
5093+ 100,
5094+ 101,
5095+ 114,
5096+ 34,
5097+ 32,
5098+ 60,
5099+ 97,
5100+ 117,
5101+ 116,
5102+ 111,
5103+ 50,
5104+ 52,
5105+ 45,
5106+ 101,
5107+ 120,
5108+ 112,
5109+ 111,
5110+ 114,
5111+ 116,
5112+ 64,
5113+ 103,
5114+ 109,
5115+ 120,
5116+ 46,
5117+ 100,
5118+ 101,
5119+ 62,
5120+ 10,
5121+ 79,
5122+ 114,
5123+ 103,
5124+ 97,
5125+ 110,
5126+ 105,
5127+ 122,
5128+ 97,
5129+ 116,
5130+ 105,
5131+ 111,
5132+ 110,
5133+ 58,
5134+ 32,
5135+ 65,
5136+ 117,
5137+ 116,
5138+ 111,
5139+ 84,
5140+ 69,
5141+ 65,
5142+ 77,
5143+ 50,
5144+ 52,
5145+ 10,
5146+ 68,
5147+ 97,
5148+ 116,
5149+ 101,
5150+ 58,
5151+ 32,
5152+ 84,
5153+ 117,
5154+ 101,
5155+ 44,
5156+ 32,
5157+ 53,
5158+ 32,
5159+ 79,
5160+ 99,
5161+ 116,
5162+ 32,
5163+ 50,
5164+ 48,
5165+ 50,
5166+ 49,
5167+ 32,
5168+ 48,
5169+ 54,
5170+ 58,
5171+ 51,
5172+ 54,
5173+ 58,
5174+ 53,
5175+ 49,
5176+ 32,
5177+ 43,
5178+ 48,
5179+ 50,
5180+ 48,
5181+ 48,
5182+ 10
5183+ ]
5184 }
5185\ No newline at end of file
5186 diff --git a/resources/arf/005.json b/resources/arf/005.json
5187index 2b200b7..0bdf2a1 100644
5188--- a/resources/arf/005.json
5189+++ b/resources/arf/005.json
5190 @@ -19,18 +19,1191 @@
5191 "user_agent": "Someisp!Mail-Feedback/1.0",
5192 "version": 1,
5193 "source_port": 0,
5194+ "auth_failure": "BodyHash",
5195+ "delivery_result": "Unspecified",
5196+ "dkim_adsp_dns": null,
5197+ "dkim_canonicalized_body": "VGhpcyBpcyBhIG1lc3NhZ2UgYm9keSB0\n aGF0IGdvdCBtb2RpZmllZCBpbiB0cmFuc2l0LgoKQXQgdGhlIHNhbWU\n gdGltZSB0aGF0IHRoZSBib2R5aGFzaCBmYWlscyB0byB2ZXJpZnksIH\n RoZQptZXNzYWdlIGNvbnRlbnQgaXMgY2xlYXJseSBhYnVzaXZlIG9yI\n HBoaXNoeSwgYXMgdGhlClN1YmplY3QgYWxyZWFkeSBoaW50cy4gIElu\n ZGVlZCwgdGhpcyBib2R5IGFsc28gY29udGFpbnMKdGhlIGZvbGxvd2l\n uZyB0ZXh0OgoKICAgUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBiYW5rIG\n NyZWRlbnRpYWxzIGF0CiAgIGh0dHA6Ly93d3cuc2VuZGVyLmV4YW1wb\n GUvCgpXZSBhcmUgaW1wbHlpbmcgdGhhdCwgYWx0aG91Z2ggbXVsdGlw\n bGUgZmFpbHVyZXMKcmVxdWlyZSBtdWx0aXBsZSByZXBvcnRzLCBhIHN\n pbmdsZSBmYWlsdXJlIGNhbiBiZQpyZXBvcnRlZCBhbG9uZyB3aXRoIH\n BoaXNoaW5nIGluIGEgc2luZ2xlIHJlcG9ydC4K",
5198+ "dkim_canonicalized_header": null,
5199+ "dkim_domain": "sender.example",
5200+ "dkim_identity": "@sender.example",
5201+ "dkim_selector": "testkey",
5202+ "dkim_selector_dns": null,
5203+ "spf_dns": null,
5204+ "identity_alignment": "Unspecified",
5205 "message": null,
5206- "auth_failure": {
5207- "auth_failure": "BodyHash",
5208- "delivery_result": "Other",
5209- "dkim_adsp_dns": null,
5210- "dkim_canonicalized_body": "VGhpcyBpcyBhIG1lc3NhZ2UgYm9keSB0\n aGF0IGdvdCBtb2RpZmllZCBpbiB0cmFuc2l0LgoKQXQgdGhlIHNhbWU\n gdGltZSB0aGF0IHRoZSBib2R5aGFzaCBmYWlscyB0byB2ZXJpZnksIH\n RoZQptZXNzYWdlIGNvbnRlbnQgaXMgY2xlYXJseSBhYnVzaXZlIG9yI\n HBoaXNoeSwgYXMgdGhlClN1YmplY3QgYWxyZWFkeSBoaW50cy4gIElu\n ZGVlZCwgdGhpcyBib2R5IGFsc28gY29udGFpbnMKdGhlIGZvbGxvd2l\n uZyB0ZXh0OgoKICAgUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBiYW5rIG\n NyZWRlbnRpYWxzIGF0CiAgIGh0dHA6Ly93d3cuc2VuZGVyLmV4YW1wb\n GUvCgpXZSBhcmUgaW1wbHlpbmcgdGhhdCwgYWx0aG91Z2ggbXVsdGlw\n bGUgZmFpbHVyZXMKcmVxdWlyZSBtdWx0aXBsZSByZXBvcnRzLCBhIHN\n pbmdsZSBmYWlsdXJlIGNhbiBiZQpyZXBvcnRlZCBhbG9uZyB3aXRoIH\n BoaXNoaW5nIGluIGEgc2luZ2xlIHJlcG9ydC4K",
5211- "dkim_canonicalized_header": null,
5212- "dkim_domain": "sender.example",
5213- "dkim_identity": "@sender.example",
5214- "dkim_selector": "testkey",
5215- "dkim_selector_dns": null,
5216- "spf_dns": null,
5217- "identity_alignment": "None"
5218- }
5219+ "headers": [
5220+ 65,
5221+ 117,
5222+ 116,
5223+ 104,
5224+ 101,
5225+ 110,
5226+ 116,
5227+ 105,
5228+ 99,
5229+ 97,
5230+ 116,
5231+ 105,
5232+ 111,
5233+ 110,
5234+ 45,
5235+ 82,
5236+ 101,
5237+ 115,
5238+ 117,
5239+ 108,
5240+ 116,
5241+ 115,
5242+ 58,
5243+ 32,
5244+ 109,
5245+ 116,
5246+ 97,
5247+ 49,
5248+ 48,
5249+ 49,
5250+ 49,
5251+ 46,
5252+ 109,
5253+ 97,
5254+ 105,
5255+ 108,
5256+ 46,
5257+ 116,
5258+ 112,
5259+ 50,
5260+ 46,
5261+ 114,
5262+ 101,
5263+ 99,
5264+ 101,
5265+ 105,
5266+ 118,
5267+ 101,
5268+ 114,
5269+ 46,
5270+ 101,
5271+ 120,
5272+ 97,
5273+ 109,
5274+ 112,
5275+ 108,
5276+ 101,
5277+ 59,
5278+ 10,
5279+ 32,
5280+ 100,
5281+ 107,
5282+ 105,
5283+ 109,
5284+ 61,
5285+ 102,
5286+ 97,
5287+ 105,
5288+ 108,
5289+ 32,
5290+ 40,
5291+ 98,
5292+ 111,
5293+ 100,
5294+ 121,
5295+ 104,
5296+ 97,
5297+ 115,
5298+ 104,
5299+ 41,
5300+ 32,
5301+ 104,
5302+ 101,
5303+ 97,
5304+ 100,
5305+ 101,
5306+ 114,
5307+ 46,
5308+ 100,
5309+ 61,
5310+ 115,
5311+ 101,
5312+ 110,
5313+ 100,
5314+ 101,
5315+ 114,
5316+ 46,
5317+ 101,
5318+ 120,
5319+ 97,
5320+ 109,
5321+ 112,
5322+ 108,
5323+ 101,
5324+ 59,
5325+ 10,
5326+ 32,
5327+ 115,
5328+ 112,
5329+ 102,
5330+ 61,
5331+ 112,
5332+ 97,
5333+ 115,
5334+ 115,
5335+ 32,
5336+ 115,
5337+ 109,
5338+ 116,
5339+ 112,
5340+ 46,
5341+ 109,
5342+ 97,
5343+ 105,
5344+ 108,
5345+ 102,
5346+ 114,
5347+ 111,
5348+ 109,
5349+ 61,
5350+ 97,
5351+ 110,
5352+ 101,
5353+ 120,
5354+ 97,
5355+ 109,
5356+ 112,
5357+ 108,
5358+ 101,
5359+ 46,
5360+ 114,
5361+ 101,
5362+ 112,
5363+ 108,
5364+ 121,
5365+ 64,
5366+ 97,
5367+ 46,
5368+ 115,
5369+ 101,
5370+ 110,
5371+ 100,
5372+ 101,
5373+ 114,
5374+ 46,
5375+ 101,
5376+ 120,
5377+ 97,
5378+ 109,
5379+ 112,
5380+ 108,
5381+ 101,
5382+ 10,
5383+ 82,
5384+ 101,
5385+ 99,
5386+ 101,
5387+ 105,
5388+ 118,
5389+ 101,
5390+ 100,
5391+ 58,
5392+ 32,
5393+ 102,
5394+ 114,
5395+ 111,
5396+ 109,
5397+ 32,
5398+ 115,
5399+ 109,
5400+ 116,
5401+ 112,
5402+ 45,
5403+ 111,
5404+ 117,
5405+ 116,
5406+ 46,
5407+ 115,
5408+ 101,
5409+ 110,
5410+ 100,
5411+ 101,
5412+ 114,
5413+ 46,
5414+ 101,
5415+ 120,
5416+ 97,
5417+ 109,
5418+ 112,
5419+ 108,
5420+ 101,
5421+ 10,
5422+ 32,
5423+ 98,
5424+ 121,
5425+ 32,
5426+ 109,
5427+ 116,
5428+ 97,
5429+ 49,
5430+ 48,
5431+ 49,
5432+ 49,
5433+ 46,
5434+ 109,
5435+ 97,
5436+ 105,
5437+ 108,
5438+ 46,
5439+ 116,
5440+ 112,
5441+ 50,
5442+ 46,
5443+ 114,
5444+ 101,
5445+ 99,
5446+ 101,
5447+ 105,
5448+ 118,
5449+ 101,
5450+ 114,
5451+ 46,
5452+ 101,
5453+ 120,
5454+ 97,
5455+ 109,
5456+ 112,
5457+ 108,
5458+ 101,
5459+ 10,
5460+ 32,
5461+ 119,
5462+ 105,
5463+ 116,
5464+ 104,
5465+ 32,
5466+ 83,
5467+ 77,
5468+ 84,
5469+ 80,
5470+ 32,
5471+ 105,
5472+ 100,
5473+ 32,
5474+ 111,
5475+ 66,
5476+ 56,
5477+ 53,
5478+ 87,
5479+ 56,
5480+ 120,
5481+ 86,
5482+ 48,
5483+ 48,
5484+ 48,
5485+ 49,
5486+ 54,
5487+ 57,
5488+ 59,
5489+ 10,
5490+ 32,
5491+ 83,
5492+ 97,
5493+ 116,
5494+ 44,
5495+ 32,
5496+ 48,
5497+ 56,
5498+ 32,
5499+ 79,
5500+ 99,
5501+ 116,
5502+ 32,
5503+ 50,
5504+ 48,
5505+ 49,
5506+ 49,
5507+ 32,
5508+ 49,
5509+ 51,
5510+ 58,
5511+ 49,
5512+ 53,
5513+ 58,
5514+ 53,
5515+ 56,
5516+ 32,
5517+ 45,
5518+ 48,
5519+ 55,
5520+ 48,
5521+ 48,
5522+ 32,
5523+ 40,
5524+ 80,
5525+ 68,
5526+ 84,
5527+ 41,
5528+ 10,
5529+ 68,
5530+ 75,
5531+ 73,
5532+ 77,
5533+ 45,
5534+ 83,
5535+ 105,
5536+ 103,
5537+ 110,
5538+ 97,
5539+ 116,
5540+ 117,
5541+ 114,
5542+ 101,
5543+ 58,
5544+ 32,
5545+ 118,
5546+ 61,
5547+ 49,
5548+ 59,
5549+ 32,
5550+ 99,
5551+ 61,
5552+ 114,
5553+ 101,
5554+ 108,
5555+ 97,
5556+ 120,
5557+ 101,
5558+ 100,
5559+ 47,
5560+ 115,
5561+ 105,
5562+ 109,
5563+ 112,
5564+ 108,
5565+ 101,
5566+ 59,
5567+ 32,
5568+ 97,
5569+ 61,
5570+ 114,
5571+ 115,
5572+ 97,
5573+ 45,
5574+ 115,
5575+ 104,
5576+ 97,
5577+ 50,
5578+ 53,
5579+ 54,
5580+ 59,
5581+ 10,
5582+ 32,
5583+ 115,
5584+ 61,
5585+ 116,
5586+ 101,
5587+ 115,
5588+ 116,
5589+ 107,
5590+ 101,
5591+ 121,
5592+ 59,
5593+ 32,
5594+ 100,
5595+ 61,
5596+ 115,
5597+ 101,
5598+ 110,
5599+ 100,
5600+ 101,
5601+ 114,
5602+ 46,
5603+ 101,
5604+ 120,
5605+ 97,
5606+ 109,
5607+ 112,
5608+ 108,
5609+ 101,
5610+ 59,
5611+ 32,
5612+ 104,
5613+ 61,
5614+ 70,
5615+ 114,
5616+ 111,
5617+ 109,
5618+ 58,
5619+ 84,
5620+ 111,
5621+ 58,
5622+ 83,
5623+ 117,
5624+ 98,
5625+ 106,
5626+ 101,
5627+ 99,
5628+ 116,
5629+ 58,
5630+ 68,
5631+ 97,
5632+ 116,
5633+ 101,
5634+ 59,
5635+ 10,
5636+ 32,
5637+ 98,
5638+ 104,
5639+ 61,
5640+ 50,
5641+ 106,
5642+ 85,
5643+ 83,
5644+ 79,
5645+ 72,
5646+ 57,
5647+ 78,
5648+ 104,
5649+ 116,
5650+ 86,
5651+ 71,
5652+ 67,
5653+ 81,
5654+ 87,
5655+ 78,
5656+ 114,
5657+ 57,
5658+ 66,
5659+ 114,
5660+ 73,
5661+ 65,
5662+ 80,
5663+ 114,
5664+ 101,
5665+ 75,
5666+ 81,
5667+ 106,
5668+ 79,
5669+ 54,
5670+ 83,
5671+ 110,
5672+ 55,
5673+ 88,
5674+ 73,
5675+ 107,
5676+ 102,
5677+ 74,
5678+ 86,
5679+ 79,
5680+ 122,
5681+ 118,
5682+ 56,
5683+ 61,
5684+ 59,
5685+ 10,
5686+ 32,
5687+ 98,
5688+ 61,
5689+ 65,
5690+ 117,
5691+ 85,
5692+ 111,
5693+ 70,
5694+ 69,
5695+ 102,
5696+ 68,
5697+ 120,
5698+ 84,
5699+ 68,
5700+ 107,
5701+ 72,
5702+ 108,
5703+ 76,
5704+ 88,
5705+ 83,
5706+ 90,
5707+ 69,
5708+ 112,
5709+ 90,
5710+ 106,
5711+ 55,
5712+ 57,
5713+ 76,
5714+ 73,
5715+ 67,
5716+ 69,
5717+ 112,
5718+ 115,
5719+ 54,
5720+ 101,
5721+ 100,
5722+ 97,
5723+ 55,
5724+ 87,
5725+ 51,
5726+ 100,
5727+ 101,
5728+ 84,
5729+ 86,
5730+ 70,
5731+ 79,
5732+ 107,
5733+ 52,
5734+ 121,
5735+ 65,
5736+ 85,
5737+ 111,
5738+ 113,
5739+ 79,
5740+ 66,
5741+ 10,
5742+ 32,
5743+ 52,
5744+ 110,
5745+ 117,
5746+ 106,
5747+ 99,
5748+ 55,
5749+ 89,
5750+ 111,
5751+ 112,
5752+ 100,
5753+ 71,
5754+ 53,
5755+ 100,
5756+ 87,
5757+ 76,
5758+ 83,
5759+ 100,
5760+ 78,
5761+ 103,
5762+ 54,
5763+ 120,
5764+ 78,
5765+ 65,
5766+ 90,
5767+ 112,
5768+ 79,
5769+ 80,
5770+ 114,
5771+ 43,
5772+ 107,
5773+ 72,
5774+ 120,
5775+ 116,
5776+ 49,
5777+ 73,
5778+ 114,
5779+ 69,
5780+ 43,
5781+ 78,
5782+ 97,
5783+ 104,
5784+ 77,
5785+ 54,
5786+ 76,
5787+ 47,
5788+ 76,
5789+ 98,
5790+ 118,
5791+ 97,
5792+ 72,
5793+ 117,
5794+ 116,
5795+ 10,
5796+ 32,
5797+ 75,
5798+ 86,
5799+ 100,
5800+ 107,
5801+ 76,
5802+ 76,
5803+ 107,
5804+ 112,
5805+ 86,
5806+ 97,
5807+ 86,
5808+ 86,
5809+ 81,
5810+ 80,
5811+ 122,
5812+ 101,
5813+ 82,
5814+ 68,
5815+ 73,
5816+ 48,
5817+ 48,
5818+ 57,
5819+ 83,
5820+ 79,
5821+ 50,
5822+ 73,
5823+ 108,
5824+ 53,
5825+ 76,
5826+ 117,
5827+ 55,
5828+ 114,
5829+ 68,
5830+ 78,
5831+ 72,
5832+ 54,
5833+ 109,
5834+ 90,
5835+ 99,
5836+ 107,
5837+ 66,
5838+ 100,
5839+ 114,
5840+ 73,
5841+ 120,
5842+ 48,
5843+ 111,
5844+ 114,
5845+ 69,
5846+ 116,
5847+ 90,
5848+ 86,
5849+ 10,
5850+ 32,
5851+ 52,
5852+ 98,
5853+ 109,
5854+ 112,
5855+ 47,
5856+ 89,
5857+ 122,
5858+ 104,
5859+ 119,
5860+ 118,
5861+ 99,
5862+ 117,
5863+ 98,
5864+ 85,
5865+ 52,
5866+ 61,
5867+ 10,
5868+ 82,
5869+ 101,
5870+ 99,
5871+ 101,
5872+ 105,
5873+ 118,
5874+ 101,
5875+ 100,
5876+ 58,
5877+ 32,
5878+ 102,
5879+ 114,
5880+ 111,
5881+ 109,
5882+ 32,
5883+ 109,
5884+ 97,
5885+ 105,
5886+ 108,
5887+ 46,
5888+ 115,
5889+ 101,
5890+ 110,
5891+ 100,
5892+ 101,
5893+ 114,
5894+ 46,
5895+ 101,
5896+ 120,
5897+ 97,
5898+ 109,
5899+ 112,
5900+ 108,
5901+ 101,
5902+ 10,
5903+ 32,
5904+ 98,
5905+ 121,
5906+ 32,
5907+ 115,
5908+ 109,
5909+ 116,
5910+ 112,
5911+ 45,
5912+ 111,
5913+ 117,
5914+ 116,
5915+ 46,
5916+ 115,
5917+ 101,
5918+ 110,
5919+ 100,
5920+ 101,
5921+ 114,
5922+ 46,
5923+ 101,
5924+ 120,
5925+ 97,
5926+ 109,
5927+ 112,
5928+ 108,
5929+ 101,
5930+ 10,
5931+ 32,
5932+ 119,
5933+ 105,
5934+ 116,
5935+ 104,
5936+ 32,
5937+ 83,
5938+ 77,
5939+ 84,
5940+ 80,
5941+ 32,
5942+ 105,
5943+ 100,
5944+ 32,
5945+ 111,
5946+ 51,
5947+ 70,
5948+ 53,
5949+ 50,
5950+ 103,
5951+ 120,
5952+ 79,
5953+ 48,
5954+ 50,
5955+ 57,
5956+ 49,
5957+ 52,
5958+ 52,
5959+ 59,
5960+ 10,
5961+ 32,
5962+ 83,
5963+ 97,
5964+ 116,
5965+ 44,
5966+ 32,
5967+ 48,
5968+ 56,
5969+ 32,
5970+ 79,
5971+ 99,
5972+ 116,
5973+ 32,
5974+ 50,
5975+ 48,
5976+ 49,
5977+ 49,
5978+ 32,
5979+ 49,
5980+ 51,
5981+ 58,
5982+ 49,
5983+ 53,
5984+ 58,
5985+ 51,
5986+ 49,
5987+ 32,
5988+ 45,
5989+ 48,
5990+ 55,
5991+ 48,
5992+ 48,
5993+ 32,
5994+ 40,
5995+ 80,
5996+ 68,
5997+ 84,
5998+ 41,
5999+ 10,
6000+ 32,
6001+ 82,
6002+ 101,
6003+ 99,
6004+ 101,
6005+ 105,
6006+ 118,
6007+ 101,
6008+ 100,
6009+ 58,
6010+ 32,
6011+ 102,
6012+ 114,
6013+ 111,
6014+ 109,
6015+ 32,
6016+ 105,
6017+ 110,
6018+ 116,
6019+ 101,
6020+ 114,
6021+ 110,
6022+ 97,
6023+ 108,
6024+ 45,
6025+ 99,
6026+ 108,
6027+ 105,
6028+ 101,
6029+ 110,
6030+ 116,
6031+ 45,
6032+ 48,
6033+ 48,
6034+ 49,
6035+ 46,
6036+ 115,
6037+ 101,
6038+ 110,
6039+ 100,
6040+ 101,
6041+ 114,
6042+ 46,
6043+ 101,
6044+ 120,
6045+ 97,
6046+ 109,
6047+ 112,
6048+ 108,
6049+ 101,
6050+ 10,
6051+ 32,
6052+ 98,
6053+ 121,
6054+ 32,
6055+ 109,
6056+ 97,
6057+ 105,
6058+ 108,
6059+ 46,
6060+ 115,
6061+ 101,
6062+ 110,
6063+ 100,
6064+ 101,
6065+ 114,
6066+ 46,
6067+ 101,
6068+ 120,
6069+ 97,
6070+ 109,
6071+ 112,
6072+ 108,
6073+ 101,
6074+ 10,
6075+ 32,
6076+ 119,
6077+ 105,
6078+ 116,
6079+ 104,
6080+ 32,
6081+ 83,
6082+ 77,
6083+ 84,
6084+ 80,
6085+ 32,
6086+ 105,
6087+ 100,
6088+ 32,
6089+ 111,
6090+ 51,
6091+ 70,
6092+ 51,
6093+ 66,
6094+ 119,
6095+ 100,
6096+ 89,
6097+ 48,
6098+ 50,
6099+ 56,
6100+ 52,
6101+ 51,
6102+ 49,
6103+ 59,
6104+ 10,
6105+ 32,
6106+ 83,
6107+ 97,
6108+ 116,
6109+ 44,
6110+ 32,
6111+ 48,
6112+ 56,
6113+ 32,
6114+ 79,
6115+ 99,
6116+ 116,
6117+ 32,
6118+ 50,
6119+ 48,
6120+ 49,
6121+ 49,
6122+ 32,
6123+ 49,
6124+ 51,
6125+ 58,
6126+ 49,
6127+ 53,
6128+ 58,
6129+ 50,
6130+ 52,
6131+ 32,
6132+ 45,
6133+ 48,
6134+ 55,
6135+ 48,
6136+ 48,
6137+ 32,
6138+ 40,
6139+ 80,
6140+ 68,
6141+ 84,
6142+ 41,
6143+ 10,
6144+ 68,
6145+ 97,
6146+ 116,
6147+ 101,
6148+ 58,
6149+ 32,
6150+ 83,
6151+ 97,
6152+ 116,
6153+ 44,
6154+ 32,
6155+ 56,
6156+ 32,
6157+ 79,
6158+ 99,
6159+ 116,
6160+ 32,
6161+ 50,
6162+ 48,
6163+ 49,
6164+ 49,
6165+ 32,
6166+ 49,
6167+ 54,
6168+ 58,
6169+ 49,
6170+ 53,
6171+ 58,
6172+ 50,
6173+ 52,
6174+ 32,
6175+ 45,
6176+ 48,
6177+ 52,
6178+ 48,
6179+ 48,
6180+ 32,
6181+ 40,
6182+ 69,
6183+ 68,
6184+ 84,
6185+ 41,
6186+ 10,
6187+ 82,
6188+ 101,
6189+ 112,
6190+ 108,
6191+ 121,
6192+ 45,
6193+ 84,
6194+ 111,
6195+ 58,
6196+ 32,
6197+ 97,
6198+ 110,
6199+ 101,
6200+ 120,
6201+ 97,
6202+ 109,
6203+ 112,
6204+ 108,
6205+ 101,
6206+ 46,
6207+ 114,
6208+ 101,
6209+ 112,
6210+ 108,
6211+ 121,
6212+ 64,
6213+ 97,
6214+ 46,
6215+ 115,
6216+ 101,
6217+ 110,
6218+ 100,
6219+ 101,
6220+ 114,
6221+ 46,
6222+ 101,
6223+ 120,
6224+ 97,
6225+ 109,
6226+ 112,
6227+ 108,
6228+ 101,
6229+ 10,
6230+ 70,
6231+ 114,
6232+ 111,
6233+ 109,
6234+ 58,
6235+ 32,
6236+ 97,
6237+ 110,
6238+ 101,
6239+ 120,
6240+ 97,
6241+ 109,
6242+ 112,
6243+ 108,
6244+ 101,
6245+ 64,
6246+ 97,
6247+ 46,
6248+ 115,
6249+ 101,
6250+ 110,
6251+ 100,
6252+ 101,
6253+ 114,
6254+ 46,
6255+ 101,
6256+ 120,
6257+ 97,
6258+ 109,
6259+ 112,
6260+ 108,
6261+ 101,
6262+ 10,
6263+ 84,
6264+ 111,
6265+ 58,
6266+ 32,
6267+ 115,
6268+ 111,
6269+ 109,
6270+ 101,
6271+ 117,
6272+ 115,
6273+ 101,
6274+ 114,
6275+ 64,
6276+ 114,
6277+ 101,
6278+ 99,
6279+ 101,
6280+ 105,
6281+ 118,
6282+ 101,
6283+ 114,
6284+ 46,
6285+ 101,
6286+ 120,
6287+ 97,
6288+ 109,
6289+ 112,
6290+ 108,
6291+ 101,
6292+ 10,
6293+ 83,
6294+ 117,
6295+ 98,
6296+ 106,
6297+ 101,
6298+ 99,
6299+ 116,
6300+ 58,
6301+ 32,
6302+ 89,
6303+ 111,
6304+ 117,
6305+ 32,
6306+ 104,
6307+ 97,
6308+ 118,
6309+ 101,
6310+ 32,
6311+ 97,
6312+ 32,
6313+ 110,
6314+ 101,
6315+ 119,
6316+ 32,
6317+ 98,
6318+ 105,
6319+ 108,
6320+ 108,
6321+ 32,
6322+ 102,
6323+ 114,
6324+ 111,
6325+ 109,
6326+ 32,
6327+ 121,
6328+ 111,
6329+ 117,
6330+ 114,
6331+ 32,
6332+ 98,
6333+ 97,
6334+ 110,
6335+ 107,
6336+ 10,
6337+ 77,
6338+ 101,
6339+ 115,
6340+ 115,
6341+ 97,
6342+ 103,
6343+ 101,
6344+ 45,
6345+ 73,
6346+ 68,
6347+ 58,
6348+ 32,
6349+ 60,
6350+ 56,
6351+ 55,
6352+ 57,
6353+ 49,
6354+ 51,
6355+ 57,
6356+ 49,
6357+ 48,
6358+ 46,
6359+ 49,
6360+ 51,
6361+ 49,
6362+ 56,
6363+ 48,
6364+ 57,
6365+ 52,
6366+ 54,
6367+ 48,
6368+ 52,
6369+ 53,
6370+ 52,
6371+ 54,
6372+ 64,
6373+ 111,
6374+ 117,
6375+ 116,
6376+ 46,
6377+ 115,
6378+ 101,
6379+ 110,
6380+ 100,
6381+ 101,
6382+ 114,
6383+ 46,
6384+ 101,
6385+ 120,
6386+ 97,
6387+ 109,
6388+ 112,
6389+ 108,
6390+ 101,
6391+ 62,
6392+ 10
6393+ ]
6394 }
6395\ No newline at end of file
6396 diff --git a/resources/schemas/dmarc-draft.xsd b/resources/schemas/dmarc-draft.xsd
6397deleted file mode 100644
6398index 3220edc..0000000
6399--- a/resources/schemas/dmarc-draft.xsd
6400+++ /dev/null
6401 @@ -1,351 +0,0 @@
6402- <?xml version="1.0"?>
6403- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6404- targetNamespace="http://dmarc.org/dmarc-xml/0.2">
6405-
6406- <!-- The time range in UTC covered by messages in this report,
6407- specified in seconds since epoch. -->
6408- <xs:complexType name="DateRangeType">
6409- <xs:all>
6410- <xs:element name="begin" type="xs:integer"
6411- minOccurs="1" maxOccurs="1"/>
6412- <xs:element name="end" type="xs:integer"
6413- minOccurs="1" maxOccurs="1"/>
6414- </xs:all>
6415- </xs:complexType>
6416-
6417-
6418- <!-- Report generator metadata. -->
6419- <!--
6420- org_name: Reporting Organization
6421- email: Contact to be used when contacting
6422- the Reporting Organization
6423- extra_contact_info: Additional contact details
6424- report_id: UUID, specified elsewhere
6425- date_range: Timestamps used when forming report data
6426- error: ?
6427- -->
6428- <xs:complexType name="ReportMetadataType">
6429- <xs:sequence>
6430- <xs:element name="org_name" type="xs:string"
6431- minOccurs="1" maxOccurs="1"/>
6432- <xs:element name="email" type="xs:string"
6433- minOccurs="1" maxOccurs="1"/>
6434- <xs:element name="extra_contact_info" type="xs:string"
6435- minOccurs="0" maxOccurs="1"/>
6436- <xs:element name="report_id" type="xs:string"
6437- minOccurs="1" maxOccurs="1"/>
6438- <xs:element name="date_range" type="DateRangeType"
6439- minOccurs="1" maxOccurs="1"/>
6440- <xs:element name="error" type="xs:string"
6441- minOccurs="0" maxOccurs="unbounded"/>
6442- </xs:sequence>
6443- </xs:complexType>
6444-
6445- <!-- Alignment mode (relaxed or strict) for DKIM and SPF. -->
6446- <xs:simpleType name="AlignmentType">
6447- <xs:restriction base="xs:string">
6448- <xs:enumeration value="r"/>
6449- <xs:enumeration value="s"/>
6450- </xs:restriction>
6451- </xs:simpleType>
6452-
6453- <!-- The policy actions specified by p and sp in the
6454- DMARC record. -->
6455- <xs:simpleType name="DispositionType">
6456- <xs:restriction base="xs:string">
6457- <xs:enumeration value="none"/>
6458- <xs:enumeration value="quarantine"/>
6459- <xs:enumeration value="reject"/>
6460- </xs:restriction>
6461- </xs:simpleType>
6462-
6463- <!-- The policy actions utilized on messages for this record. -->
6464- <!--
6465- "none": No action taken
6466- "pass": No action, passing DMARC w/enforcing policy
6467- "quarantine": Failed DMARC, message marked for quarantine
6468- "reject": Failed DMARC, marked as reject
6469- -->
6470- <xs:simpleType name="ActionDispositionType">
6471- <xs:restriction base="xs:string">
6472- <xs:enumeration value="none"/>
6473- <xs:enumeration value="pass"/>
6474- <xs:enumeration value="quarantine"/>
6475- <xs:enumeration value="reject"/>
6476- </xs:restriction>
6477-
6478- <!-- The DMARC policy that is published by the sending domain
6479- in this report. -->
6480- <xs:complexType name="PolicyPublishedType">
6481- <xs:all>
6482- <!-- The domain at which the DMARC record was found. -->
6483- <xs:element name="domain" type="xs:string"
6484- minOccurs="1" maxOccurs="1"/>
6485- <!-- The version declared in the DMARC record found. -->
6486- <xs:element name="version_published" type="xs:decimal"
6487- minOccurs="0" maxOccurs="1"/>
6488- <!-- The DKIM alignment mode. -->
6489- <xs:element name="adkim" type="AlignmentType"
6490- minOccurs="0" maxOccurs="1"/>
6491- <!-- The SPF alignment mode. -->
6492- <xs:element name="aspf" type="AlignmentType"
6493- minOccurs="0" maxOccurs="1"/>
6494- <!-- The policy published for messages from the domain. -->
6495- <xs:element name="p" type="DispositionType"
6496- minOccurs="1" maxOccurs="1"/>
6497- <!-- The policy published for messages from subdomains. -->
6498- <xs:element name="sp" type="DispositionType"
6499- minOccurs="1" maxOccurs="1"/>
6500- <!-- The percent declared in the DMARC record -->
6501- <xs:element name="testing" type="TestingType"
6502- minOccurs="0" maxOccurs="1"/>
6503- <!-- Failure reporting options in effect. -->
6504- <xs:element name="fo" type="xs:string"
6505- minOccurs="0" maxOccurs="1"/>
6506- </xs:all>
6507- </xs:complexType>
6508-
6509- <!-- Values for Testing mode attached to Policy -->
6510- <xs:simpleType name="TestingType">
6511- <xs:restriction base="xs:string">
6512- <xs:enumeration value="n"/>
6513- <xs:enumeration value="y"/>
6514- </xs:restriction>
6515- </xs:simpleType>
6516-
6517- <!-- The DMARC-aligned authentication result. -->
6518- <xs:simpleType name="DMARCResultType">
6519- <xs:restriction base="xs:string">
6520- <xs:enumeration value="pass"/>
6521- <xs:enumeration value="fail"/>
6522- </xs:restriction>
6523- </xs:simpleType>
6524-
6525- <!-- Reasons that may affect DMARC disposition or execution
6526- thereof. -->
6527- <xs:simpleType name="PolicyOverrideType">
6528- <xs:restriction base="xs:string">
6529- <xs:enumeration value="forwarded"/>
6530- <xs:enumeration value="sampled_out"/>
6531- <xs:enumeration value="trusted_forwarder"/>
6532- <xs:enumeration value="mailing_list"/>
6533- <xs:enumeration value="local_policy"/>
6534- <xs:enumeration value="other"/>
6535- </xs:restriction>
6536- </xs:simpleType>
6537-
6538- <!-- How do we allow report generators to include new
6539- classes of override reasons if they want to be more
6540- specific than "other"? -->
6541- <xs:complexType name="PolicyOverrideReason">
6542- <xs:all>
6543- <xs:element name="type" type="PolicyOverrideType"
6544- minOccurs="1" maxOccurs="1"/>
6545- <xs:element name="comment" type="xs:string"
6546- minOccurs="0" maxOccurs="1"/>
6547- </xs:all>
6548- </xs:complexType>
6549-
6550- <!-- Taking into account everything else in the record,
6551- the results of applying DMARC. If alignment fails
6552- and the policy applied does not match the domain's
6553- configured policy, the reason element MUST be specified -->
6554-
6555- <xs:complexType name="PolicyEvaluatedType">
6556- <xs:sequence>
6557- <xs:element name="disposition" type="ActionDispositionType"/>
6558- <xs:element name="dkim" type="DMARCResultType"/>
6559- <xs:element name="spf" type="DMARCResultType"/>
6560- <xs:element name="reason" type="PolicyOverrideReason"
6561- minOccurs="0" maxOccurs="unbounded"/>
6562- </xs:sequence>
6563- </xs:complexType>
6564-
6565- <!-- Credit to Roger L. Costello for IPv4 regex
6566- http://mailman.ic.ac.uk/pipermail/xml-dev/1999-December/
6567- 018018.html -->
6568- <!-- Credit to java2s.com for IPv6 regex
6569- http://www.java2s.com/Code/XML/XML-Schema/
6570- IPv6addressesareeasiertodescribeusingasimpleregex.htm -->
6571- <xs:simpleType name="IPAddress">
6572- <xs:restriction base="xs:string">
6573- <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}
6574- (1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])|
6575- ([A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}"/>
6576- </xs:restriction>
6577- </xs:simpleType>
6578-
6579- <xs:complexType name="RowType">
6580- <xs:all>
6581- <!-- The connecting IP. -->
6582- <xs:element name="source_ip" type="IPAddress"
6583- minOccurs="1" maxOccurs="1"/>
6584- <!-- The number of messages for which the
6585- PolicyEvaluatedType was applied. -->
6586- <xs:element name="count" type="xs:integer"
6587- minOccurs="1" maxOccurs="1"/>
6588- <!-- The DMARC disposition applied to matching
6589- messages. -->
6590- <xs:element name="policy_evaluated"
6591- type="PolicyEvaluatedType"
6592- minOccurs="1" maxOccurs="1"/>
6593- <xs:element name="extensions" type="ExtensionType"
6594- minOccurs="0" maxOccurs"unbounded"/>
6595- </xs:all>
6596- </xs:complexType>
6597-
6598- <xs:complexType name="IdentifierType">
6599- <xs:all>
6600- <!-- The envelope recipient domain. -->
6601- <xs:element name="envelope_to" type="xs:string"
6602- minOccurs="0"/>
6603- <!-- The RFC5321.MailFrom domain. -->
6604- <xs:element name="envelope_from" type="xs:string"
6605- minOccurs="1"/>
6606- <!-- The RFC5322.From domain. -->
6607- <xs:element name="header_from" type="xs:string"
6608- minOccurs="1"/>
6609- </xs:all>
6610- </xs:complexType>
6611-
6612- <!-- DKIM verification result, according to RFC 7001
6613- Section 2.6.1. -->
6614- <xs:simpleType name="DKIMResultType">
6615- <xs:restriction base="xs:string">
6616- <xs:enumeration value="none"/>
6617- <xs:enumeration value="pass"/>
6618- <xs:enumeration value="fail"/>
6619- <xs:enumeration value="policy"/>
6620- <xs:enumeration value="neutral"/>
6621- <xs:enumeration value="temperror"/>
6622- <xs:enumeration value="permerror"/>
6623- </xs:restriction>
6624- </xs:simpleType>
6625-
6626- <xs:complexType name="DKIMAuthResultType">
6627- <xs:all>
6628- <!-- The "d=" parameter in the signature. -->
6629- <xs:element name="domain" type="xs:string"
6630- minOccurs="1" maxOccurs="1"/>
6631- <!-- The "s=" parameter in the signature. -->
6632- <xs:element name="selector" type="xs:string"
6633- minOccurs="1" maxOccurs="1"/>
6634- <!-- The DKIM verification result. -->
6635- <xs:element name="result" type="DKIMResultType"
6636- minOccurs="1" maxOccurs="1"/>
6637- <!-- Any extra information (e.g., from
6638- Authentication-Results). -->
6639- <xs:element name="human_result" type="xs:string"
6640- minOccurs="0" maxOccurs="1"/>
6641- </xs:all>
6642- </xs:complexType>
6643-
6644- <!-- SPF domain scope. -->
6645- <xs:simpleType name="SPFDomainScope">
6646- <xs:restriction base="xs:string">
6647- <xs:enumeration value="helo"/>
6648- <xs:enumeration value="mfrom"/>
6649- </xs:restriction>
6650- </xs:simpleType>
6651-
6652- <!-- SPF result. -->
6653- <xs:simpleType name="SPFResultType">
6654- <xs:restriction base="xs:string">
6655- <xs:enumeration value="none"/>
6656- <xs:enumeration value="neutral"/>
6657- <xs:enumeration value="pass"/>
6658- <xs:enumeration value="fail"/>
6659- <xs:enumeration value="softfail"/>
6660- <!-- "TempError" commonly implemented as "unknown". -->
6661- <xs:enumeration value="temperror"/>
6662- <!-- "PermError" commonly implemented as "error". -->
6663- <xs:enumeration value="permerror"/>
6664- </xs:restriction>
6665- </xs:simpleType>
6666-
6667- <xs:complexType name="SPFAuthResultType">
6668- <xs:all>
6669- <!-- The checked domain. -->
6670- <xs:element name="domain" type="xs:string"
6671- minOccurs="1" maxOccurs="1"/>
6672- <!-- The scope of the checked domain. -->
6673- <xs:element name="scope" type="SPFDomainScope"
6674- minOccurs="0" maxOccurs="1"/>
6675- <!-- The SPF verification result. -->
6676- <xs:element name="result" type="SPFResultType"
6677- minOccurs="1" maxOccurs="1"/>
6678- <!-- Any extra information
6679- (e.g., from Authentication-Results).
6680- The information in the field below should be for a
6681- person to be provided with additional information
6682- that may be useful when debugging SPF authentication
6683- issues. This could include broken records, invalid
6684- DNS responses, etc.
6685- -->
6686- <xs:element name="human_result" type="xs:string"
6687- minOccurs="0" maxOccurs="1"/>
6688- </xs:all>
6689- </xs:complexType>
6690-
6691- <!-- This element contains DKIM and SPF results, uninterpreted
6692- with respect to DMARC. -->
6693- <xs:complexType name="AuthResultType">
6694- <xs:sequence>
6695- <!-- There may be no DKIM signatures, or multiple DKIM
6696- signatures. -->
6697- <xs:element name="dkim" type="DKIMAuthResultType"
6698- minOccurs="0" maxOccurs="unbounded"/>
6699- <!-- There will always be at least one SPF result. -->
6700- <xs:element name="spf" type="SPFAuthResultType" minOccurs="1"
6701- maxOccurs="unbounded"/>
6702- </xs:sequence>
6703- </xs:complexType>
6704-
6705- <!-- This element contains all the authentication results that
6706- were evaluated by the receiving system for the given set of
6707- messages. -->
6708- <xs:complexType name="RecordType">
6709- <xs:sequence>
6710- <xs:element name="row" type="RowType"/>
6711- <xs:element name="identifiers" type="IdentifierType"
6712- minOccurs="1" maxOccurs="1"/>
6713- <xs:element name="auth_results" type="AuthResultType"
6714- minOccurs="1" maxOccurs="1"/>
6715- </xs:sequence>
6716- </xs:complexType>
6717-
6718- <xs:complexType name="ExtensionType">
6719- <xs:sequence>
6720- <xs:element name="extension" type="xs:string"
6721- minOccurs="0" maxOccurs="1"/>
6722- <xs:sequence minOccurs="1" maxOccurs="1">
6723- <xs:attribute name="name" use="required"/>
6724- <xs:attribute name="definition" use="required"/>
6725- </xs:sequence>
6726- </xs:sequence>
6727- </xs:complexType>
6728-
6729-
6730- <!--
6731- version: Version of the report format
6732- -->
6733- <!-- Parent -->
6734- <xs:element name="feedback">
6735- <xs:complexType>
6736- <xs:sequence>
6737- <xs:element name="version"
6738- minOccurs="0" maxOccurs="1" type="xs:decimal"/>
6739- <xs:element name="report_metadata"
6740- minOccurs="1" maxOccurs="1"
6741- type="ReportMetadataType"/>
6742- <xs:element name="policy_published"
6743- minOccurs="1" maxOccurs="1"
6744- type="PolicyPublishedType"/>
6745- <xs:element name="record" type="RecordType"
6746- minOccurs="1" maxOccurs="unbounded"/>
6747- <xs:element name="extensions" type="ExtensionType"
6748- minOccurs="0" maxOccurs="unbounded"/>
6749- </xs:sequence>
6750- </xs:complexType>
6751- </xs:element>
6752- </xs:schema>
6753 diff --git a/resources/schemas/dmarc-rfc7489.xsd b/resources/schemas/dmarc-rfc7489.xsd
6754deleted file mode 100644
6755index 47f5c5b..0000000
6756--- a/resources/schemas/dmarc-rfc7489.xsd
6757+++ /dev/null
6758 @@ -1,263 +0,0 @@
6759- <?xml version="1.0"?>
6760- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6761- targetNamespace="http://dmarc.org/dmarc-xml/0.1">
6762-
6763- <!-- The time range in UTC covered by messages in this report,
6764- specified in seconds since epoch. -->
6765- <xs:complexType name="DateRangeType">
6766- <xs:all>
6767- <xs:element name="begin" type="xs:integer"/>
6768- <xs:element name="end" type="xs:integer"/>
6769- </xs:all>
6770- </xs:complexType>
6771-
6772- <!-- Report generator metadata. -->
6773- <xs:complexType name="ReportMetadataType">
6774- <xs:sequence>
6775- <xs:element name="org_name" type="xs:string"/>
6776- <xs:element name="email" type="xs:string"/>
6777- <xs:element name="extra_contact_info" type="xs:string"
6778- minOccurs="0"/>
6779- <xs:element name="report_id" type="xs:string"/>
6780- <xs:element name="date_range" type="DateRangeType"/>
6781- <xs:element name="error" type="xs:string" minOccurs="0"
6782- maxOccurs="unbounded"/>
6783- </xs:sequence>
6784- </xs:complexType>
6785-
6786- <!-- Alignment mode (relaxed or strict) for DKIM and SPF. -->
6787- <xs:simpleType name="AlignmentType">
6788- <xs:restriction base="xs:string">
6789- <xs:enumeration value="r"/>
6790- <xs:enumeration value="s"/>
6791- </xs:restriction>
6792- </xs:simpleType>
6793-
6794- <!-- The policy actions specified by p and sp in the
6795- DMARC record. -->
6796- <xs:simpleType name="DispositionType">
6797- <xs:restriction base="xs:string">
6798- <xs:enumeration value="none"/>
6799- <xs:enumeration value="quarantine"/>
6800- <xs:enumeration value="reject"/>
6801- </xs:restriction>
6802- </xs:simpleType>
6803-
6804- <!-- The DMARC policy that applied to the messages in
6805- this report. -->
6806- <xs:complexType name="PolicyPublishedType">
6807- <xs:all>
6808- <!-- The domain at which the DMARC record was found. -->
6809- <xs:element name="domain" type="xs:string"/>
6810- <!-- The DKIM alignment mode. -->
6811- <xs:element name="adkim" type="AlignmentType"
6812- minOccurs="0"/>
6813- <!-- The SPF alignment mode. -->
6814- <xs:element name="aspf" type="AlignmentType"
6815- minOccurs="0"/>
6816- <!-- The policy to apply to messages from the domain. -->
6817- <xs:element name="p" type="DispositionType"/>
6818- <!-- The policy to apply to messages from subdomains. -->
6819- <xs:element name="sp" type="DispositionType"/>
6820- <!-- The percent of messages to which policy applies. -->
6821- <xs:element name="pct" type="xs:integer"/>
6822- <!-- Failure reporting options in effect. -->
6823- <xs:element name="fo" type="xs:string"/>
6824- </xs:all>
6825- </xs:complexType>
6826-
6827- <!-- The DMARC-aligned authentication result. -->
6828- <xs:simpleType name="DMARCResultType">
6829- <xs:restriction base="xs:string">
6830- <xs:enumeration value="pass"/>
6831- <xs:enumeration value="fail"/>
6832- </xs:restriction>
6833- </xs:simpleType>
6834-
6835- <!-- Reasons that may affect DMARC disposition or execution
6836- thereof. -->
6837- <xs:simpleType name="PolicyOverrideType">
6838- <xs:restriction base="xs:string">
6839- <xs:enumeration value="forwarded"/>
6840- <xs:enumeration value="sampled_out"/>
6841- <xs:enumeration value="trusted_forwarder"/>
6842- <xs:enumeration value="mailing_list"/>
6843- <xs:enumeration value="local_policy"/>
6844- <xs:enumeration value="other"/>
6845- </xs:restriction>
6846- </xs:simpleType>
6847-
6848- <!-- How do we allow report generators to include new
6849- classes of override reasons if they want to be more
6850- specific than "other"? -->
6851- <xs:complexType name="PolicyOverrideReason">
6852- <xs:all>
6853- <xs:element name="type" type="PolicyOverrideType"/>
6854- <xs:element name="comment" type="xs:string"
6855- minOccurs="0"/>
6856- </xs:all>
6857- </xs:complexType>
6858-
6859- <!-- Taking into account everything else in the record,
6860- the results of applying DMARC. -->
6861- <xs:complexType name="PolicyEvaluatedType">
6862- <xs:sequence>
6863- <xs:element name="disposition" type="DispositionType"/>
6864- <xs:element name="dkim" type="DMARCResultType"/>
6865- <xs:element name="spf" type="DMARCResultType"/>
6866- <xs:element name="reason" type="PolicyOverrideReason"
6867- minOccurs="0" maxOccurs="unbounded"/>
6868- </xs:sequence>
6869- </xs:complexType>
6870- <!-- Credit to Roger L. Costello for IPv4 regex
6871- http://mailman.ic.ac.uk/pipermail/xml-dev/1999-December/
6872- 018018.html -->
6873- <!-- Credit to java2s.com for IPv6 regex
6874- http://www.java2s.com/Code/XML/XML-Schema/
6875- IPv6addressesareeasiertodescribeusingasimpleregex.htm -->
6876- <xs:simpleType name="IPAddress">
6877- <xs:restriction base="xs:string">
6878- <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}
6879- (1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])|
6880- ([A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}"/>
6881- </xs:restriction>
6882- </xs:simpleType>
6883-
6884- <xs:complexType name="RowType">
6885- <xs:all>
6886- <!-- The connecting IP. -->
6887- <xs:element name="source_ip" type="IPAddress"/>
6888- <!-- The number of matching messages. -->
6889- <xs:element name="count" type="xs:integer"/>
6890- <!-- The DMARC disposition applying to matching
6891- messages. -->
6892- <xs:element name="policy_evaluated"
6893- type="PolicyEvaluatedType"
6894- minOccurs="1"/>
6895- </xs:all>
6896- </xs:complexType>
6897-
6898- <xs:complexType name="IdentifierType">
6899- <xs:all>
6900- <!-- The envelope recipient domain. -->
6901- <xs:element name="envelope_to" type="xs:string"
6902- minOccurs="0"/>
6903- <!-- The RFC5321.MailFrom domain. -->
6904- <xs:element name="envelope_from" type="xs:string"
6905- minOccurs="1"/>
6906- <!-- The RFC5322.From domain. -->
6907- <xs:element name="header_from" type="xs:string"
6908- minOccurs="1"/>
6909- </xs:all>
6910- </xs:complexType>
6911-
6912- <!-- DKIM verification result, according to RFC 7001
6913- Section 2.6.1. -->
6914- <xs:simpleType name="DKIMResultType">
6915- <xs:restriction base="xs:string">
6916- <xs:enumeration value="none"/>
6917- <xs:enumeration value="pass"/>
6918- <xs:enumeration value="fail"/>
6919- <xs:enumeration value="policy"/>
6920- <xs:enumeration value="neutral"/>
6921- <xs:enumeration value="temperror"/>
6922- <xs:enumeration value="permerror"/>
6923- </xs:restriction>
6924- </xs:simpleType>
6925-
6926- <xs:complexType name="DKIMAuthResultType">
6927- <xs:all>
6928- <!-- The "d=" parameter in the signature. -->
6929- <xs:element name="domain" type="xs:string"
6930- minOccurs="1"/>
6931- <!-- The "s=" parameter in the signature. -->
6932- <xs:element name="selector" type="xs:string"
6933- minOccurs="0"/>
6934- <!-- The DKIM verification result. -->
6935- <xs:element name="result" type="DKIMResultType"
6936- minOccurs="1"/>
6937- <!-- Any extra information (e.g., from
6938- Authentication-Results). -->
6939- <xs:element name="human_result" type="xs:string"
6940- minOccurs="0"/>
6941- </xs:all>
6942- </xs:complexType>
6943-
6944- <!-- SPF domain scope. -->
6945- <xs:simpleType name="SPFDomainScope">
6946- <xs:restriction base="xs:string">
6947- <xs:enumeration value="helo"/>
6948- <xs:enumeration value="mfrom"/>
6949- </xs:restriction>
6950- </xs:simpleType>
6951-
6952- <!-- SPF result. -->
6953- <xs:simpleType name="SPFResultType">
6954- <xs:restriction base="xs:string">
6955- <xs:enumeration value="none"/>
6956- <xs:enumeration value="neutral"/>
6957- <xs:enumeration value="pass"/>
6958- <xs:enumeration value="fail"/>
6959- <xs:enumeration value="softfail"/>
6960- <!-- "TempError" commonly implemented as "unknown". -->
6961- <xs:enumeration value="temperror"/>
6962- <!-- "PermError" commonly implemented as "error". -->
6963- <xs:enumeration value="permerror"/>
6964- </xs:restriction>
6965- </xs:simpleType>
6966-
6967- <xs:complexType name="SPFAuthResultType">
6968- <xs:all>
6969- <!-- The checked domain. -->
6970- <xs:element name="domain" type="xs:string" minOccurs="1"/>
6971- <!-- The scope of the checked domain. -->
6972- <xs:element name="scope" type="SPFDomainScope" minOccurs="1"/>
6973- <!-- The SPF verification result. -->
6974- <xs:element name="result" type="SPFResultType"
6975- minOccurs="1"/>
6976- </xs:all>
6977- </xs:complexType>
6978-
6979- <!-- This element contains DKIM and SPF results, uninterpreted
6980- with respect to DMARC. -->
6981- <xs:complexType name="AuthResultType">
6982- <xs:sequence>
6983- <!-- There may be no DKIM signatures, or multiple DKIM
6984- signatures. -->
6985- <xs:element name="dkim" type="DKIMAuthResultType"
6986- minOccurs="0" maxOccurs="unbounded"/>
6987- <!-- There will always be at least one SPF result. -->
6988- <xs:element name="spf" type="SPFAuthResultType" minOccurs="1"
6989- maxOccurs="unbounded"/>
6990- </xs:sequence>
6991- </xs:complexType>
6992-
6993- <!-- This element contains all the authentication results that
6994- were evaluated by the receiving system for the given set of
6995- messages. -->
6996- <xs:complexType name="RecordType">
6997- <xs:sequence>
6998- <xs:element name="row" type="RowType"/>
6999- <xs:element name="identifiers" type="IdentifierType"/>
7000- <xs:element name="auth_results" type="AuthResultType"/>
7001- </xs:sequence>
7002- </xs:complexType>
7003-
7004- <!-- Parent -->
7005- <xs:element name="feedback">
7006- <xs:complexType>
7007- <xs:sequence>
7008- <xs:element name="version"
7009- type="xs:decimal"/>
7010- <xs:element name="report_metadata"
7011- type="ReportMetadataType"/>
7012- <xs:element name="policy_published"
7013- type="PolicyPublishedType"/>
7014- <xs:element name="record" type="RecordType"
7015- maxOccurs="unbounded"/>
7016- </xs:sequence>
7017- </xs:complexType>
7018- </xs:element>
7019- </xs:schema>
7020-
7021-
7022 diff --git a/src/arc/headers.rs b/src/arc/headers.rs
7023index 81842ce..15c6515 100644
7024--- a/src/arc/headers.rs
7025+++ b/src/arc/headers.rs
7026 @@ -1,3 +1,13 @@
7027+ /*
7028+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7029+ *
7030+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7031+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7032+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7033+ * option. This file may not be copied, modified, or distributed
7034+ * except according to those terms.
7035+ */
7036+
7037 use std::io::Write;
7038
7039 use crate::{
7040 diff --git a/src/arc/mod.rs b/src/arc/mod.rs
7041index b905e18..ed4485a 100644
7042--- a/src/arc/mod.rs
7043+++ b/src/arc/mod.rs
7044 @@ -1,3 +1,13 @@
7045+ /*
7046+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7047+ *
7048+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7049+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7050+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7051+ * option. This file may not be copied, modified, or distributed
7052+ * except according to those terms.
7053+ */
7054+
7055 pub mod headers;
7056 pub mod parse;
7057 pub mod seal;
7058 @@ -12,7 +22,7 @@ use crate::{
7059 };
7060
7061 #[derive(Debug, PartialEq, Eq, Clone, Default)]
7062- pub(crate) struct Signature<'x> {
7063+ pub struct Signature<'x> {
7064 pub(crate) i: u32,
7065 pub(crate) a: Algorithm,
7066 pub(crate) d: Cow<'x, str>,
7067 @@ -29,7 +39,7 @@ pub(crate) struct Signature<'x> {
7068 }
7069
7070 #[derive(Debug, PartialEq, Eq, Clone, Default)]
7071- pub(crate) struct Seal<'x> {
7072+ pub struct Seal<'x> {
7073 pub(crate) i: u32,
7074 pub(crate) a: Algorithm,
7075 pub(crate) b: Vec<u8>,
7076 @@ -40,7 +50,7 @@ pub(crate) struct Seal<'x> {
7077 }
7078
7079 #[derive(Debug, PartialEq, Eq, Clone)]
7080- pub(crate) struct Results {
7081+ pub struct Results {
7082 pub(crate) i: u32,
7083 }
7084
7085 diff --git a/src/arc/parse.rs b/src/arc/parse.rs
7086index 858f9a6..8089ded 100644
7087--- a/src/arc/parse.rs
7088+++ b/src/arc/parse.rs
7089 @@ -1,3 +1,13 @@
7090+ /*
7091+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7092+ *
7093+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7094+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7095+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7096+ * option. This file may not be copied, modified, or distributed
7097+ * except according to those terms.
7098+ */
7099+
7100 use mail_parser::decoders::base64::base64_decode_stream;
7101
7102 use crate::{
7103 diff --git a/src/arc/seal.rs b/src/arc/seal.rs
7104index e7b727e..d60aa39 100644
7105--- a/src/arc/seal.rs
7106+++ b/src/arc/seal.rs
7107 @@ -1,3 +1,13 @@
7108+ /*
7109+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7110+ *
7111+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7112+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7113+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7114+ * option. This file may not be copied, modified, or distributed
7115+ * except according to those terms.
7116+ */
7117+
7118 use std::{borrow::Cow, io::Write, time::SystemTime};
7119
7120 use ed25519_dalek::Signer;
7121 diff --git a/src/arc/verify.rs b/src/arc/verify.rs
7122index 05fa9d2..db793d3 100644
7123--- a/src/arc/verify.rs
7124+++ b/src/arc/verify.rs
7125 @@ -1,3 +1,13 @@
7126+ /*
7127+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7128+ *
7129+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7130+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7131+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7132+ * option. This file may not be copied, modified, or distributed
7133+ * except according to those terms.
7134+ */
7135+
7136 use std::time::SystemTime;
7137
7138 use sha1::Sha1;
7139 diff --git a/src/common/auth_results.rs b/src/common/auth_results.rs
7140index ca7575e..301b728 100644
7141--- a/src/common/auth_results.rs
7142+++ b/src/common/auth_results.rs
7143 @@ -1,3 +1,13 @@
7144+ /*
7145+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7146+ *
7147+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7148+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7149+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7150+ * option. This file may not be copied, modified, or distributed
7151+ * except according to those terms.
7152+ */
7153+
7154 use std::{borrow::Cow, fmt::Write, net::IpAddr};
7155
7156 use mail_builder::encoders::base64::base64_encode;
7157 diff --git a/src/common/base32.rs b/src/common/base32.rs
7158index f240f51..0e8fbca 100644
7159--- a/src/common/base32.rs
7160+++ b/src/common/base32.rs
7161 @@ -1,3 +1,13 @@
7162+ /*
7163+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7164+ *
7165+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7166+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7167+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7168+ * option. This file may not be copied, modified, or distributed
7169+ * except according to those terms.
7170+ */
7171+
7172 pub(crate) static BASE32_ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
7173
7174 pub(crate) struct Base32Writer {
7175 diff --git a/src/common/headers.rs b/src/common/headers.rs
7176index aa5009d..ff45eaa 100644
7177--- a/src/common/headers.rs
7178+++ b/src/common/headers.rs
7179 @@ -1,3 +1,13 @@
7180+ /*
7181+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7182+ *
7183+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7184+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7185+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7186+ * option. This file may not be copied, modified, or distributed
7187+ * except according to those terms.
7188+ */
7189+
7190 use std::{
7191 io::Write,
7192 iter::{Enumerate, Peekable},
7193 diff --git a/src/common/lru.rs b/src/common/lru.rs
7194index afb3155..7462211 100644
7195--- a/src/common/lru.rs
7196+++ b/src/common/lru.rs
7197 @@ -1,3 +1,13 @@
7198+ /*
7199+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7200+ *
7201+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7202+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7203+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7204+ * option. This file may not be copied, modified, or distributed
7205+ * except according to those terms.
7206+ */
7207+
7208 use std::{borrow::Borrow, hash::Hash, time::Instant};
7209
7210 use parking_lot::Mutex;
7211 diff --git a/src/common/message.rs b/src/common/message.rs
7212index ec53937..f5793b8 100644
7213--- a/src/common/message.rs
7214+++ b/src/common/message.rs
7215 @@ -1,3 +1,13 @@
7216+ /*
7217+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7218+ *
7219+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7220+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7221+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7222+ * option. This file may not be copied, modified, or distributed
7223+ * except according to those terms.
7224+ */
7225+
7226 use mail_parser::{parsers::MessageStream, HeaderValue};
7227 use sha1::Sha1;
7228 use sha2::Sha256;
7229 diff --git a/src/common/mod.rs b/src/common/mod.rs
7230index 30b7c8a..8ba3e43 100644
7231--- a/src/common/mod.rs
7232+++ b/src/common/mod.rs
7233 @@ -1,3 +1,13 @@
7234+ /*
7235+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7236+ *
7237+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7238+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7239+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7240+ * option. This file may not be copied, modified, or distributed
7241+ * except according to those terms.
7242+ */
7243+
7244 pub mod auth_results;
7245 pub mod base32;
7246 pub mod headers;
7247 diff --git a/src/common/parse.rs b/src/common/parse.rs
7248index f54f744..0022afc 100644
7249--- a/src/common/parse.rs
7250+++ b/src/common/parse.rs
7251 @@ -1,3 +1,13 @@
7252+ /*
7253+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7254+ *
7255+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7256+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7257+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7258+ * option. This file may not be copied, modified, or distributed
7259+ * except according to those terms.
7260+ */
7261+
7262 use std::{borrow::Cow, slice::Iter};
7263
7264 use mail_parser::decoders::quoted_printable::quoted_printable_decode_char;
7265 @@ -23,7 +33,7 @@ pub(crate) const X: u64 = b'x' as u64;
7266 pub(crate) const Y: u64 = b'y' as u64;
7267 pub(crate) const Z: u64 = b'z' as u64;
7268
7269- pub(crate) trait TxtRecordParser: Sized {
7270+ pub trait TxtRecordParser: Sized {
7271 fn parse(record: &[u8]) -> crate::Result<Self>;
7272 }
7273
7274 diff --git a/src/common/resolver.rs b/src/common/resolver.rs
7275index a04454b..f4e05e1 100644
7276--- a/src/common/resolver.rs
7277+++ b/src/common/resolver.rs
7278 @@ -1,3 +1,13 @@
7279+ /*
7280+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7281+ *
7282+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7283+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7284+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7285+ * option. This file may not be copied, modified, or distributed
7286+ * except according to those terms.
7287+ */
7288+
7289 use std::{
7290 borrow::Cow,
7291 net::{IpAddr, Ipv4Addr, Ipv6Addr},
7292 @@ -13,7 +23,7 @@ use trust_dns_resolver::{
7293 };
7294
7295 use crate::{
7296- dkim::{Atps, DomainKey},
7297+ dkim::{Atps, DomainKey, DomainKeyReport},
7298 dmarc::DMARC,
7299 spf::{Macro, SPF},
7300 Error, Policy, Resolver, Txt, MX,
7301 @@ -334,6 +344,12 @@ impl From<DomainKey> for Txt {
7302 }
7303 }
7304
7305+ impl From<DomainKeyReport> for Txt {
7306+ fn from(v: DomainKeyReport) -> Self {
7307+ Txt::DomainKeyReport(v.into())
7308+ }
7309+ }
7310+
7311 impl From<Atps> for Txt {
7312 fn from(v: Atps) -> Self {
7313 Txt::Atps(v.into())
7314 @@ -381,6 +397,16 @@ impl UnwrapTxtRecord for DomainKey {
7315 }
7316 }
7317
7318+ impl UnwrapTxtRecord for DomainKeyReport {
7319+ fn unwrap_txt(txt: Txt) -> crate::Result<Arc<Self>> {
7320+ match txt {
7321+ Txt::DomainKeyReport(a) => Ok(a),
7322+ Txt::Error(err) => Err(err),
7323+ _ => Err(Error::Io("Invalid record type".to_string())),
7324+ }
7325+ }
7326+ }
7327+
7328 impl UnwrapTxtRecord for Atps {
7329 fn unwrap_txt(txt: Txt) -> crate::Result<Arc<Self>> {
7330 match txt {
7331 diff --git a/src/common/verify.rs b/src/common/verify.rs
7332index cde5be3..e4a075e 100644
7333--- a/src/common/verify.rs
7334+++ b/src/common/verify.rs
7335 @@ -1,3 +1,13 @@
7336+ /*
7337+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7338+ *
7339+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7340+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7341+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7342+ * option. This file may not be copied, modified, or distributed
7343+ * except according to those terms.
7344+ */
7345+
7346 use rsa::PaddingScheme;
7347 use sha1::Sha1;
7348 use sha2::Sha256;
7349 diff --git a/src/dkim/canonicalize.rs b/src/dkim/canonicalize.rs
7350index c905e0d..ef34159 100644
7351--- a/src/dkim/canonicalize.rs
7352+++ b/src/dkim/canonicalize.rs
7353 @@ -1,6 +1,5 @@
7354 /*
7355- * Copyright Stalwart Labs Ltd. See the COPYING
7356- * file at the top-level directory of this distribution.
7357+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7358 *
7359 * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7360 * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7361 diff --git a/src/dkim/headers.rs b/src/dkim/headers.rs
7362index 616b170..08b1b0b 100644
7363--- a/src/dkim/headers.rs
7364+++ b/src/dkim/headers.rs
7365 @@ -1,3 +1,13 @@
7366+ /*
7367+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7368+ *
7369+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7370+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7371+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7372+ * option. This file may not be copied, modified, or distributed
7373+ * except according to those terms.
7374+ */
7375+
7376 use std::{
7377 fmt::{Display, Formatter},
7378 io::Write,
7379 diff --git a/src/dkim/mod.rs b/src/dkim/mod.rs
7380index a4f69c2..f68671e 100644
7381--- a/src/dkim/mod.rs
7382+++ b/src/dkim/mod.rs
7383 @@ -1,6 +1,5 @@
7384 /*
7385- * Copyright Stalwart Labs Ltd. See the COPYING
7386- * file at the top-level directory of this distribution.
7387+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7388 *
7389 * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7390 * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7391 @@ -77,15 +76,15 @@ impl Default for Canonicalization {
7392 }
7393
7394 #[derive(Debug, PartialEq, Eq, Clone)]
7395- pub(crate) struct DomainKey {
7396+ pub struct DomainKey {
7397 pub(crate) v: Version,
7398 pub(crate) p: PublicKey,
7399 pub(crate) f: u64,
7400 }
7401
7402 #[derive(Debug, PartialEq, Eq, Clone)]
7403- pub(crate) struct Report {
7404- pub(crate) ra: Option<String>,
7405+ pub struct DomainKeyReport {
7406+ pub(crate) ra: String,
7407 pub(crate) rp: u8,
7408 pub(crate) rr: u8,
7409 pub(crate) rs: Option<String>,
7410 @@ -249,6 +248,10 @@ impl<'x> DKIMOutput<'x> {
7411 pub fn signature(&self) -> Option<&Signature> {
7412 self.signature
7413 }
7414+
7415+ pub fn failure_report_addr(&self) -> Option<&str> {
7416+ self.report.as_deref()
7417+ }
7418 }
7419
7420 impl<'x> ARCOutput<'x> {
7421 diff --git a/src/dkim/parse.rs b/src/dkim/parse.rs
7422index 614c550..f07345c 100644
7423--- a/src/dkim/parse.rs
7424+++ b/src/dkim/parse.rs
7425 @@ -1,3 +1,13 @@
7426+ /*
7427+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7428+ *
7429+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7430+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7431+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7432+ * option. This file may not be copied, modified, or distributed
7433+ * except according to those terms.
7434+ */
7435+
7436 use std::slice::Iter;
7437
7438 use mail_parser::decoders::base64::base64_decode_stream;
7439 @@ -10,8 +20,8 @@ use crate::{
7440 };
7441
7442 use super::{
7443- Algorithm, Atps, Canonicalization, DomainKey, Flag, HashAlgorithm, PublicKey, Report, Service,
7444- Signature, Version, RR_DNS, RR_OTHER, RR_POLICY,
7445+ Algorithm, Atps, Canonicalization, DomainKey, DomainKeyReport, Flag, HashAlgorithm, PublicKey,
7446+ Service, Signature, Version, RR_DNS, RR_OTHER, RR_POLICY,
7447 };
7448
7449 const ATPSH: u64 = (b'a' as u64)
7450 @@ -312,12 +322,12 @@ impl TxtRecordParser for DomainKey {
7451 }
7452 }
7453
7454- impl TxtRecordParser for Report {
7455+ impl TxtRecordParser for DomainKeyReport {
7456 #[allow(clippy::while_let_on_iterator)]
7457 fn parse(header: &[u8]) -> crate::Result<Self> {
7458 let mut header = header.iter();
7459- let mut record = Report {
7460- ra: None,
7461+ let mut record = DomainKeyReport {
7462+ ra: String::new(),
7463 rp: 100,
7464 rr: u8::MAX,
7465 rs: None,
7466 @@ -326,7 +336,7 @@ impl TxtRecordParser for Report {
7467 while let Some(key) = header.key() {
7468 match key {
7469 RA => {
7470- record.ra = header.text_qp(true).into();
7471+ record.ra = header.text_qp(true);
7472 }
7473 RP => {
7474 record.rp = std::cmp::min(header.number().unwrap_or(0), 100) as u8;
7475 @@ -378,7 +388,7 @@ impl TxtRecordParser for Report {
7476 }
7477 }
7478
7479- if record.ra.is_some() {
7480+ if !record.ra.is_empty() {
7481 Ok(record)
7482 } else {
7483 Err(Error::InvalidRecordType)
7484 @@ -471,10 +481,10 @@ mod test {
7485 use crate::{
7486 common::parse::TxtRecordParser,
7487 dkim::{
7488- Algorithm, Canonicalization, DomainKey, PublicKey, Report, Signature, Version, RR_DNS,
7489- RR_EXPIRATION, RR_OTHER, RR_POLICY, RR_SIGNATURE, RR_UNKNOWN_TAG, RR_VERIFICATION,
7490- R_FLAG_MATCH_DOMAIN, R_FLAG_TESTING, R_HASH_SHA1, R_HASH_SHA256, R_SVC_ALL,
7491- R_SVC_EMAIL,
7492+ Algorithm, Canonicalization, DomainKey, DomainKeyReport, PublicKey, Signature, Version,
7493+ RR_DNS, RR_EXPIRATION, RR_OTHER, RR_POLICY, RR_SIGNATURE, RR_UNKNOWN_TAG,
7494+ RR_VERIFICATION, R_FLAG_MATCH_DOMAIN, R_FLAG_TESTING, R_HASH_SHA1, R_HASH_SHA256,
7495+ R_SVC_ALL, R_SVC_EMAIL,
7496 },
7497 };
7498
7499 @@ -743,8 +753,8 @@ mod test {
7500 for (record, expected_result) in [
7501 (
7502 "ra=dkim-errors; rp=97; rr=v:x",
7503- Report {
7504- ra: "dkim-errors".to_string().into(),
7505+ DomainKeyReport {
7506+ ra: "dkim-errors".to_string(),
7507 rp: 97,
7508 rr: RR_VERIFICATION | RR_EXPIRATION,
7509 rs: None,
7510 @@ -752,8 +762,8 @@ mod test {
7511 ),
7512 (
7513 "ra=postmaster; rp=1; rr=d:o:p:s:u:v:x; rs=Error=20Message;",
7514- Report {
7515- ra: "postmaster".to_string().into(),
7516+ DomainKeyReport {
7517+ ra: "postmaster".to_string(),
7518 rp: 1,
7519 rr: RR_DNS
7520 | RR_OTHER
7521 @@ -766,7 +776,10 @@ mod test {
7522 },
7523 ),
7524 ] {
7525- assert_eq!(Report::parse(record.as_bytes()).unwrap(), expected_result);
7526+ assert_eq!(
7527+ DomainKeyReport::parse(record.as_bytes()).unwrap(),
7528+ expected_result
7529+ );
7530 }
7531 }
7532 }
7533 diff --git a/src/dkim/sign.rs b/src/dkim/sign.rs
7534index 360d114..4bd6c99 100644
7535--- a/src/dkim/sign.rs
7536+++ b/src/dkim/sign.rs
7537 @@ -1,6 +1,5 @@
7538 /*
7539- * Copyright Stalwart Labs Ltd. See the COPYING
7540- * file at the top-level directory of this distribution.
7541+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7542 *
7543 * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7544 * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7545 @@ -218,8 +217,8 @@ mod test {
7546
7547 use crate::{
7548 common::parse::TxtRecordParser,
7549- dkim::{Atps, Canonicalization, DomainKey, HashAlgorithm, Signature},
7550- AuthenticatedMessage, DKIMResult, PrivateKey, Resolver,
7551+ dkim::{Atps, Canonicalization, DomainKey, DomainKeyReport, HashAlgorithm, Signature},
7552+ AuthenticatedMessage, DKIMOutput, DKIMResult, PrivateKey, Resolver,
7553 };
7554
7555 const RSA_PRIVATE_KEY: &str = r#"-----BEGIN RSA PRIVATE KEY-----
7556 @@ -315,8 +314,27 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7557 )
7558 .unwrap();
7559
7560+ // Create resolver
7561+ let resolver = Resolver::new_system_conf().unwrap();
7562+ resolver.txt_add(
7563+ "default._domainkey.example.com.".to_string(),
7564+ DomainKey::parse(RSA_PUBLIC_KEY.as_bytes()).unwrap(),
7565+ Instant::now() + Duration::new(3600, 0),
7566+ );
7567+ resolver.txt_add(
7568+ "ed._domainkey.example.com.".to_string(),
7569+ DomainKey::parse(ED25519_PUBLIC_KEY.as_bytes()).unwrap(),
7570+ Instant::now() + Duration::new(3600, 0),
7571+ );
7572+ resolver.txt_add(
7573+ "_report._domainkey.example.com.".to_string(),
7574+ DomainKeyReport::parse("ra=dkim-failures; rp=100; rr=x".as_bytes()).unwrap(),
7575+ Instant::now() + Duration::new(3600, 0),
7576+ );
7577+
7578 // Test RSA-SHA256 relaxed/relaxed
7579 verify(
7580+ &resolver,
7581 Signature::new()
7582 .headers(["From", "To", "Subject"])
7583 .domain("example.com")
7584 @@ -325,29 +343,27 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7585 .sign(message.as_bytes(), &pk_rsa)
7586 .unwrap(),
7587 message,
7588- RSA_PUBLIC_KEY,
7589- "",
7590 Ok(()),
7591 )
7592 .await;
7593
7594 // Test ED25519-SHA256 relaxed/relaxed
7595 verify(
7596+ &resolver,
7597 Signature::new()
7598 .headers(["From", "To", "Subject"])
7599 .domain("example.com")
7600- .selector("default")
7601+ .selector("ed")
7602 .sign(message.as_bytes(), &pk_ed)
7603 .unwrap(),
7604 message,
7605- ED25519_PUBLIC_KEY,
7606- "",
7607 Ok(()),
7608 )
7609 .await;
7610
7611 // Test RSA-SHA256 simple/simple with duplicated headers
7612 verify(
7613+ &resolver,
7614 Signature::new()
7615 .headers([
7616 "From",
7617 @@ -363,14 +379,13 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7618 .sign(message_multiheader.as_bytes(), &pk_rsa)
7619 .unwrap(),
7620 message_multiheader,
7621- RSA_PUBLIC_KEY,
7622- "",
7623 Ok(()),
7624 )
7625 .await;
7626
7627 // Test RSA-SHA256 simple/relaxed with fixed body length
7628 verify(
7629+ &resolver,
7630 Signature::new()
7631 .headers(["From", "To", "Subject"])
7632 .domain("example.com")
7633 @@ -380,14 +395,13 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7634 .sign(message.as_bytes(), &pk_rsa)
7635 .unwrap(),
7636 &(message.to_string() + "\r\n----- Mailing list"),
7637- RSA_PUBLIC_KEY,
7638- "",
7639 Ok(()),
7640 )
7641 .await;
7642
7643 // Test AUID not matching domain
7644 verify(
7645+ &resolver,
7646 Signature::new()
7647 .headers(["From", "To", "Subject"])
7648 .domain("example.com")
7649 @@ -396,30 +410,33 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7650 .sign(message.as_bytes(), &pk_rsa)
7651 .unwrap(),
7652 message,
7653- RSA_PUBLIC_KEY,
7654- "",
7655 Err(super::Error::FailedAUIDMatch),
7656 )
7657 .await;
7658
7659- // Test expired signature
7660- verify(
7661+ // Test expired signature and reporting
7662+ let r = verify(
7663+ &resolver,
7664 Signature::new()
7665 .headers(["From", "To", "Subject"])
7666 .domain("example.com")
7667 .selector("default")
7668 .expiration(12345)
7669+ .reporting(true)
7670 .sign_::<Sha256>(message.as_bytes(), &pk_rsa, 12345)
7671 .unwrap(),
7672 message,
7673- RSA_PUBLIC_KEY,
7674- "",
7675 Err(super::Error::SignatureExpired),
7676 )
7677- .await;
7678+ .await
7679+ .pop()
7680+ .unwrap()
7681+ .report;
7682+ assert_eq!(r.as_deref(), Some("dkim-failures@example.com"));
7683
7684 // Verify ATPS (failure)
7685 verify(
7686+ &resolver,
7687 Signature::new()
7688 .headers(["From", "To", "Subject"])
7689 .domain("example.com")
7690 @@ -429,14 +446,18 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7691 .sign_::<Sha256>(message.as_bytes(), &pk_rsa, 12345)
7692 .unwrap(),
7693 message,
7694- RSA_PUBLIC_KEY,
7695- "",
7696 Err(super::Error::DNSRecordNotFound(ResponseCode::NXDomain)),
7697 )
7698 .await;
7699
7700 // Verify ATPS (success)
7701+ resolver.txt_add(
7702+ "UN42N5XOV642KXRXRQIYANHCOUPGQL5LT4WTBKYT2IJFLBWODFDQ._atps.example.com.".to_string(),
7703+ Atps::parse(b"v=ATPS1;").unwrap(),
7704+ Instant::now() + Duration::new(3600, 0),
7705+ );
7706 verify(
7707+ &resolver,
7708 Signature::new()
7709 .headers(["From", "To", "Subject"])
7710 .domain("example.com")
7711 @@ -446,14 +467,18 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7712 .sign_::<Sha256>(message.as_bytes(), &pk_rsa, 12345)
7713 .unwrap(),
7714 message,
7715- RSA_PUBLIC_KEY,
7716- "UN42N5XOV642KXRXRQIYANHCOUPGQL5LT4WTBKYT2IJFLBWODFDQ._atps.example.com.",
7717 Ok(()),
7718 )
7719 .await;
7720
7721 // Verify ATPS (success - no hash)
7722+ resolver.txt_add(
7723+ "example.com._atps.example.com.".to_string(),
7724+ Atps::parse(b"v=ATPS1;").unwrap(),
7725+ Instant::now() + Duration::new(3600, 0),
7726+ );
7727 verify(
7728+ &resolver,
7729 Signature::new()
7730 .headers(["From", "To", "Subject"])
7731 .domain("example.com")
7732 @@ -462,38 +487,21 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7733 .sign_::<Sha256>(message.as_bytes(), &pk_rsa, 12345)
7734 .unwrap(),
7735 message,
7736- RSA_PUBLIC_KEY,
7737- "example.com._atps.example.com.",
7738 Ok(()),
7739 )
7740 .await;
7741 }
7742
7743- async fn verify(
7744- signature: Signature<'_>,
7745- message_: &str,
7746- public_key: &str,
7747- atps: &str,
7748+ async fn verify<'x>(
7749+ resolver: &Resolver,
7750+ signature: Signature<'x>,
7751+ message_: &'x str,
7752 expect: Result<(), super::Error>,
7753- ) {
7754+ ) -> Vec<DKIMOutput<'x>> {
7755 let mut message = Vec::with_capacity(message_.len() + 100);
7756 signature.write(&mut message, true).unwrap();
7757 message.extend_from_slice(message_.as_bytes());
7758- //println!("[{}]", String::from_utf8_lossy(&message));
7759
7760- let resolver = Resolver::new_system_conf().unwrap();
7761- resolver.txt_add(
7762- "default._domainkey.example.com.".to_string(),
7763- DomainKey::parse(public_key.as_bytes()).unwrap(),
7764- Instant::now() + Duration::new(3600, 0),
7765- );
7766- if !atps.is_empty() {
7767- resolver.txt_add(
7768- atps.to_string(),
7769- Atps::parse(b"v=ATPS1;").unwrap(),
7770- Instant::now() + Duration::new(3600, 0),
7771- );
7772- }
7773 let message = AuthenticatedMessage::parse(&message).unwrap();
7774 let dkim = resolver.verify_dkim(&message).await;
7775
7776 @@ -505,5 +513,14 @@ GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc=
7777 ) if hdr == err => (),
7778 (result, expect) => panic!("Expected {:?} but got {:?}.", expect, result),
7779 }
7780+
7781+ dkim.into_iter()
7782+ .map(|d| DKIMOutput {
7783+ result: d.result,
7784+ signature: None,
7785+ report: d.report,
7786+ is_atps: d.is_atps,
7787+ })
7788+ .collect()
7789 }
7790 }
7791 diff --git a/src/dkim/verify.rs b/src/dkim/verify.rs
7792index 6b22ad6..649a76c 100644
7793--- a/src/dkim/verify.rs
7794+++ b/src/dkim/verify.rs
7795 @@ -1,3 +1,13 @@
7796+ /*
7797+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7798+ *
7799+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7800+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7801+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7802+ * option. This file may not be copied, modified, or distributed
7803+ * except according to those terms.
7804+ */
7805+
7806 use std::{borrow::Cow, io::Write, time::SystemTime};
7807
7808 use sha1::{Digest, Sha1};
7809 @@ -5,10 +15,13 @@ use sha2::Sha256;
7810
7811 use crate::{
7812 common::{base32::Base32Writer, verify::VerifySignature},
7813- AuthenticatedMessage, DKIMOutput, Error, Resolver,
7814+ is_within_pct, AuthenticatedMessage, DKIMOutput, DKIMResult, Error, Resolver,
7815 };
7816
7817- use super::{Algorithm, Atps, DomainKey, Flag, HashAlgorithm, Signature};
7818+ use super::{
7819+ Algorithm, Atps, DomainKey, DomainKeyReport, Flag, HashAlgorithm, Signature, RR_DNS,
7820+ RR_EXPIRATION, RR_OTHER, RR_SIGNATURE, RR_VERIFICATION,
7821+ };
7822
7823 impl Resolver {
7824 /// Verifies DKIM headers of an RFC5322 message.
7825 @@ -33,12 +46,17 @@ impl Resolver {
7826 now: u64,
7827 ) -> Vec<DKIMOutput<'x>> {
7828 let mut output = Vec::with_capacity(message.dkim_headers.len());
7829+ let mut report_requested = false;
7830
7831 // Validate DKIM headers
7832 for header in &message.dkim_headers {
7833 // Validate body hash
7834 let signature = match &header.header {
7835 Ok(signature) => {
7836+ if signature.r {
7837+ report_requested = true;
7838+ }
7839+
7840 if signature.x == 0 || (signature.x > signature.t && signature.x > now) {
7841 signature
7842 } else {
7843 @@ -157,6 +175,80 @@ impl Resolver {
7844 // Verification successful
7845 output.push(DKIMOutput::pass().with_signature(signature));
7846 }
7847+
7848+ // Handle reports
7849+ if report_requested {
7850+ for dkim in &mut output {
7851+ // Process signatures with errors that requested reports
7852+ let signature = if let Some(signature) = &dkim.signature {
7853+ if signature.r && dkim.result != DKIMResult::Pass {
7854+ signature
7855+ } else {
7856+ continue;
7857+ }
7858+ } else {
7859+ continue;
7860+ };
7861+
7862+ // Obtain ._domainkey TXT record
7863+ let record = if let Ok(record) = self
7864+ .txt_lookup::<DomainKeyReport>(format!("_report._domainkey.{}.", signature.d))
7865+ .await
7866+ {
7867+ if is_within_pct(record.rp) {
7868+ record
7869+ } else {
7870+ continue;
7871+ }
7872+ } else {
7873+ continue;
7874+ };
7875+
7876+ // Set report address
7877+ dkim.report = match &dkim.result() {
7878+ DKIMResult::Neutral(err)
7879+ | DKIMResult::Fail(err)
7880+ | DKIMResult::PermError(err)
7881+ | DKIMResult::TempError(err) => {
7882+ let send_report = match err {
7883+ Error::CryptoError(_)
7884+ | Error::Io(_)
7885+ | Error::FailedVerification
7886+ | Error::FailedBodyHashMatch
7887+ | Error::FailedAUIDMatch => (record.rr & RR_VERIFICATION) != 0,
7888+ Error::Base64
7889+ | Error::UnsupportedVersion
7890+ | Error::UnsupportedAlgorithm
7891+ | Error::UnsupportedCanonicalization
7892+ | Error::UnsupportedKeyType
7893+ | Error::IncompatibleAlgorithms => (record.rr & RR_SIGNATURE) != 0,
7894+ Error::SignatureExpired => (record.rr & RR_EXPIRATION) != 0,
7895+ Error::DNSError
7896+ | Error::DNSRecordNotFound(_)
7897+ | Error::InvalidRecordType
7898+ | Error::ParseError
7899+ | Error::RevokedPublicKey => (record.rr & RR_DNS) != 0,
7900+ Error::MissingParameters
7901+ | Error::NoHeadersFound
7902+ | Error::ARCChainTooLong
7903+ | Error::ARCInvalidInstance(_)
7904+ | Error::ARCInvalidCV
7905+ | Error::ARCHasHeaderTag
7906+ | Error::ARCBrokenChain
7907+ | Error::DMARCNotAligned => (record.rr & RR_OTHER) != 0,
7908+ };
7909+
7910+ if send_report {
7911+ format!("{}@{}", record.ra, signature.d).into()
7912+ } else {
7913+ None
7914+ }
7915+ }
7916+ DKIMResult::None | DKIMResult::Pass => None,
7917+ };
7918+ }
7919+ }
7920+
7921 output
7922 }
7923 }
7924 @@ -299,7 +391,7 @@ mod test {
7925 /*if !file_name.to_str().unwrap().contains("002") {
7926 continue;
7927 }*/
7928- println!("file {}", file_name.to_str().unwrap());
7929+ println!("DKIM verifying {}", file_name.to_str().unwrap());
7930
7931 let test = String::from_utf8(fs::read(&file_name).unwrap()).unwrap();
7932 let (dns_records, raw_message) = test.split_once("\n\n").unwrap();
7933 diff --git a/src/dmarc/mod.rs b/src/dmarc/mod.rs
7934index 5723446..291bc2f 100644
7935--- a/src/dmarc/mod.rs
7936+++ b/src/dmarc/mod.rs
7937 @@ -1,3 +1,13 @@
7938+ /*
7939+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
7940+ *
7941+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7942+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7943+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
7944+ * option. This file may not be copied, modified, or distributed
7945+ * except according to those terms.
7946+ */
7947+
7948 use std::{fmt::Display, sync::Arc};
7949
7950 use crate::{DMARCOutput, DMARCResult, Error, Version};
7951 @@ -25,8 +35,8 @@ pub struct DMARC {
7952
7953 #[derive(Debug, Clone, PartialEq, Eq)]
7954 #[allow(clippy::upper_case_acronyms)]
7955- pub(crate) struct URI {
7956- uri: Vec<u8>,
7957+ pub struct URI {
7958+ uri: String,
7959 max_size: usize,
7960 }
7961
7962 @@ -44,7 +54,7 @@ pub(crate) enum Psd {
7963 }
7964
7965 #[derive(Debug, Clone, PartialEq, Eq)]
7966- pub(crate) enum Report {
7967+ pub enum Report {
7968 All,
7969 Any,
7970 Dkim,
7971 @@ -53,7 +63,7 @@ pub(crate) enum Report {
7972 }
7973
7974 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
7975- pub(crate) enum Policy {
7976+ pub enum Policy {
7977 None,
7978 Quarantine,
7979 Reject,
7980 @@ -76,7 +86,7 @@ impl URI {
7981 #[cfg(test)]
7982 pub fn new(uri: impl Into<String>, max_size: usize) -> Self {
7983 URI {
7984- uri: uri.into().into_bytes(),
7985+ uri: uri.into(),
7986 max_size,
7987 }
7988 }
7989 @@ -124,6 +134,56 @@ impl DMARCOutput {
7990 self.record = record.into();
7991 self
7992 }
7993+
7994+ pub fn domain(&self) -> &str {
7995+ &self.domain
7996+ }
7997+
7998+ pub fn policy(&self) -> Policy {
7999+ self.policy
8000+ }
8001+
8002+ pub fn dkim_result(&self) -> &DMARCResult {
8003+ &self.dkim_result
8004+ }
8005+
8006+ pub fn spf_result(&self) -> &DMARCResult {
8007+ &self.spf_result
8008+ }
8009+
8010+ pub fn dmarc_record(&self) -> Option<&DMARC> {
8011+ self.record.as_deref()
8012+ }
8013+
8014+ /// Returns the failure reporting options
8015+ pub fn failure_report(&self) -> Option<Report> {
8016+ // Send failure reports
8017+ match &self.record {
8018+ Some(record)
8019+ if !record.ruf.is_empty()
8020+ && (self.dkim_result != DMARCResult::Pass
8021+ && matches!(record.fo, Report::Any | Report::Dkim | Report::DkimSpf))
8022+ || (self.spf_result != DMARCResult::Pass
8023+ && matches!(record.fo, Report::Any | Report::Spf | Report::DkimSpf))
8024+ || (self.dkim_result != DMARCResult::Pass
8025+ && self.spf_result != DMARCResult::Pass
8026+ && record.fo == Report::All) =>
8027+ {
8028+ Some(record.fo.clone())
8029+ }
8030+ _ => None,
8031+ }
8032+ }
8033+ }
8034+
8035+ impl DMARC {
8036+ pub fn ruf(&self) -> &[URI] {
8037+ &self.ruf
8038+ }
8039+
8040+ pub fn rua(&self) -> &[URI] {
8041+ &self.rua
8042+ }
8043 }
8044
8045 impl Display for Policy {
8046 diff --git a/src/dmarc/parse.rs b/src/dmarc/parse.rs
8047index 8bcdde5..7fd2e5f 100644
8048--- a/src/dmarc/parse.rs
8049+++ b/src/dmarc/parse.rs
8050 @@ -1,3 +1,13 @@
8051+ /*
8052+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8053+ *
8054+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8055+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8056+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8057+ * option. This file may not be copied, modified, or distributed
8058+ * except according to those terms.
8059+ */
8060+
8061 use std::slice::Iter;
8062
8063 use mail_parser::decoders::quoted_printable::quoted_printable_decode_char;
8064 @@ -168,6 +178,8 @@ impl DMARCParser for Iter<'_, u8> {
8065 fn uris(&mut self) -> crate::Result<Vec<URI>> {
8066 let mut uris = Vec::new();
8067 let mut uri = Vec::with_capacity(16);
8068+ let mut found_uri = false;
8069+ let mut found_at = false;
8070 let mut size: usize = 0;
8071
8072 'outer: while let Some(&ch) = self.next() {
8073 @@ -179,7 +191,17 @@ impl DMARCParser for Iter<'_, u8> {
8074 if ch.is_ascii_hexdigit() {
8075 if hex1 != 0 {
8076 if let Some(ch) = quoted_printable_decode_char(hex1, ch) {
8077- uri.push(ch);
8078+ match ch {
8079+ b'@' => {
8080+ found_at = true;
8081+ uri.push(ch);
8082+ }
8083+ _ => {
8084+ if !ch.is_ascii_whitespace() {
8085+ uri.push(ch);
8086+ }
8087+ }
8088+ }
8089 }
8090 break;
8091 } else {
8092 @@ -224,10 +246,14 @@ impl DMARCParser for Iter<'_, u8> {
8093 }
8094 b',' => {
8095 if !uri.is_empty() {
8096- uris.push(URI {
8097- uri: uri.to_vec(),
8098- max_size: size,
8099- });
8100+ if found_uri && found_at {
8101+ uris.push(URI {
8102+ uri: String::from_utf8_lossy(&uri).to_lowercase(),
8103+ max_size: size,
8104+ });
8105+ }
8106+ found_uri = false;
8107+ found_at = false;
8108 uri.clear();
8109 }
8110 size = 0;
8111 @@ -243,17 +269,29 @@ impl DMARCParser for Iter<'_, u8> {
8112 }
8113 b',' => {
8114 if !uri.is_empty() {
8115- uris.push(URI {
8116- uri: uri.to_vec(),
8117- max_size: size,
8118- });
8119+ if found_uri && found_at {
8120+ uris.push(URI {
8121+ uri: String::from_utf8_lossy(&uri).to_lowercase(),
8122+ max_size: size,
8123+ });
8124+ }
8125+ found_uri = false;
8126+ found_at = false;
8127 uri.clear();
8128 }
8129 size = 0;
8130 }
8131+ b':' if !found_uri => {
8132+ found_uri = uri.eq_ignore_ascii_case(b"mailto");
8133+ uri.clear();
8134+ }
8135 b';' => {
8136 break;
8137 }
8138+ b'@' => {
8139+ found_at = true;
8140+ uri.push(ch);
8141+ }
8142 _ => {
8143 if !ch.is_ascii_whitespace() {
8144 uri.push(ch);
8145 @@ -262,9 +300,9 @@ impl DMARCParser for Iter<'_, u8> {
8146 }
8147 }
8148
8149- if !uri.is_empty() {
8150+ if !uri.is_empty() && found_uri && found_at {
8151 uris.push(URI {
8152- uri,
8153+ uri: String::from_utf8_lossy(&uri).to_lowercase(),
8154 max_size: size,
8155 })
8156 }
8157 @@ -322,7 +360,7 @@ mod test {
8158 pct: 100,
8159 rf: Format::Afrf as u8,
8160 ri: 86400,
8161- rua: vec![URI::new("mailto:dmarc-feedback@example.com", 0)],
8162+ rua: vec![URI::new("dmarc-feedback@example.com", 0)],
8163 ruf: vec![],
8164 sp: Policy::None,
8165 psd: Psd::Default,
8166 @@ -344,8 +382,8 @@ mod test {
8167 pct: 100,
8168 rf: Format::Afrf as u8,
8169 ri: 86400,
8170- rua: vec![URI::new("mailto:dmarc-feedback@example.com", 0)],
8171- ruf: vec![URI::new("mailto:auth-reports@example.com", 0)],
8172+ rua: vec![URI::new("dmarc-feedback@example.com", 0)],
8173+ ruf: vec![URI::new("auth-reports@example.com", 0)],
8174 sp: Policy::None,
8175 psd: Psd::Default,
8176 t: false,
8177 @@ -368,8 +406,8 @@ mod test {
8178 ri: 86400,
8179 ruf: vec![],
8180 rua: vec![
8181- URI::new("mailto:dmarc-feedback@example.com", 0),
8182- URI::new("mailto:tld-test@thirdparty.example.net", 10 * 1024 * 1024),
8183+ URI::new("dmarc-feedback@example.com", 0),
8184+ URI::new("tld-test@thirdparty.example.net", 10 * 1024 * 1024),
8185 ],
8186 sp: Policy::Quarantine,
8187 psd: Psd::Default,
8188 @@ -391,7 +429,7 @@ mod test {
8189 pct: 100,
8190 rf: Format::Afrf as u8,
8191 ri: 86400,
8192- rua: vec![URI::new("mailto:dmarc-feedback@example.com", 0)],
8193+ rua: vec![URI::new("dmarc-feedback@example.com", 0)],
8194 ruf: vec![],
8195 sp: Policy::Quarantine,
8196 psd: Psd::Default,
8197 @@ -415,8 +453,8 @@ mod test {
8198 rf: Format::Afrf as u8,
8199 ri: 3600,
8200 rua: vec![
8201- URI::new("mailto:dmarc-feedback@example.com", 10 * 1024),
8202- URI::new("mailto:user @example.com", 2 * 1024 * 1024 * 1024),
8203+ URI::new("dmarc-feedback@example.com", 10 * 1024),
8204+ URI::new("user@example.com", 2 * 1024 * 1024 * 1024),
8205 ],
8206 ruf: vec![],
8207 sp: Policy::Reject,
8208 @@ -440,8 +478,8 @@ mod test {
8209 rf: Format::Afrf as u8,
8210 ri: 86400,
8211 rua: vec![
8212- URI::new("mailto:dmarc-feedback@example.com", 0),
8213- URI::new("mailto:tld-test@thirdparty.example.net", 0),
8214+ URI::new("dmarc-feedback@example.com", 0),
8215+ URI::new("tld-test@thirdparty.example.net", 0),
8216 ],
8217 ruf: vec![],
8218 sp: Policy::Quarantine,
8219 diff --git a/src/dmarc/verify.rs b/src/dmarc/verify.rs
8220index 50d5ccf..8c8d30c 100644
8221--- a/src/dmarc/verify.rs
8222+++ b/src/dmarc/verify.rs
8223 @@ -1,3 +1,13 @@
8224+ /*
8225+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8226+ *
8227+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8228+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8229+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8230+ * option. This file may not be copied, modified, or distributed
8231+ * except according to those terms.
8232+ */
8233+
8234 use std::sync::Arc;
8235
8236 use crate::{
8237 @@ -5,7 +15,7 @@ use crate::{
8238 SPFOutput, SPFResult,
8239 };
8240
8241- use super::{Alignment, DMARC};
8242+ use super::{Alignment, DMARC, URI};
8243
8244 impl Resolver {
8245 pub async fn verify_dmarc(
8246 @@ -28,11 +38,8 @@ impl Resolver {
8247 }
8248 }
8249 }
8250-
8251- let has_dkim_pass = dkim_output.iter().any(|o| o.result == DKIMResult::Pass);
8252- if from_domain.is_empty() || (spf_output.result != SPFResult::Pass && !has_dkim_pass) {
8253- // No domain found or no mechanism passed, skip DMARC.
8254- return DMARCOutput::default().with_domain(from_domain);
8255+ if from_domain.is_empty() {
8256+ return DMARCOutput::default();
8257 }
8258
8259 // Obtain DMARC policy
8260 @@ -56,44 +63,87 @@ impl Resolver {
8261 record: None,
8262 };
8263
8264- // Check SPF alignment
8265- let from_subdomain = format!(".{}", from_domain);
8266- if spf_output.result == SPFResult::Pass {
8267- output.spf_result = if mail_from_domain == from_domain {
8268- DMARCResult::Pass
8269- } else if dmarc.aspf == Alignment::Relaxed
8270- && mail_from_domain.ends_with(&from_subdomain)
8271- || from_domain.ends_with(&format!(".{}", mail_from_domain))
8272- {
8273- output.policy = dmarc.sp;
8274- DMARCResult::Pass
8275- } else {
8276- DMARCResult::Fail(Error::DMARCNotAligned)
8277- };
8278+ let has_dkim_pass = dkim_output.iter().any(|o| o.result == DKIMResult::Pass);
8279+ if spf_output.result == SPFResult::Pass || has_dkim_pass {
8280+ // Check SPF alignment
8281+ let from_subdomain = format!(".{}", from_domain);
8282+ if spf_output.result == SPFResult::Pass {
8283+ output.spf_result = if mail_from_domain == from_domain {
8284+ DMARCResult::Pass
8285+ } else if dmarc.aspf == Alignment::Relaxed
8286+ && mail_from_domain.ends_with(&from_subdomain)
8287+ || from_domain.ends_with(&format!(".{}", mail_from_domain))
8288+ {
8289+ output.policy = dmarc.sp;
8290+ DMARCResult::Pass
8291+ } else {
8292+ DMARCResult::Fail(Error::DMARCNotAligned)
8293+ };
8294+ }
8295+
8296+ // Check DKIM alignment
8297+ if has_dkim_pass {
8298+ output.dkim_result = if dkim_output.iter().any(|o| {
8299+ o.result == DKIMResult::Pass && o.signature.as_ref().unwrap().d.eq(from_domain)
8300+ }) {
8301+ DMARCResult::Pass
8302+ } else if dmarc.adkim == Alignment::Relaxed
8303+ && dkim_output.iter().any(|o| {
8304+ o.result == DKIMResult::Pass
8305+ && (o.signature.as_ref().unwrap().d.ends_with(&from_subdomain)
8306+ || from_domain
8307+ .ends_with(&format!(".{}", o.signature.as_ref().unwrap().d)))
8308+ })
8309+ {
8310+ output.policy = dmarc.sp;
8311+ DMARCResult::Pass
8312+ } else {
8313+ if dkim_output.iter().any(|o| {
8314+ o.result == DKIMResult::Pass
8315+ && (o.signature.as_ref().unwrap().d.ends_with(&from_subdomain)
8316+ || from_domain
8317+ .ends_with(&format!(".{}", o.signature.as_ref().unwrap().d)))
8318+ }) {
8319+ output.policy = dmarc.sp;
8320+ }
8321+ DMARCResult::Fail(Error::DMARCNotAligned)
8322+ };
8323+ }
8324 }
8325
8326- // Check DKIM alignment
8327- if has_dkim_pass {
8328- output.dkim_result = if dkim_output.iter().any(|o| {
8329- o.result == DKIMResult::Pass && o.signature.as_ref().unwrap().d.eq(from_domain)
8330- }) {
8331- DMARCResult::Pass
8332- } else if dmarc.adkim == Alignment::Relaxed
8333- && dkim_output.iter().any(|o| {
8334- o.result == DKIMResult::Pass
8335- && (o.signature.as_ref().unwrap().d.ends_with(&from_subdomain)
8336- || from_domain
8337- .ends_with(&format!(".{}", o.signature.as_ref().unwrap().d)))
8338- })
8339+ output.with_record(dmarc)
8340+ }
8341+
8342+ pub async fn verify_dmarc_report_address<'x>(
8343+ &self,
8344+ domain: &str,
8345+ addresses: &'x [URI],
8346+ ) -> Option<Vec<&'x URI>> {
8347+ let mut result = Vec::with_capacity(addresses.len());
8348+ for address in addresses {
8349+ if address.uri.ends_with(domain)
8350+ || match self
8351+ .txt_lookup::<DMARC>(format!(
8352+ "{}.report.dmarc.{}.",
8353+ domain,
8354+ address
8355+ .uri
8356+ .rsplit_once('@')
8357+ .map(|(_, d)| d)
8358+ .unwrap_or_default()
8359+ ))
8360+ .await
8361+ {
8362+ Ok(_) => true,
8363+ Err(Error::DNSError) => return None,
8364+ _ => false,
8365+ }
8366 {
8367- output.policy = dmarc.sp;
8368- DMARCResult::Pass
8369- } else {
8370- DMARCResult::Fail(Error::DMARCNotAligned)
8371- };
8372+ result.push(address);
8373+ }
8374 }
8375
8376- output.with_record(dmarc)
8377+ result.into()
8378 }
8379
8380 async fn dmarc_tree_walk(&self, domain: &str) -> crate::Result<Option<Arc<DMARC>>> {
8381 @@ -134,3 +184,187 @@ impl Resolver {
8382 Ok(None)
8383 }
8384 }
8385+
8386+ #[cfg(test)]
8387+ mod test {
8388+ use std::time::{Duration, Instant};
8389+
8390+ use crate::{
8391+ common::parse::TxtRecordParser,
8392+ dkim::Signature,
8393+ dmarc::{Policy, DMARC, URI},
8394+ AuthenticatedMessage, DKIMOutput, DKIMResult, DMARCResult, Error, Resolver, SPFOutput,
8395+ SPFResult,
8396+ };
8397+
8398+ #[tokio::test]
8399+ async fn dmarc_verify() {
8400+ let resolver = Resolver::new_system_conf().unwrap();
8401+
8402+ for (
8403+ dmarc_dns,
8404+ dmarc,
8405+ message,
8406+ mail_from_domain,
8407+ signature_domain,
8408+ dkim,
8409+ spf,
8410+ expect_dkim,
8411+ expect_spf,
8412+ policy,
8413+ ) in [
8414+ // Strict - Pass
8415+ (
8416+ "_dmarc.example.org.",
8417+ concat!(
8418+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=s; adkim=s; fo=1;",
8419+ "rua=mailto:dmarc-feedback@example.org"
8420+ ),
8421+ "From: hello@example.org\r\n\r\n",
8422+ "example.org",
8423+ "example.org",
8424+ DKIMResult::Pass,
8425+ SPFResult::Pass,
8426+ DMARCResult::Pass,
8427+ DMARCResult::Pass,
8428+ Policy::Reject,
8429+ ),
8430+ // Relaxed - Pass
8431+ (
8432+ "_dmarc.example.org.",
8433+ concat!(
8434+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=r; adkim=r; fo=1;",
8435+ "rua=mailto:dmarc-feedback@example.org"
8436+ ),
8437+ "From: hello@example.org\r\n\r\n",
8438+ "subdomain.example.org",
8439+ "subdomain.example.org",
8440+ DKIMResult::Pass,
8441+ SPFResult::Pass,
8442+ DMARCResult::Pass,
8443+ DMARCResult::Pass,
8444+ Policy::Quarantine,
8445+ ),
8446+ // Strict - Fail
8447+ (
8448+ "_dmarc.example.org.",
8449+ concat!(
8450+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=s; adkim=s; fo=1;",
8451+ "rua=mailto:dmarc-feedback@example.org"
8452+ ),
8453+ "From: hello@example.org\r\n\r\n",
8454+ "subdomain.example.org",
8455+ "subdomain.example.org",
8456+ DKIMResult::Pass,
8457+ SPFResult::Pass,
8458+ DMARCResult::Fail(Error::DMARCNotAligned),
8459+ DMARCResult::Fail(Error::DMARCNotAligned),
8460+ Policy::Quarantine,
8461+ ),
8462+ // Strict - Pass with tree walk
8463+ (
8464+ "_dmarc.example.org.",
8465+ concat!(
8466+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=s; adkim=s; fo=1;",
8467+ "rua=mailto:dmarc-feedback@example.org"
8468+ ),
8469+ "From: hello@a.b.c.example.org\r\n\r\n",
8470+ "a.b.c.example.org",
8471+ "a.b.c.example.org",
8472+ DKIMResult::Pass,
8473+ SPFResult::Pass,
8474+ DMARCResult::Pass,
8475+ DMARCResult::Pass,
8476+ Policy::Reject,
8477+ ),
8478+ // Relaxed - Pass with tree walk
8479+ (
8480+ "_dmarc.c.example.org.",
8481+ concat!(
8482+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=r; adkim=r; fo=1;",
8483+ "rua=mailto:dmarc-feedback@example.org"
8484+ ),
8485+ "From: hello@a.b.c.example.org\r\n\r\n",
8486+ "example.org",
8487+ "example.org",
8488+ DKIMResult::Pass,
8489+ SPFResult::Pass,
8490+ DMARCResult::Pass,
8491+ DMARCResult::Pass,
8492+ Policy::Quarantine,
8493+ ),
8494+ // Failed mechanisms
8495+ (
8496+ "_dmarc.example.org.",
8497+ concat!(
8498+ "v=DMARC1; p=reject; sp=quarantine; np=None; aspf=s; adkim=s; fo=1;",
8499+ "rua=mailto:dmarc-feedback@example.org"
8500+ ),
8501+ "From: hello@example.org\r\n\r\n",
8502+ "example.org",
8503+ "example.org",
8504+ DKIMResult::Fail(Error::SignatureExpired),
8505+ SPFResult::Fail,
8506+ DMARCResult::None,
8507+ DMARCResult::None,
8508+ Policy::Reject,
8509+ ),
8510+ ] {
8511+ resolver.txt_add(
8512+ dmarc_dns,
8513+ DMARC::parse(dmarc.as_bytes()).unwrap(),
8514+ Instant::now() + Duration::new(3200, 0),
8515+ );
8516+
8517+ let auth_message = AuthenticatedMessage::parse(message.as_bytes()).unwrap();
8518+ let signature = Signature {
8519+ d: signature_domain.into(),
8520+ ..Default::default()
8521+ };
8522+ let dkim = DKIMOutput {
8523+ result: dkim,
8524+ signature: (&signature).into(),
8525+ report: None,
8526+ is_atps: false,
8527+ };
8528+ let spf = SPFOutput {
8529+ result: spf,
8530+ domain: mail_from_domain.to_string(),
8531+ report: None,
8532+ explanation: None,
8533+ };
8534+ let result = resolver
8535+ .verify_dmarc(&auth_message, &[dkim], mail_from_domain, &spf)
8536+ .await;
8537+ assert_eq!(result.dkim_result, expect_dkim);
8538+ assert_eq!(result.spf_result, expect_spf);
8539+ assert_eq!(result.policy, policy);
8540+ }
8541+ }
8542+
8543+ #[tokio::test]
8544+ async fn dmarc_verify_report_address() {
8545+ let resolver = Resolver::new_system_conf().unwrap();
8546+ resolver.txt_add(
8547+ "example.org.report.dmarc.external.org.",
8548+ DMARC::parse(b"v=DMARC1").unwrap(),
8549+ Instant::now() + Duration::new(3200, 0),
8550+ );
8551+ let uris = vec![
8552+ URI::new("dmarc@example.org", 0),
8553+ URI::new("dmarc@external.org", 0),
8554+ URI::new("domain@other.org", 0),
8555+ ];
8556+
8557+ assert_eq!(
8558+ resolver
8559+ .verify_dmarc_report_address("example.org", &uris)
8560+ .await
8561+ .unwrap(),
8562+ vec![
8563+ &URI::new("dmarc@example.org", 0),
8564+ &URI::new("dmarc@external.org", 0),
8565+ ]
8566+ );
8567+ }
8568+ }
8569 diff --git a/src/lib.rs b/src/lib.rs
8570index f6bb344..ffcf78c 100644
8571--- a/src/lib.rs
8572+++ b/src/lib.rs
8573 @@ -1,6 +1,5 @@
8574 /*
8575- * Copyright Stalwart Labs Ltd. See the COPYING
8576- * file at the top-level directory of this distribution.
8577+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8578 *
8579 * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8580 * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8581 @@ -9,6 +8,250 @@
8582 * except according to those terms.
8583 */
8584
8585+ //! # mail-auth
8586+ //!
8587+ //! [![crates.io](https://img.shields.io/crates/v/mail-auth)](https://crates.io/crates/mail-auth)
8588+ //! [![build](https://github.com/stalwartlabs/mail-auth/actions/workflows/rust.yml/badge.svg)](https://github.com/stalwartlabs/mail-auth/actions/workflows/rust.yml)
8589+ //! [![docs.rs](https://img.shields.io/docsrs/mail-auth)](https://docs.rs/mail-auth)
8590+ //! [![crates.io](https://img.shields.io/crates/l/mail-auth)](http://www.apache.org/licenses/LICENSE-2.0)
8591+ //!
8592+ //! _mail-auth_ is an e-mail authentication and reporting library written in Rust that supports the **DKIM**, **ARC**, **SPF** and **DMARC**
8593+ //! protocols. The library aims to be fast, safe and correct while supporting all major [message authentication and reporting RFCs](#conformed-rfcs).
8594+ //!
8595+ //! Features:
8596+ //!
8597+ //! - **DomainKeys Identified Mail (DKIM)**:
8598+ //! - ED25519-SHA256 (Edwards-Curve Digital Signature Algorithm), RSA-SHA256 and RSA-SHA1 signing and verification.
8599+ //! - DKIM Authorized Third-Party Signatures.
8600+ //! - DKIM failure reporting using the Abuse Reporting Format.
8601+ //! - **Authenticated Received Chain (ARC)**:
8602+ //! - ED25519-SHA256 (Edwards-Curve Digital Signature Algorithm), RSA-SHA256 and RSA-SHA1 chain verification.
8603+ //! - ARC sealing.
8604+ //! - **Sender Policy Framework (SPF)**:
8605+ //! - Policy evalution.
8606+ //! - SPF failure reporting using the Abuse Reporting Format.
8607+ //! - **Domain-based Message Authentication, Reporting, and Conformance (DMARC)**:
8608+ //! - Policy evaluation.
8609+ //! - DMARC aggregate report parsing and generation.
8610+ //! - **Abuse Reporting Format (ARF)**:
8611+ //! - Abuse and Authentication failure reporting.
8612+ //! - Feedback report parsing and generation.
8613+ //!
8614+ //!
8615+ //! ## Usage examples
8616+ //!
8617+ //! ### DKIM Signature Verification
8618+ //!
8619+ //! ```rust
8620+ //! // Create a resolver using Cloudflare DNS
8621+ //! let resolver = Resolver::new_cloudflare_tls().unwrap();
8622+ //!
8623+ //! // Parse message
8624+ //! let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
8625+ //!
8626+ //! // Validate signature
8627+ //! let result = resolver.verify_dkim(&authenticated_message).await;
8628+ //!
8629+ //! // Make sure all signatures passed verification
8630+ //! assert!(result.iter().all(|s| s.result() == &DKIMResult::Pass));
8631+ //! ```
8632+ //!
8633+ //! ### DKIM Signing
8634+ //!
8635+ //! ```rust
8636+ //! // Sign an e-mail message using RSA-SHA256
8637+ //! let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
8638+ //! let signature_rsa = Signature::new()
8639+ //! .headers(["From", "To", "Subject"])
8640+ //! .domain("example.com")
8641+ //! .selector("default")
8642+ //! .sign(RFC5322_MESSAGE.as_bytes(), &pk_rsa)
8643+ //! .unwrap();
8644+ //!
8645+ //! // Sign an e-mail message using ED25519-SHA256
8646+ //! let pk_ed = PrivateKey::from_ed25519(
8647+ //! &base64_decode(ED25519_PUBLIC_KEY.as_bytes()).unwrap(),
8648+ //! &base64_decode(ED25519_PRIVATE_KEY.as_bytes()).unwrap(),
8649+ //! )
8650+ //! .unwrap();
8651+ //! let signature_ed = Signature::new()
8652+ //! .headers(["From", "To", "Subject"])
8653+ //! .domain("example.com")
8654+ //! .selector("default-ed")
8655+ //! .sign(RFC5322_MESSAGE.as_bytes(), &pk_ed)
8656+ //! .unwrap();
8657+ //!
8658+ //! // Print the message including both signatures to stdout
8659+ //! println!(
8660+ //! "{}{}{}",
8661+ //! signature_rsa.to_header(),
8662+ //! signature_ed.to_header(),
8663+ //! RFC5322_MESSAGE
8664+ //! );
8665+ //! ```
8666+ //!
8667+ //! ### ARC Chain Verification
8668+ //!
8669+ //! ```rust
8670+ //! // Create a resolver using Cloudflare DNS
8671+ //! let resolver = Resolver::new_cloudflare_tls().unwrap();
8672+ //!
8673+ //! // Parse message
8674+ //! let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
8675+ //!
8676+ //! // Validate ARC chain
8677+ //! let result = resolver.verify_arc(&authenticated_message).await;
8678+ //!
8679+ //! // Make sure ARC passed verification
8680+ //! assert_eq!(result.result(), &DKIMResult::Pass);
8681+ //! ```
8682+ //!
8683+ //! ### ARC Chain Sealing
8684+ //!
8685+ //! ```rust
8686+ //! // Create a resolver using Cloudflare DNS
8687+ //! let resolver = Resolver::new_cloudflare_tls().unwrap();
8688+ //!
8689+ //! // Parse message to be sealed
8690+ //! let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
8691+ //!
8692+ //! // Verify ARC and DKIM signatures
8693+ //! let arc_result = resolver.verify_arc(&authenticated_message).await;
8694+ //! let dkim_result = resolver.verify_dkim(&authenticated_message).await;
8695+ //!
8696+ //! // Build Authenticated-Results header
8697+ //! let auth_results = AuthenticationResults::new("mx.mydomain.org")
8698+ //! .with_dkim_result(&dkim_result, "sender@example.org")
8699+ //! .with_arc_result(&arc_result, "127.0.0.1".parse().unwrap());
8700+ //!
8701+ //! // Seal message
8702+ //! if arc_result.can_be_sealed() {
8703+ //! // Seal the e-mail message using RSA-SHA256
8704+ //! let pk_rsa = PrivateKey::from_rsa_pkcs1_pem(RSA_PRIVATE_KEY).unwrap();
8705+ //! let arc_set = ARC::new(&auth_results)
8706+ //! .domain("example.org")
8707+ //! .selector("default")
8708+ //! .headers(["From", "To", "Subject", "DKIM-Signature"])
8709+ //! .seal(&authenticated_message, &arc_result, &pk_rsa)
8710+ //! .unwrap();
8711+ //!
8712+ //! // Print the sealed message to stdout
8713+ //! println!("{}{}", arc_set.to_header(), RFC5322_MESSAGE)
8714+ //! } else {
8715+ //! eprintln!("The message could not be sealed, probably an ARC chain with cv=fail was found.")
8716+ //! }
8717+ //! ```
8718+ //!
8719+ //! ### SPF Policy Evaluation
8720+ //!
8721+ //! ```rust
8722+ //! // Create a resolver using Cloudflare DNS
8723+ //! let resolver = Resolver::new_cloudflare_tls().unwrap();
8724+ //!
8725+ //! // Verify HELO identity
8726+ //! let result = resolver
8727+ //! .verify_spf_helo("127.0.0.1".parse().unwrap(), "gmail.com")
8728+ //! .await;
8729+ //! assert_eq!(result.result(), SPFResult::Fail);
8730+ //!
8731+ //! // Verify MAIL-FROM identity
8732+ //! let result = resolver
8733+ //! .verify_spf_sender("::1".parse().unwrap(), "gmail.com", "sender@gmail.com")
8734+ //! .await;
8735+ //! assert_eq!(result.result(), SPFResult::Fail);
8736+ //! ```
8737+ //!
8738+ //! ### DMARC Policy Evaluation
8739+ //!
8740+ //! ```rust
8741+ //! // Create a resolver using Cloudflare DNS
8742+ //! let resolver = Resolver::new_cloudflare_tls().unwrap();
8743+ //!
8744+ //! // Verify DKIM signatures
8745+ //! let authenticated_message = AuthenticatedMessage::parse(RFC5322_MESSAGE.as_bytes()).unwrap();
8746+ //! let dkim_result = resolver.verify_dkim(&authenticated_message).await;
8747+ //!
8748+ //! // Verify SPF MAIL-FROM identity
8749+ //! let spf_result = resolver
8750+ //! .verify_spf_sender("::1".parse().unwrap(), "example.org", "sender@example.org")
8751+ //! .await;
8752+ //!
8753+ //! // Verify DMARC
8754+ //! let dmarc_result = resolver
8755+ //! .verify_dmarc(
8756+ //! &authenticated_message,
8757+ //! &dkim_result,
8758+ //! "example.org",
8759+ //! &spf_result,
8760+ //! )
8761+ //! .await;
8762+ //! assert_eq!(dmarc_result.dkim_result(), &DMARCResult::Pass);
8763+ //! assert_eq!(dmarc_result.spf_result(), &DMARCResult::Pass);
8764+ //! ```
8765+ //!
8766+ //! More examples available under the [examples](examples) directory.
8767+ //!
8768+ //! ## Testing & Fuzzing
8769+ //!
8770+ //! To run the testsuite:
8771+ //!
8772+ //! ```bash
8773+ //! $ cargo test --all-features
8774+ //! ```
8775+ //!
8776+ //! To fuzz the library with `cargo-fuzz`:
8777+ //!
8778+ //! ```bash
8779+ //! $ cargo +nightly fuzz run mail_parser
8780+ //! ```
8781+ //!
8782+ //! ## Conformed RFCs
8783+ //!
8784+ //! ### DKIM
8785+ //!
8786+ //! - [RFC 6376 - DomainKeys Identified Mail (DKIM) Signatures](https://datatracker.ietf.org/doc/html/rfc6376)
8787+ //! - [RFC 6541 - DomainKeys Identified Mail (DKIM) Authorized Third-Party Signatures](https://datatracker.ietf.org/doc/html/rfc6541)
8788+ //! - [RFC 6651 - Extensions to DomainKeys Identified Mail (DKIM) for Failure Reporting](https://datatracker.ietf.org/doc/html/rfc6651)
8789+ //! - [RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA)](https://datatracker.ietf.org/doc/html/rfc8032)
8790+ //! - [RFC 4686 - Analysis of Threats Motivating DomainKeys Identified Mail (DKIM)](https://datatracker.ietf.org/doc/html/rfc4686)
8791+ //! - [RFC 5016 - Requirements for a DomainKeys Identified Mail (DKIM) Signing Practices Protocol](https://datatracker.ietf.org/doc/html/rfc5016)
8792+ //! - [RFC 5585 - DomainKeys Identified Mail (DKIM) Service Overview](https://datatracker.ietf.org/doc/html/rfc5585)
8793+ //! - [RFC 5672 - DomainKeys Identified Mail (DKIM) Signatures -- Update](https://datatracker.ietf.org/doc/html/rfc5672)
8794+ //! - [RFC 5863 - DomainKeys Identified Mail (DKIM) Development, Deployment, and Operations](https://datatracker.ietf.org/doc/html/rfc5863)
8795+ //! - [RFC 6377 - DomainKeys Identified Mail (DKIM) and Mailing Lists](https://datatracker.ietf.org/doc/html/rfc6377)
8796+ //!
8797+ //! ### SPF
8798+ //! - [RFC 7208 - Sender Policy Framework (SPF)](https://datatracker.ietf.org/doc/html/rfc7208)
8799+ //! - [RFC 6652 - Sender Policy Framework (SPF) Authentication Failure Reporting Using the Abuse Reporting Format](https://datatracker.ietf.org/doc/html/rfc6652)
8800+ //!
8801+ //! ### DMARC
8802+ //! - [RFC 7489 - Domain-based Message Authentication, Reporting, and Conformance (DMARC)](https://datatracker.ietf.org/doc/html/rfc7489)
8803+ //! - [RFC 8617 - The Authenticated Received Chain (ARC) Protocol](https://datatracker.ietf.org/doc/html/rfc8617)
8804+ //! - [RFC 8601 - Message Header Field for Indicating Message Authentication Status](https://datatracker.ietf.org/doc/html/rfc8601)
8805+ //! - [RFC 8616 - Email Authentication for Internationalized Mail](https://datatracker.ietf.org/doc/html/rfc8616)
8806+ //! - [RFC 7960 - Interoperability Issues between Domain-based Message Authentication, Reporting, and Conformance (DMARC) and Indirect Email Flows](https://datatracker.ietf.org/doc/html/rfc7960)
8807+ //!
8808+ //! ### ARF
8809+ //! - [RFC 5965 - An Extensible Format for Email Feedback Reports](https://datatracker.ietf.org/doc/html/rfc5965)
8810+ //! - [RFC 6430 - Email Feedback Report Type Value: not-spam](https://datatracker.ietf.org/doc/html/rfc6430)
8811+ //! - [RFC 6590 - Redaction of Potentially Sensitive Data from Mail Abuse Reports](https://datatracker.ietf.org/doc/html/rfc6590)
8812+ //! - [RFC 6591 - Authentication Failure Reporting Using the Abuse Reporting Format](https://datatracker.ietf.org/doc/html/rfc6591)
8813+ //! - [RFC 6650 - Creation and Use of Email Feedback Reports: An Applicability Statement for the Abuse Reporting Format (ARF)](https://datatracker.ietf.org/doc/html/rfc6650)
8814+ //!
8815+ //! ## License
8816+ //!
8817+ //! Licensed under either of
8818+ //!
8819+ //! * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
8820+ //! * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
8821+ //!
8822+ //! at your option.
8823+ //!
8824+ //! ## Copyright
8825+ //!
8826+ //! Copyright (C) 2020-2022, Stalwart Labs Ltd.
8827+ //!
8828+
8829 use std::{
8830 cell::Cell,
8831 fmt::Display,
8832 @@ -19,7 +262,7 @@ use std::{
8833
8834 use arc::Set;
8835 use common::{headers::Header, lru::LruCache};
8836- use dkim::{Atps, Canonicalization, DomainKey, HashAlgorithm};
8837+ use dkim::{Atps, Canonicalization, DomainKey, DomainKeyReport, HashAlgorithm};
8838 use dmarc::DMARC;
8839 use rsa::RsaPrivateKey;
8840 use spf::{Macro, SPF};
8841 @@ -56,6 +299,7 @@ pub(crate) enum Txt {
8842 SPF(Arc<SPF>),
8843 SPFMacro(Arc<Macro>),
8844 DomainKey(Arc<DomainKey>),
8845+ DomainKeyReport(Arc<DomainKeyReport>),
8846 DMARC(Arc<DMARC>),
8847 Atps(Arc<Atps>),
8848 Error(Error),
8849 diff --git a/src/report/arf/generate.rs b/src/report/arf/generate.rs
8850index 8196dca..df00b3d 100644
8851--- a/src/report/arf/generate.rs
8852+++ b/src/report/arf/generate.rs
8853 @@ -1,3 +1,13 @@
8854+ /*
8855+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8856+ *
8857+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8858+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8859+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8860+ * option. This file may not be copied, modified, or distributed
8861+ * except according to those terms.
8862+ */
8863+
8864 use std::{fmt::Write, time::SystemTime};
8865
8866 use mail_builder::{
8867 diff --git a/src/report/arf/mod.rs b/src/report/arf/mod.rs
8868index 7af0b71..110d55f 100644
8869--- a/src/report/arf/mod.rs
8870+++ b/src/report/arf/mod.rs
8871 @@ -1,3 +1,13 @@
8872+ /*
8873+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8874+ *
8875+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8876+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8877+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8878+ * option. This file may not be copied, modified, or distributed
8879+ * except according to those terms.
8880+ */
8881+
8882 use std::{borrow::Cow, net::IpAddr};
8883
8884 use super::{AuthFailureType, DeliveryResult, Feedback, FeedbackType, IdentityAlignment};
8885 diff --git a/src/report/arf/parse.rs b/src/report/arf/parse.rs
8886index 6c39d7d..c0eea1c 100644
8887--- a/src/report/arf/parse.rs
8888+++ b/src/report/arf/parse.rs
8889 @@ -1,3 +1,13 @@
8890+ /*
8891+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8892+ *
8893+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8894+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8895+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8896+ * option. This file may not be copied, modified, or distributed
8897+ * except according to those terms.
8898+ */
8899+
8900 use std::borrow::Cow;
8901
8902 use mail_parser::{parsers::MessageStream, HeaderValue, Message, MimeHeaders, PartType};
8903 diff --git a/src/report/dmarc/generate.rs b/src/report/dmarc/generate.rs
8904index 810a570..d44b026 100644
8905--- a/src/report/dmarc/generate.rs
8906+++ b/src/report/dmarc/generate.rs
8907 @@ -1,3 +1,13 @@
8908+ /*
8909+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8910+ *
8911+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8912+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8913+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8914+ * option. This file may not be copied, modified, or distributed
8915+ * except according to those terms.
8916+ */
8917+
8918 use flate2::{write::GzEncoder, Compression};
8919 use mail_builder::{headers::HeaderType, MessageBuilder};
8920
8921 diff --git a/src/report/dmarc/mod.rs b/src/report/dmarc/mod.rs
8922index d09562b..658a373 100644
8923--- a/src/report/dmarc/mod.rs
8924+++ b/src/report/dmarc/mod.rs
8925 @@ -1,3 +1,13 @@
8926+ /*
8927+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8928+ *
8929+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8930+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8931+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8932+ * option. This file may not be copied, modified, or distributed
8933+ * except according to those terms.
8934+ */
8935+
8936 pub mod generate;
8937 pub mod parse;
8938
8939 diff --git a/src/report/dmarc/parse.rs b/src/report/dmarc/parse.rs
8940index 7b9401a..64ab859 100644
8941--- a/src/report/dmarc/parse.rs
8942+++ b/src/report/dmarc/parse.rs
8943 @@ -1,3 +1,13 @@
8944+ /*
8945+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8946+ *
8947+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8948+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8949+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8950+ * option. This file may not be copied, modified, or distributed
8951+ * except according to those terms.
8952+ */
8953+
8954 use std::io::{BufRead, Cursor, Read};
8955 use std::str::FromStr;
8956
8957 diff --git a/src/report/mod.rs b/src/report/mod.rs
8958index 0b0ab42..e3bd93a 100644
8959--- a/src/report/mod.rs
8960+++ b/src/report/mod.rs
8961 @@ -1,3 +1,13 @@
8962+ /*
8963+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8964+ *
8965+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8966+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8967+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8968+ * option. This file may not be copied, modified, or distributed
8969+ * except according to those terms.
8970+ */
8971+
8972 pub mod arf;
8973 pub mod dmarc;
8974
8975 diff --git a/src/spf/macros.rs b/src/spf/macros.rs
8976index c1c28f2..5de6329 100644
8977--- a/src/spf/macros.rs
8978+++ b/src/spf/macros.rs
8979 @@ -1,3 +1,13 @@
8980+ /*
8981+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
8982+ *
8983+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8984+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8985+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8986+ * option. This file may not be copied, modified, or distributed
8987+ * except according to those terms.
8988+ */
8989+
8990 use std::{borrow::Cow, net::IpAddr, time::SystemTime};
8991
8992 use super::{Macro, Variable, Variables};
8993 diff --git a/src/spf/mod.rs b/src/spf/mod.rs
8994index e3fc194..799b975 100644
8995--- a/src/spf/mod.rs
8996+++ b/src/spf/mod.rs
8997 @@ -1,3 +1,13 @@
8998+ /*
8999+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
9000+ *
9001+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
9002+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
9003+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
9004+ * option. This file may not be copied, modified, or distributed
9005+ * except according to those terms.
9006+ */
9007+
9008 pub mod macros;
9009 pub mod parse;
9010 pub mod verify;
9011 @@ -87,7 +97,7 @@ pub(crate) struct Directive {
9012
9013 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
9014 #[repr(u8)]
9015- pub(crate) enum Variable {
9016+ pub enum Variable {
9017 Sender = 0,
9018 SenderLocalPart = 1,
9019 SenderDomainPart = 2,
9020 @@ -102,12 +112,12 @@ pub(crate) enum Variable {
9021 }
9022
9023 #[derive(Debug, PartialEq, Eq, Clone, Default)]
9024- pub(crate) struct Variables<'x> {
9025+ pub struct Variables<'x> {
9026 vars: [Cow<'x, [u8]>; 11],
9027 }
9028
9029 #[derive(Debug, PartialEq, Eq, Clone)]
9030- pub(crate) enum Macro {
9031+ pub enum Macro {
9032 Literal(Vec<u8>),
9033 Variable {
9034 letter: Variable,
9035 @@ -236,6 +246,10 @@ impl SPFOutput {
9036 self.result
9037 }
9038
9039+ pub fn domain(&self) -> &str {
9040+ &self.domain
9041+ }
9042+
9043 pub fn explanation(&self) -> Option<&str> {
9044 self.explanation.as_deref()
9045 }
9046 diff --git a/src/spf/parse.rs b/src/spf/parse.rs
9047index 5723481..f864351 100644
9048--- a/src/spf/parse.rs
9049+++ b/src/spf/parse.rs
9050 @@ -1,3 +1,13 @@
9051+ /*
9052+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
9053+ *
9054+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
9055+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
9056+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
9057+ * option. This file may not be copied, modified, or distributed
9058+ * except according to those terms.
9059+ */
9060+
9061 use std::{
9062 net::{Ipv4Addr, Ipv6Addr},
9063 slice::Iter,
9064 diff --git a/src/spf/verify.rs b/src/spf/verify.rs
9065index c0f43eb..cd1b697 100644
9066--- a/src/spf/verify.rs
9067+++ b/src/spf/verify.rs
9068 @@ -1,3 +1,13 @@
9069+ /*
9070+ * Copyright (c) 2020-2022, Stalwart Labs Ltd.
9071+ *
9072+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
9073+ * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
9074+ * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
9075+ * option. This file may not be copied, modified, or distributed
9076+ * except according to those terms.
9077+ */
9078+
9079 use std::{
9080 net::{IpAddr, Ipv4Addr, Ipv6Addr},
9081 time::Instant,