imara-diff-0.1.5/.gitignore000064400000000000000000000000401046102023000136100ustar 00000000000000/target /Cargo.lock /bench_data imara-diff-0.1.5/CHANGELOG.md000064400000000000000000000016771046102023000134520ustar 00000000000000# Changelog - imara-diff All notable changes to imara-diff will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 0.1.5 - 2022-11-4 ### Fixed * `inter::Interner::erase_tokens_after` not removing tokens from the LUT in some cases. ## 0.1.4 - 2022-11-4 ### Fixed * `inter::Interner::erase_tokens_after` only removed tokens from the LUT of the interner but did not actually remove the value from the list of tokens. This cause iteration to still access these values. ## 0.1.3 - 2022-10-26 ### Fixed * Dependency on multiple `ahash` versions ## 0.1.2 - 2022-10-26 # Documentation * Add multiple usage examples to the crate documentation ## 0.1.1 - 2022-10-25 ### Added * `Interner::erase_tokens_after` - allows reusing the interner without leaking memory. ## 0.1.0 - 2022-10-24 Initial Release imara-diff-0.1.5/Cargo.toml0000644000000026560000000000100110450ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.61" name = "imara-diff" version = "0.1.5" authors = ["pascalkuthe "] exclude = [ "tests", "bench_data", "plt.py", ] description = "Minimal terminfo libary." readme = "README.md" keywords = [ "diff", "difference", "myers", "compare", "changes", ] license = "Apache-2.0" repository = "https://github.com/pascalkuthe/imara-diff" [profile.release] debug = true [[bench]] name = "git_repo" harness = false [dependencies.ahash] version = "0.8.0" [dependencies.hashbrown] version = "0.12.3" features = [ "raw", "inline-more", ] default-features = false [dev-dependencies.criterion] version = "0.4.0" [dev-dependencies.expect-test] version = "1.4.0" [dev-dependencies.git-repository] version = "0.25.0" [dev-dependencies.similar] version = "2.2.0" features = ["bytes"] [features] default = ["unified_diff"] unified_diff = [] [badges.maintenance] status = "actively-developed" imara-diff-0.1.5/Cargo.toml.orig000064400000000000000000000017051046102023000145200ustar 00000000000000[package] name = "imara-diff" version = "0.1.5" edition = "2021" authors = ["pascalkuthe "] rust-version = "1.61" license = "Apache-2.0" description = "Minimal terminfo libary." repository = "https://github.com/pascalkuthe/imara-diff" keywords = ["diff", "difference", "myers", "compare", "changes"] readme = "README.md" exclude = [ "tests", "bench_data", "plt.py", ] [badges] maintenance = { status = "actively-developed" } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] ahash = "0.8.0" hashbrown = { version = "0.12.3", default-features = false, features = ["raw", "inline-more"] } [features] default = ["unified_diff"] unified_diff = [] [dev-dependencies] criterion = "0.4.0" expect-test = "1.4.0" git-repository = "0.25.0" similar = { version = "2.2.0", features = ["bytes"] } [profile.release] debug = true [[bench]] name = "git_repo" harness = false imara-diff-0.1.5/LICENSE000064400000000000000000000251371046102023000126430ustar 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. imara-diff-0.1.5/README.md000064400000000000000000000124531046102023000131120ustar 00000000000000# imara-diff [![crates.io](https://img.shields.io/crates/v/imara-diff?style=flat-square)](https://crates.io/crates/imara-diff) [![crates.io](https://img.shields.io/docsrs/imara-diff?style=flat-square)](https://docs.rs/imara-diff/latest/imara_diff/) ![crates.io](https://img.shields.io/crates/l/imara-diff?style=flat-square) Imara-diff is a solid (imara in swahili) diff library for rust. Solid refers to the fact that imara-diff provides very good runtime performance even in pathologic cases so that your application never appears to freeze while waiting on a diff. The performance improvements are achieved using battle tested heuristics used in gnu-diff and git that are known to perform well while still providing good results. Imara-diff is also designed to be flexible so that it can be used with arbitrary collections and not just lists and strings and even allows reusing large parts of the computation when comparing the same file to multiple different files. Imara-diff provides two diff algorithms: * The linear-space variant of the well known [Myers algorithm](http://www.xmailserver.org/diff2.pdf) * The **Histogram** algorithm which variant of the patience diff algorithm. Myers algorithm has been enhanced with preprocessing and multiple heuristics to ensure fast runtime in pathological cases to avoid quadratic time complexity and closely matches the behavior of gnu-diff and git. The histogram algorithm was originally ported from git but has been heavily optimized. The **Histogram algorithm outperforms Myers algorithm** by 10% - 100% across a **wide variety of workloads**. ## Limitations Even with the optimizations in this crate, performing a large diff without any tokenization (like character diff for a string) does not perform well. To work around this problem a diff of the entire file with large tokens (like lines for a string) can be performed first. The `Sink` implementation can then perform fine-grained diff on changed regions. Note that this fine-grained diff should not be performed for pure insertions, pure deletions and very large changes. In an effort to improve performance, `imara-diff` makes heavy use of pointer compression. That means that it can only support files with at most `2^31 - 2` tokens. This should be rarely an issue in practice for textual diffs, because most (large) real-world files have an average line-length of at least 8. That means that this limitation only becomes a problem for files above 16GB while performing line-diffs. ## Benchmarks The most used diffing libraries in the rust ecosystem are [similar](https://crates.io/crates/similar) and [dissimilar](https://crates.io/crates/similar). The fastest diff implementation both of these offer is a simple implementation of Myers algorithm without preprocessing or additional heuristics. As these implementations are very similar only `similar` was included in the benchmark. To provide a benchmark to reflects real-world workloads, the git history of different open source projects were used. For each repo two (fairly different) tags were chosen. A tree diff is performed with [gitoxide](https://github.com/Byron/gitoxide) and the pairs of files that should be saved are stored in memory. The diffs collected using this method are often fairly large, because the repositories are compared over a large span of time. Therefore, the tree diff of the last 30 commit before the tag (equivalent of `git diff TAG^ TAG`, `git diff TAG^^ TAG^^`) were also used to also include smaller diffs. The benchmark measures the runtime of performing a **line diff** between the collected files. As a measure of complexity for each change `(M + N) D` was used where `M` and `N` are the lengths of the two compared files and `D` is the length of the edit script required to transform these files into each other (determined with Myers algorithm). This complexity measure is used to divide the changes into 10 badges. The time to compute the line diffs in each badge was benchmarked. The plots below show the runtime for each **average** complexity (runtime is normalized by the number of diffs). Note that these plots are shown in logarithmic scale due to the large runtime of `similar` for complex diffs. Furthermore, to better highlight the performance of the Histogram algorithm, the speedup of the Histogram algorithm compared to the Myers algorithm is shown separately. * [Linux](#Linux) * [Rust](#Rust) * [VSCode](#VSCode) * [Helix](#Helix) # Linux The sourcecode of the linux kernel. - **Repo** - https://kernel.org - **Tags** - `v5.7` and `v6.0` # Rust The sourcecode of the rust compiler, standard library and various related tooling. - **Repo** - https://github.com/rust-lang/rust - **Tags** - `1.50.0` and `1.64.0` # VScode The sourcecode of the vscode editor. - **Repo** - https://github.com/microsoft/vscode - **Tags** - `1.41.0` and `1.72.2` # Helix The sourcecode of the helix editor. - **Repo** - https://github.com/helix-editor/helix - **Tags** - `v0.5.0` and `22.08.1` imara-diff-0.1.5/benches/git_repo.rs000064400000000000000000000124151046102023000154160ustar 00000000000000use std::convert::Infallible; use std::path::PathBuf; use criterion::measurement::Measurement; use criterion::{ black_box, criterion_group, criterion_main, BenchmarkGroup, BenchmarkId, Criterion, }; use git_repository::object::tree::diff::{Action, Change}; use git_repository::Id; use imara_diff::intern::InternedInput; use imara_diff::sink::Counter; use imara_diff::Algorithm; fn extract_diff(change: &Change) -> Option<(Vec, Vec)> { use git_repository::object::tree::diff::change::Event::Modification; let (previous_id, id) = match change.event { Modification { previous_entry_mode, previous_id, entry_mode, id } if previous_entry_mode.is_blob() && entry_mode.is_blob() => { (previous_id, id) } _ => return None, }; let old = previous_id.object().ok()?.detach().data; let new = id.object().ok()?.detach().data; Some((new, old)) } fn git_tree_diff(from: Id, to: Id, diffs: &mut Vec<(Vec, Vec, usize)>) { let from_tree = from.object().unwrap().peel_to_tree().unwrap(); let to_tree = to.object().unwrap().peel_to_tree().unwrap(); from_tree .changes() .track_filename() .for_each_to_obtain_tree(&to_tree, |change| -> Result<_, Infallible> { if let Some((old, new)) = extract_diff(&change) { let input = InternedInput::new(&*old, &*new); let changes = imara_diff::diff(Algorithm::Myers, &input, Counter::default()).total(); let complexity = changes * (old.len() + new.len()); diffs.push((old, new, complexity)); } Ok(Action::Continue) }) .unwrap(); } pub fn project_root() -> PathBuf { let dir = env!("CARGO_MANIFEST_DIR"); let mut res = PathBuf::from(dir); while !res.join("README.md").exists() { res = res.parent().expect("reached fs root without finding project root").to_owned() } res } fn bench_repo(c: &mut Criterion, name: &str, tag2: &str, tag1: &str, num_commits: usize) { let path = project_root().join("bench_data").join("repos").join(name); let repo = git_repository::open(path).unwrap(); let tag1 = repo.find_reference(tag1).unwrap().into_fully_peeled_id().unwrap(); let tag2 = repo.find_reference(tag2).unwrap().into_fully_peeled_id().unwrap(); let mut diffs = Vec::new(); git_tree_diff(tag1, tag2, &mut diffs); let mut last_commit = tag2; tag2.object() .unwrap() .into_commit() .ancestors() .all() .unwrap() .take(num_commits as usize) .for_each(|parent| { let parent = parent.unwrap(); git_tree_diff(last_commit, parent, &mut diffs); last_commit = parent; }); diffs.sort_unstable_by_key(|(_, _, complexity)| *complexity); if std::env::var("PLOT").is_ok() { let mut group = c.benchmark_group(format!("{name}_plot")); group.sample_size(15); bench_file_diffs(group, &diffs, 12, true); } else { bench_file_diffs(c.benchmark_group(name), &diffs, 2, false); } } fn bench_file_diffs( mut group: BenchmarkGroup, files: &[(Vec, Vec, usize)], num_chunks: usize, compare_to_similar: bool, ) { let mut run = |name, f: fn(&[u8], &[u8]) -> usize| { let mut i = 0; for chunk in files.chunks((files.len() + num_chunks - 1) / num_chunks) { let mut average_complexity: usize = chunk.iter().map(|(_, _, it)| *it).sum(); average_complexity /= chunk.len(); println!("benchmarking {i}..{}/{}", i + chunk.len(), files.len()); i += chunk.len(); group.bench_function( BenchmarkId::new(name, format!("{average_complexity}::{}", chunk.len())), |b| { b.iter(|| { for (old, new, _) in chunk { // myers algorithm is O(ND) where D is the length of the (minimal) edit script and N the sum of file lengths // we use that as an x axis to find a meaningful way to plot a black_box(f(old, new)); } }); }, ); } }; run("imara_diff-histogram", |file1, file2| { let input = InternedInput::new(file1, file2); imara_diff::diff(Algorithm::Histogram, &input, Counter::default()).total() }); run("imara_diff-myers", |file1, file2| { let input = InternedInput::new(file1, file2); imara_diff::diff(Algorithm::Myers, &input, Counter::default()).total() }); if compare_to_similar { run("similar", |file1, file2| { let diff = similar::utils::diff_lines(similar::Algorithm::Myers, file1, file2); diff.len() }); } group.finish(); } fn rust(c: &mut Criterion) { bench_repo(c, "rust", "1.64.0", "1.50.0", 30); } fn vscode(c: &mut Criterion) { bench_repo(c, "vscode", "1.72.2", "1.41.0", 30); } fn linux(c: &mut Criterion) { bench_repo(c, "linux", "v6.0", "v5.7", 30); } fn helix(c: &mut Criterion) { bench_repo(c, "helix", "22.08.1", "v0.5.0", 30); } criterion_group!(realworld_repos, helix, rust, vscode, linux); criterion_main!(realworld_repos); imara-diff-0.1.5/plots/helix_comparison.svg000064400000000000000000002035471046102023000170660ustar 00000000000000 imara-diff-0.1.5/plots/helix_speedup.svg000064400000000000000000001404021046102023000163470ustar 00000000000000 imara-diff-0.1.5/plots/linux_comparison.svg000064400000000000000000002004051046102023000171020ustar 00000000000000 imara-diff-0.1.5/plots/linux_comparison.svg.base64000064400000000000000000002554671046102023000202070ustar 00000000000000PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDov L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5 L3hsaW5rIiB3aWR0aD0iMzM2LjEyMyIgaGVpZ2h0PSIyOTMuMjk3IiB2aWV3Qm94PSIwIDAgMzM2 LjEyMyAyOTMuMjk3Ij4KPGRlZnM+CjxnPgo8ZyBpZD0iZ2x5cGgtMC0wIj4KPC9nPgo8ZyBpZD0i Z2x5cGgtMC0xIj4KPHBhdGggZD0iTSAyLjkzNzUgLTYuMzc1IEMgMi45Mzc1IC02LjYyNSAyLjkz NzUgLTYuNjQwNjI1IDIuNzAzMTI1IC02LjY0MDYyNSBDIDIuMDc4MTI1IC02IDEuMjAzMTI1IC02 IDAuODkwNjI1IC02IEwgMC44OTA2MjUgLTUuNjg3NSBDIDEuMDkzNzUgLTUuNjg3NSAxLjY3MTg3 NSAtNS42ODc1IDIuMTg3NSAtNS45NTMxMjUgTCAyLjE4NzUgLTAuNzgxMjUgQyAyLjE4NzUgLTAu NDIxODc1IDIuMTU2MjUgLTAuMzEyNSAxLjI2NTYyNSAtMC4zMTI1IEwgMC45NTMxMjUgLTAuMzEy NSBMIDAuOTUzMTI1IDAgQyAxLjI5Njg3NSAtMC4wMzEyNSAyLjE1NjI1IC0wLjAzMTI1IDIuNTYy NSAtMC4wMzEyNSBDIDIuOTUzMTI1IC0wLjAzMTI1IDMuODI4MTI1IC0wLjAzMTI1IDQuMTcxODc1 IDAgTCA0LjE3MTg3NSAtMC4zMTI1IEwgMy44NTkzNzUgLTAuMzEyNSBDIDIuOTUzMTI1IC0wLjMx MjUgMi45Mzc1IC0wLjQyMTg3NSAyLjkzNzUgLTAuNzgxMjUgWiBNIDIuOTM3NSAtNi4zNzUgIi8+ CjwvZz4KPGcgaWQ9ImdseXBoLTAtMiI+CjxwYXRoIGQ9Ik0gNC41NzgxMjUgLTMuMTg3NSBDIDQu NTc4MTI1IC0zLjk4NDM3NSA0LjUzMTI1IC00Ljc4MTI1IDQuMTg3NSAtNS41MTU2MjUgQyAzLjcz NDM3NSAtNi40ODQzNzUgMi45MDYyNSAtNi42NDA2MjUgMi41IC02LjY0MDYyNSBDIDEuODkwNjI1 IC02LjY0MDYyNSAxLjE3MTg3NSAtNi4zNzUgMC43NSAtNS40NTMxMjUgQyAwLjQzNzUgLTQuNzY1 NjI1IDAuMzkwNjI1IC0zLjk4NDM3NSAwLjM5MDYyNSAtMy4xODc1IEMgMC4zOTA2MjUgLTIuNDM3 NSAwLjQyMTg3NSAtMS41NDY4NzUgMC44NDM3NSAtMC43ODEyNSBDIDEuMjY1NjI1IDAuMDE1NjI1 IDIgMC4yMTg3NSAyLjQ4NDM3NSAwLjIxODc1IEMgMy4wMTU2MjUgMC4yMTg3NSAzLjc4MTI1IDAu MDE1NjI1IDQuMjE4NzUgLTAuOTM3NSBDIDQuNTMxMjUgLTEuNjI1IDQuNTc4MTI1IC0yLjQwNjI1 IDQuNTc4MTI1IC0zLjE4NzUgWiBNIDIuNDg0Mzc1IDAgQyAyLjA5Mzc1IDAgMS41IC0wLjI1IDEu MzI4MTI1IC0xLjIwMzEyNSBDIDEuMjE4NzUgLTEuNzk2ODc1IDEuMjE4NzUgLTIuNzE4NzUgMS4y MTg3NSAtMy4zMTI1IEMgMS4yMTg3NSAtMy45NTMxMjUgMS4yMTg3NSAtNC42MDkzNzUgMS4yOTY4 NzUgLTUuMTQwNjI1IEMgMS40ODQzNzUgLTYuMzI4MTI1IDIuMjM0Mzc1IC02LjQyMTg3NSAyLjQ4 NDM3NSAtNi40MjE4NzUgQyAyLjgxMjUgLTYuNDIxODc1IDMuNDY4NzUgLTYuMjM0Mzc1IDMuNjU2 MjUgLTUuMjUgQyAzLjc2NTYyNSAtNC42ODc1IDMuNzY1NjI1IC0zLjkzNzUgMy43NjU2MjUgLTMu MzEyNSBDIDMuNzY1NjI1IC0yLjU2MjUgMy43NjU2MjUgLTEuODkwNjI1IDMuNjU2MjUgLTEuMjUg QyAzLjUgLTAuMjk2ODc1IDIuOTM3NSAwIDIuNDg0Mzc1IDAgWiBNIDIuNDg0Mzc1IDAgIi8+Cjwv Zz4KPGcgaWQ9ImdseXBoLTAtMyI+CjxwYXRoIGQ9Ik0gMy4yOTY4NzUgMi4zOTA2MjUgQyAzLjI5 Njg3NSAyLjM1OTM3NSAzLjI5Njg3NSAyLjM0Mzc1IDMuMTI1IDIuMTcxODc1IEMgMS44OTA2MjUg MC45MjE4NzUgMS41NjI1IC0wLjk2ODc1IDEuNTYyNSAtMi41IEMgMS41NjI1IC00LjIzNDM3NSAx LjkzNzUgLTUuOTY4NzUgMy4xNzE4NzUgLTcuMjAzMTI1IEMgMy4yOTY4NzUgLTcuMzI4MTI1IDMu Mjk2ODc1IC03LjM0Mzc1IDMuMjk2ODc1IC03LjM3NSBDIDMuMjk2ODc1IC03LjQ1MzEyNSAzLjI2 NTYyNSAtNy40ODQzNzUgMy4yMDMxMjUgLTcuNDg0Mzc1IEMgMy4wOTM3NSAtNy40ODQzNzUgMi4y MDMxMjUgLTYuNzk2ODc1IDEuNjA5Mzc1IC01LjUzMTI1IEMgMS4xMDkzNzUgLTQuNDM3NSAwLjk4 NDM3NSAtMy4zMjgxMjUgMC45ODQzNzUgLTIuNSBDIDAuOTg0Mzc1IC0xLjcxODc1IDEuMDkzNzUg LTAuNTE1NjI1IDEuNjQwNjI1IDAuNjI1IEMgMi4yNSAxLjg0Mzc1IDMuMDkzNzUgMi41IDMuMjAz MTI1IDIuNSBDIDMuMjY1NjI1IDIuNSAzLjI5Njg3NSAyLjQ2ODc1IDMuMjk2ODc1IDIuMzkwNjI1 IFogTSAzLjI5Njg3NSAyLjM5MDYyNSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMC00Ij4KPHBhdGgg ZD0iTSA0LjA3ODEyNSAtMi4yOTY4NzUgTCA2Ljg1OTM3NSAtMi4yOTY4NzUgQyA3IC0yLjI5Njg3 NSA3LjE4NzUgLTIuMjk2ODc1IDcuMTg3NSAtMi41IEMgNy4xODc1IC0yLjY4NzUgNyAtMi42ODc1 IDYuODU5Mzc1IC0yLjY4NzUgTCA0LjA3ODEyNSAtMi42ODc1IEwgNC4wNzgxMjUgLTUuNDg0Mzc1 IEMgNC4wNzgxMjUgLTUuNjI1IDQuMDc4MTI1IC01LjgxMjUgMy44NzUgLTUuODEyNSBDIDMuNjcx ODc1IC01LjgxMjUgMy42NzE4NzUgLTUuNjI1IDMuNjcxODc1IC01LjQ4NDM3NSBMIDMuNjcxODc1 IC0yLjY4NzUgTCAwLjg5MDYyNSAtMi42ODc1IEMgMC43NSAtMi42ODc1IDAuNTYyNSAtMi42ODc1 IDAuNTYyNSAtMi41IEMgMC41NjI1IC0yLjI5Njg3NSAwLjc1IC0yLjI5Njg3NSAwLjg5MDYyNSAt Mi4yOTY4NzUgTCAzLjY3MTg3NSAtMi4yOTY4NzUgTCAzLjY3MTg3NSAwLjUgQyAzLjY3MTg3NSAw LjY0MDYyNSAzLjY3MTg3NSAwLjgyODEyNSAzLjg3NSAwLjgyODEyNSBDIDQuMDc4MTI1IDAuODI4 MTI1IDQuMDc4MTI1IDAuNjQwNjI1IDQuMDc4MTI1IDAuNSBaIE0gNC4wNzgxMjUgLTIuMjk2ODc1 ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0wLTUiPgo8cGF0aCBkPSJNIDIuODc1IC0yLjUgQyAyLjg3 NSAtMy4yNjU2MjUgMi43NjU2MjUgLTQuNDY4NzUgMi4yMTg3NSAtNS42MDkzNzUgQyAxLjYyNSAt Ni44MjgxMjUgMC43NjU2MjUgLTcuNDg0Mzc1IDAuNjcxODc1IC03LjQ4NDM3NSBDIDAuNjA5Mzc1 IC03LjQ4NDM3NSAwLjU2MjUgLTcuNDM3NSAwLjU2MjUgLTcuMzc1IEMgMC41NjI1IC03LjM0Mzc1 IDAuNTYyNSAtNy4zMjgxMjUgMC43NSAtNy4xNDA2MjUgQyAxLjczNDM3NSAtNi4xNTYyNSAyLjI5 Njg3NSAtNC41NzgxMjUgMi4yOTY4NzUgLTIuNSBDIDIuMjk2ODc1IC0wLjc4MTI1IDEuOTM3NSAw Ljk2ODc1IDAuNzAzMTI1IDIuMjE4NzUgQyAwLjU2MjUgMi4zNDM3NSAwLjU2MjUgMi4zNTkzNzUg MC41NjI1IDIuMzkwNjI1IEMgMC41NjI1IDIuNDUzMTI1IDAuNjA5Mzc1IDIuNSAwLjY3MTg3NSAy LjUgQyAwLjc2NTYyNSAyLjUgMS42NzE4NzUgMS44MTI1IDIuMjUgMC41NDY4NzUgQyAyLjc2NTYy NSAtMC41NDY4NzUgMi44NzUgLTEuNjU2MjUgMi44NzUgLTIuNSBaIE0gMi44NzUgLTIuNSAiLz4K PC9nPgo8ZyBpZD0iZ2x5cGgtMC02Ij4KPHBhdGggZD0iTSAxLjc2NTYyNSAtNC40MDYyNSBMIDAu Mzc1IC00LjI5Njg3NSBMIDAuMzc1IC0zLjk4NDM3NSBDIDEuMDE1NjI1IC0zLjk4NDM3NSAxLjEw OTM3NSAtMy45MjE4NzUgMS4xMDkzNzUgLTMuNDM3NSBMIDEuMTA5Mzc1IC0wLjc1IEMgMS4xMDkz NzUgLTAuMzEyNSAxIC0wLjMxMjUgMC4zMjgxMjUgLTAuMzEyNSBMIDAuMzI4MTI1IDAgQyAwLjY0 MDYyNSAtMC4wMTU2MjUgMS4xODc1IC0wLjAzMTI1IDEuNDIxODc1IC0wLjAzMTI1IEMgMS43ODEy NSAtMC4wMzEyNSAyLjEyNSAtMC4wMTU2MjUgMi40Njg3NSAwIEwgMi40Njg3NSAtMC4zMTI1IEMg MS43OTY4NzUgLTAuMzEyNSAxLjc2NTYyNSAtMC4zNTkzNzUgMS43NjU2MjUgLTAuNzUgWiBNIDEu Nzk2ODc1IC02LjE0MDYyNSBDIDEuNzk2ODc1IC02LjQ1MzEyNSAxLjU2MjUgLTYuNjcxODc1IDEu MjgxMjUgLTYuNjcxODc1IEMgMC45Njg3NSAtNi42NzE4NzUgMC43NSAtNi40MDYyNSAwLjc1IC02 LjE0MDYyNSBDIDAuNzUgLTUuODc1IDAuOTY4NzUgLTUuNjA5Mzc1IDEuMjgxMjUgLTUuNjA5Mzc1 IEMgMS41NjI1IC01LjYwOTM3NSAxLjc5Njg3NSAtNS44MjgxMjUgMS43OTY4NzUgLTYuMTQwNjI1 IFogTSAxLjc5Njg3NSAtNi4xNDA2MjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTAtNyI+CjxwYXRo IGQ9Ik0gMS4wOTM3NSAtMy40MjE4NzUgTCAxLjA5Mzc1IC0wLjc1IEMgMS4wOTM3NSAtMC4zMTI1 IDAuOTg0Mzc1IC0wLjMxMjUgMC4zMTI1IC0wLjMxMjUgTCAwLjMxMjUgMCBDIDAuNjcxODc1IC0w LjAxNTYyNSAxLjE3MTg3NSAtMC4wMzEyNSAxLjQ1MzEyNSAtMC4wMzEyNSBDIDEuNzAzMTI1IC0w LjAzMTI1IDIuMjE4NzUgLTAuMDE1NjI1IDIuNTYyNSAwIEwgMi41NjI1IC0wLjMxMjUgQyAxLjg5 MDYyNSAtMC4zMTI1IDEuNzgxMjUgLTAuMzEyNSAxLjc4MTI1IC0wLjc1IEwgMS43ODEyNSAtMi41 OTM3NSBDIDEuNzgxMjUgLTMuNjI1IDIuNSAtNC4xODc1IDMuMTI1IC00LjE4NzUgQyAzLjc2NTYy NSAtNC4xODc1IDMuODc1IC0zLjY1NjI1IDMuODc1IC0zLjA3ODEyNSBMIDMuODc1IC0wLjc1IEMg My44NzUgLTAuMzEyNSAzLjc2NTYyNSAtMC4zMTI1IDMuMDkzNzUgLTAuMzEyNSBMIDMuMDkzNzUg MCBDIDMuNDM3NSAtMC4wMTU2MjUgMy45NTMxMjUgLTAuMDMxMjUgNC4yMTg3NSAtMC4wMzEyNSBD IDQuNDY4NzUgLTAuMDMxMjUgNSAtMC4wMTU2MjUgNS4zMjgxMjUgMCBMIDUuMzI4MTI1IC0wLjMx MjUgQyA0LjY3MTg3NSAtMC4zMTI1IDQuNTYyNSAtMC4zMTI1IDQuNTYyNSAtMC43NSBMIDQuNTYy NSAtMi41OTM3NSBDIDQuNTYyNSAtMy42MjUgNS4yNjU2MjUgLTQuMTg3NSA1LjkwNjI1IC00LjE4 NzUgQyA2LjUzMTI1IC00LjE4NzUgNi42NDA2MjUgLTMuNjU2MjUgNi42NDA2MjUgLTMuMDc4MTI1 IEwgNi42NDA2MjUgLTAuNzUgQyA2LjY0MDYyNSAtMC4zMTI1IDYuNTMxMjUgLTAuMzEyNSA1Ljg1 OTM3NSAtMC4zMTI1IEwgNS44NTkzNzUgMCBDIDYuMjAzMTI1IC0wLjAxNTYyNSA2LjcxODc1IC0w LjAzMTI1IDYuOTg0Mzc1IC0wLjAzMTI1IEMgNy4yNSAtMC4wMzEyNSA3Ljc2NTYyNSAtMC4wMTU2 MjUgOC4xMDkzNzUgMCBMIDguMTA5Mzc1IC0wLjMxMjUgQyA3LjU5Mzc1IC0wLjMxMjUgNy4zNDM3 NSAtMC4zMTI1IDcuMzI4MTI1IC0wLjYwOTM3NSBMIDcuMzI4MTI1IC0yLjUxNTYyNSBDIDcuMzI4 MTI1IC0zLjM3NSA3LjMyODEyNSAtMy42NzE4NzUgNy4wMTU2MjUgLTQuMDMxMjUgQyA2Ljg3NSAt NC4yMDMxMjUgNi41NDY4NzUgLTQuNDA2MjUgNS45Njg3NSAtNC40MDYyNSBDIDUuMTQwNjI1IC00 LjQwNjI1IDQuNjg3NSAtMy44MTI1IDQuNTMxMjUgLTMuNDIxODc1IEMgNC4zOTA2MjUgLTQuMjk2 ODc1IDMuNjU2MjUgLTQuNDA2MjUgMy4yMDMxMjUgLTQuNDA2MjUgQyAyLjQ2ODc1IC00LjQwNjI1 IDIgLTMuOTg0Mzc1IDEuNzE4NzUgLTMuMzU5Mzc1IEwgMS43MTg3NSAtNC40MDYyNSBMIDAuMzEy NSAtNC4yOTY4NzUgTCAwLjMxMjUgLTMuOTg0Mzc1IEMgMS4wMTU2MjUgLTMuOTg0Mzc1IDEuMDkz NzUgLTMuOTIxODc1IDEuMDkzNzUgLTMuNDIxODc1IFogTSAxLjA5Mzc1IC0zLjQyMTg3NSAiLz4K PC9nPgo8ZyBpZD0iZ2x5cGgtMC04Ij4KPHBhdGggZD0iTSAzLjMxMjUgLTAuNzUgQyAzLjM1OTM3 NSAtMC4zNTkzNzUgMy42MjUgMC4wNjI1IDQuMDkzNzUgMC4wNjI1IEMgNC4zMTI1IDAuMDYyNSA0 LjkyMTg3NSAtMC4wNzgxMjUgNC45MjE4NzUgLTAuODkwNjI1IEwgNC45MjE4NzUgLTEuNDUzMTI1 IEwgNC42NzE4NzUgLTEuNDUzMTI1IEwgNC42NzE4NzUgLTAuODkwNjI1IEMgNC42NzE4NzUgLTAu MzEyNSA0LjQyMTg3NSAtMC4yNSA0LjMxMjUgLTAuMjUgQyAzLjk4NDM3NSAtMC4yNSAzLjkzNzUg LTAuNzAzMTI1IDMuOTM3NSAtMC43NSBMIDMuOTM3NSAtMi43MzQzNzUgQyAzLjkzNzUgLTMuMTU2 MjUgMy45Mzc1IC0zLjU0Njg3NSAzLjU3ODEyNSAtMy45MjE4NzUgQyAzLjE4NzUgLTQuMzEyNSAy LjY4NzUgLTQuNDY4NzUgMi4yMTg3NSAtNC40Njg3NSBDIDEuMzkwNjI1IC00LjQ2ODc1IDAuNzAz MTI1IC00IDAuNzAzMTI1IC0zLjM0Mzc1IEMgMC43MDMxMjUgLTMuMDQ2ODc1IDAuOTA2MjUgLTIu ODc1IDEuMTcxODc1IC0yLjg3NSBDIDEuNDUzMTI1IC0yLjg3NSAxLjYyNSAtMy4wNzgxMjUgMS42 MjUgLTMuMzI4MTI1IEMgMS42MjUgLTMuNDUzMTI1IDEuNTc4MTI1IC0zLjc4MTI1IDEuMTA5Mzc1 IC0zLjc4MTI1IEMgMS4zOTA2MjUgLTQuMTQwNjI1IDEuODc1IC00LjI1IDIuMTg3NSAtNC4yNSBD IDIuNjg3NSAtNC4yNSAzLjI1IC0zLjg1OTM3NSAzLjI1IC0yLjk2ODc1IEwgMy4yNSAtMi42MDkz NzUgQyAyLjczNDM3NSAtMi41NzgxMjUgMi4wNDY4NzUgLTIuNTQ2ODc1IDEuNDIxODc1IC0yLjI1 IEMgMC42NzE4NzUgLTEuOTA2MjUgMC40MjE4NzUgLTEuMzkwNjI1IDAuNDIxODc1IC0wLjk1MzEy NSBDIDAuNDIxODc1IC0wLjE0MDYyNSAxLjM5MDYyNSAwLjEwOTM3NSAyLjAxNTYyNSAwLjEwOTM3 NSBDIDIuNjcxODc1IDAuMTA5Mzc1IDMuMTI1IC0wLjI5Njg3NSAzLjMxMjUgLTAuNzUgWiBNIDMu MjUgLTIuMzkwNjI1IEwgMy4yNSAtMS4zOTA2MjUgQyAzLjI1IC0wLjQ1MzEyNSAyLjUzMTI1IC0w LjEwOTM3NSAyLjA3ODEyNSAtMC4xMDkzNzUgQyAxLjU5Mzc1IC0wLjEwOTM3NSAxLjE4NzUgLTAu NDUzMTI1IDEuMTg3NSAtMC45NTMxMjUgQyAxLjE4NzUgLTEuNSAxLjYwOTM3NSAtMi4zMjgxMjUg My4yNSAtMi4zOTA2MjUgWiBNIDMuMjUgLTIuMzkwNjI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0w LTkiPgo8cGF0aCBkPSJNIDEuNjcxODc1IC0zLjMxMjUgTCAxLjY3MTg3NSAtNC40MDYyNSBMIDAu MjgxMjUgLTQuMjk2ODc1IEwgMC4yODEyNSAtMy45ODQzNzUgQyAwLjk4NDM3NSAtMy45ODQzNzUg MS4wNjI1IC0zLjkyMTg3NSAxLjA2MjUgLTMuNDIxODc1IEwgMS4wNjI1IC0wLjc1IEMgMS4wNjI1 IC0wLjMxMjUgMC45NTMxMjUgLTAuMzEyNSAwLjI4MTI1IC0wLjMxMjUgTCAwLjI4MTI1IDAgQyAw LjY3MTg3NSAtMC4wMTU2MjUgMS4xNDA2MjUgLTAuMDMxMjUgMS40MjE4NzUgLTAuMDMxMjUgQyAx LjgxMjUgLTAuMDMxMjUgMi4yODEyNSAtMC4wMzEyNSAyLjY4NzUgMCBMIDIuNjg3NSAtMC4zMTI1 IEwgMi40Njg3NSAtMC4zMTI1IEMgMS43MzQzNzUgLTAuMzEyNSAxLjcxODc1IC0wLjQyMTg3NSAx LjcxODc1IC0wLjc4MTI1IEwgMS43MTg3NSAtMi4zMTI1IEMgMS43MTg3NSAtMy4yOTY4NzUgMi4x NDA2MjUgLTQuMTg3NSAyLjg5MDYyNSAtNC4xODc1IEMgMi45NTMxMjUgLTQuMTg3NSAyLjk4NDM3 NSAtNC4xODc1IDMgLTQuMTcxODc1IEMgMi45Njg3NSAtNC4xNzE4NzUgMi43NjU2MjUgLTQuMDQ2 ODc1IDIuNzY1NjI1IC0zLjc4MTI1IEMgMi43NjU2MjUgLTMuNTE1NjI1IDIuOTg0Mzc1IC0zLjM1 OTM3NSAzLjIwMzEyNSAtMy4zNTkzNzUgQyAzLjM3NSAtMy4zNTkzNzUgMy42MjUgLTMuNDg0Mzc1 IDMuNjI1IC0zLjc5Njg3NSBDIDMuNjI1IC00LjEwOTM3NSAzLjMxMjUgLTQuNDA2MjUgMi44OTA2 MjUgLTQuNDA2MjUgQyAyLjE1NjI1IC00LjQwNjI1IDEuNzk2ODc1IC0zLjczNDM3NSAxLjY3MTg3 NSAtMy4zMTI1IFogTSAxLjY3MTg3NSAtMy4zMTI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0wLTEw Ij4KPHBhdGggZD0iTSAyLjc1IC0xLjg1OTM3NSBMIDIuNzUgLTIuNDM3NSBMIDAuMTA5Mzc1IC0y LjQzNzUgTCAwLjEwOTM3NSAtMS44NTkzNzUgWiBNIDIuNzUgLTEuODU5Mzc1ICIvPgo8L2c+Cjxn IGlkPSJnbHlwaC0wLTExIj4KPHBhdGggZD0iTSAzLjc4MTI1IC0wLjU0Njg3NSBMIDMuNzgxMjUg MC4xMDkzNzUgTCA1LjI1IDAgTCA1LjI1IC0wLjMxMjUgQyA0LjU2MjUgLTAuMzEyNSA0LjQ2ODc1 IC0wLjM3NSA0LjQ2ODc1IC0wLjg3NSBMIDQuNDY4NzUgLTYuOTIxODc1IEwgMy4wNDY4NzUgLTYu ODEyNSBMIDMuMDQ2ODc1IC02LjUgQyAzLjczNDM3NSAtNi41IDMuODEyNSAtNi40Mzc1IDMuODEy NSAtNS45Mzc1IEwgMy44MTI1IC0zLjc4MTI1IEMgMy41MzEyNSAtNC4xNDA2MjUgMy4wOTM3NSAt NC40MDYyNSAyLjU2MjUgLTQuNDA2MjUgQyAxLjM5MDYyNSAtNC40MDYyNSAwLjM0Mzc1IC0zLjQy MTg3NSAwLjM0Mzc1IC0yLjE0MDYyNSBDIDAuMzQzNzUgLTAuODc1IDEuMzEyNSAwLjEwOTM3NSAy LjQ1MzEyNSAwLjEwOTM3NSBDIDMuMDkzNzUgMC4xMDkzNzUgMy41MzEyNSAtMC4yMzQzNzUgMy43 ODEyNSAtMC41NDY4NzUgWiBNIDMuNzgxMjUgLTMuMjE4NzUgTCAzLjc4MTI1IC0xLjE3MTg3NSBD IDMuNzgxMjUgLTEgMy43ODEyNSAtMC45ODQzNzUgMy42NzE4NzUgLTAuODEyNSBDIDMuMzc1IC0w LjMyODEyNSAyLjkzNzUgLTAuMTA5Mzc1IDIuNSAtMC4xMDkzNzUgQyAyLjA0Njg3NSAtMC4xMDkz NzUgMS42ODc1IC0wLjM3NSAxLjQ1MzEyNSAtMC43NSBDIDEuMjAzMTI1IC0xLjE1NjI1IDEuMTcx ODc1IC0xLjcxODc1IDEuMTcxODc1IC0yLjE0MDYyNSBDIDEuMTcxODc1IC0yLjUgMS4xODc1IC0z LjA5Mzc1IDEuNDY4NzUgLTMuNTQ2ODc1IEMgMS42ODc1IC0zLjg1OTM3NSAyLjA2MjUgLTQuMTg3 NSAyLjYwOTM3NSAtNC4xODc1IEMgMi45NTMxMjUgLTQuMTg3NSAzLjM3NSAtNC4wMzEyNSAzLjY3 MTg3NSAtMy41OTM3NSBDIDMuNzgxMjUgLTMuNDIxODc1IDMuNzgxMjUgLTMuNDA2MjUgMy43ODEy NSAtMy4yMTg3NSBaIE0gMy43ODEyNSAtMy4yMTg3NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMC0x MiI+CjxwYXRoIGQ9Ik0gNC40Njg3NSAtMy45ODQzNzUgTCA1LjYwOTM3NSAtMy45ODQzNzUgTCA1 LjYwOTM3NSAtNC4yOTY4NzUgTCA0LjQzNzUgLTQuMjk2ODc1IEwgNC40Mzc1IC01LjQ1MzEyNSBD IDQuNDM3NSAtNi4zNDM3NSA0LjkyMTg3NSAtNi44MTI1IDUuMzU5Mzc1IC02LjgxMjUgQyA1LjM5 MDYyNSAtNi44MTI1IDUuNTQ2ODc1IC02LjgxMjUgNS42ODc1IC02LjczNDM3NSBDIDUuNTc4MTI1 IC02LjcwMzEyNSA1LjM5MDYyNSAtNi41NjI1IDUuMzkwNjI1IC02LjMxMjUgQyA1LjM5MDYyNSAt Ni4wOTM3NSA1LjU0Njg3NSAtNS44OTA2MjUgNS44MjgxMjUgLTUuODkwNjI1IEMgNi4xMDkzNzUg LTUuODkwNjI1IDYuMjY1NjI1IC02LjA5Mzc1IDYuMjY1NjI1IC02LjMyODEyNSBDIDYuMjY1NjI1 IC02LjY4NzUgNS45MDYyNSAtNy4wMzEyNSA1LjM1OTM3NSAtNy4wMzEyNSBDIDQuNzY1NjI1IC03 LjAzMTI1IDQuMzI4MTI1IC02LjY1NjI1IDQuMjgxMjUgLTYuNjA5Mzc1IEMgMy45ODQzNzUgLTYu OTg0Mzc1IDMuNDIxODc1IC03LjAzMTI1IDMuMTU2MjUgLTcuMDMxMjUgQyAyLjIxODc1IC03LjAz MTI1IDEuMDYyNSAtNi41MTU2MjUgMS4wNjI1IC01LjQzNzUgTCAxLjA2MjUgLTQuMjk2ODc1IEwg MC4yNjU2MjUgLTQuMjk2ODc1IEwgMC4yNjU2MjUgLTMuOTg0Mzc1IEwgMS4wNjI1IC0zLjk4NDM3 NSBMIDEuMDYyNSAtMC43NSBDIDEuMDYyNSAtMC4zMTI1IDAuOTUzMTI1IC0wLjMxMjUgMC4yODEy NSAtMC4zMTI1IEwgMC4yODEyNSAwIEMgMC42MDkzNzUgLTAuMDE1NjI1IDEuMTQwNjI1IC0wLjAz MTI1IDEuMzkwNjI1IC0wLjAzMTI1IEMgMS42NDA2MjUgLTAuMDMxMjUgMi4xMjUgLTAuMDE1NjI1 IDIuNSAwIEwgMi41IC0wLjMxMjUgQyAxLjgyODEyNSAtMC4zMTI1IDEuNzE4NzUgLTAuMzEyNSAx LjcxODc1IC0wLjc1IEwgMS43MTg3NSAtMy45ODQzNzUgTCAzLjgxMjUgLTMuOTg0Mzc1IEwgMy44 MTI1IC0wLjc1IEMgMy44MTI1IC0wLjMxMjUgMy43MDMxMjUgLTAuMzEyNSAzLjAzMTI1IC0wLjMx MjUgTCAzLjAzMTI1IDAgQyAzLjQyMTg3NSAtMC4wMTU2MjUgMy44OTA2MjUgLTAuMDMxMjUgNC4x NzE4NzUgLTAuMDMxMjUgQyA0LjU2MjUgLTAuMDMxMjUgNS4wMzEyNSAtMC4wMzEyNSA1LjQzNzUg MCBMIDUuNDM3NSAtMC4zMTI1IEwgNS4yMTg3NSAtMC4zMTI1IEMgNC40ODQzNzUgLTAuMzEyNSA0 LjQ2ODc1IC0wLjQyMTg3NSA0LjQ2ODc1IC0wLjc4MTI1IFogTSAxLjY4NzUgLTQuMjk2ODc1IEwg MS42ODc1IC01LjQyMTg3NSBDIDEuNjg3NSAtNi4zOTA2MjUgMi41IC02LjgxMjUgMy4xNTYyNSAt Ni44MTI1IEMgMy42NDA2MjUgLTYuODEyNSAzLjkyMTg3NSAtNi42MjUgMy45MjE4NzUgLTYuNjI1 IEwgMy45MjE4NzUgLTYuNjA5Mzc1IEMgMy43NjU2MjUgLTYuNTkzNzUgMy41NjI1IC02LjQ1MzEy NSAzLjU2MjUgLTYuMTg3NSBDIDMuNTYyNSAtNi4xMjUgMy41NjI1IC01Ljg3NSAzLjg0Mzc1IC01 Ljc4MTI1IEMgMy44MTI1IC01LjY1NjI1IDMuODEyNSAtNS41NjI1IDMuODEyNSAtNS40Mzc1IEwg My44MTI1IC00LjI5Njg3NSBaIE0gMS42ODc1IC00LjI5Njg3NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5 cGgtMC0xMyI+CjxwYXRoIGQ9Ik0gMS4wOTM3NSAtMC43NSBDIDEuMDkzNzUgLTAuMzEyNSAwLjk4 NDM3NSAtMC4zMTI1IDAuMzEyNSAtMC4zMTI1IEwgMC4zMTI1IDAgQyAwLjY3MTg3NSAtMC4wMTU2 MjUgMS4xNzE4NzUgLTAuMDMxMjUgMS40NTMxMjUgLTAuMDMxMjUgQyAxLjcwMzEyNSAtMC4wMzEy NSAyLjIxODc1IC0wLjAxNTYyNSAyLjU2MjUgMCBMIDIuNTYyNSAtMC4zMTI1IEMgMS44OTA2MjUg LTAuMzEyNSAxLjc4MTI1IC0wLjMxMjUgMS43ODEyNSAtMC43NSBMIDEuNzgxMjUgLTIuNTkzNzUg QyAxLjc4MTI1IC0zLjYyNSAyLjUgLTQuMTg3NSAzLjEyNSAtNC4xODc1IEMgMy43NjU2MjUgLTQu MTg3NSAzLjg3NSAtMy42NTYyNSAzLjg3NSAtMy4wNzgxMjUgTCAzLjg3NSAtMC43NSBDIDMuODc1 IC0wLjMxMjUgMy43NjU2MjUgLTAuMzEyNSAzLjA5Mzc1IC0wLjMxMjUgTCAzLjA5Mzc1IDAgQyAz LjQzNzUgLTAuMDE1NjI1IDMuOTUzMTI1IC0wLjAzMTI1IDQuMjE4NzUgLTAuMDMxMjUgQyA0LjQ2 ODc1IC0wLjAzMTI1IDUgLTAuMDE1NjI1IDUuMzI4MTI1IDAgTCA1LjMyODEyNSAtMC4zMTI1IEMg NC44MTI1IC0wLjMxMjUgNC41NjI1IC0wLjMxMjUgNC41NjI1IC0wLjYwOTM3NSBMIDQuNTYyNSAt Mi41MTU2MjUgQyA0LjU2MjUgLTMuMzc1IDQuNTYyNSAtMy42NzE4NzUgNC4yNSAtNC4wMzEyNSBD IDQuMTA5Mzc1IC00LjIwMzEyNSAzLjc4MTI1IC00LjQwNjI1IDMuMjAzMTI1IC00LjQwNjI1IEMg Mi4zNTkzNzUgLTQuNDA2MjUgMS45MjE4NzUgLTMuODEyNSAxLjc1IC0zLjQyMTg3NSBMIDEuNzUg LTYuOTIxODc1IEwgMC4zMTI1IC02LjgxMjUgTCAwLjMxMjUgLTYuNSBDIDEuMDE1NjI1IC02LjUg MS4wOTM3NSAtNi40Mzc1IDEuMDkzNzUgLTUuOTM3NSBaIE0gMS4wOTM3NSAtMC43NSAiLz4KPC9n Pgo8ZyBpZD0iZ2x5cGgtMC0xNCI+CjxwYXRoIGQ9Ik0gMi4wNzgxMjUgLTEuOTM3NSBDIDIuMjk2 ODc1IC0xLjg5MDYyNSAzLjEwOTM3NSAtMS43MzQzNzUgMy4xMDkzNzUgLTEuMDE1NjI1IEMgMy4x MDkzNzUgLTAuNTE1NjI1IDIuNzY1NjI1IC0wLjEwOTM3NSAxLjk4NDM3NSAtMC4xMDkzNzUgQyAx LjE0MDYyNSAtMC4xMDkzNzUgMC43ODEyNSAtMC42NzE4NzUgMC41OTM3NSAtMS41MzEyNSBDIDAu NTYyNSAtMS42NTYyNSAwLjU2MjUgLTEuNjg3NSAwLjQ1MzEyNSAtMS42ODc1IEMgMC4zMjgxMjUg LTEuNjg3NSAwLjMyODEyNSAtMS42MjUgMC4zMjgxMjUgLTEuNDUzMTI1IEwgMC4zMjgxMjUgLTAu MTI1IEMgMC4zMjgxMjUgMC4wNDY4NzUgMC4zMjgxMjUgMC4xMDkzNzUgMC40Mzc1IDAuMTA5Mzc1 IEMgMC40ODQzNzUgMC4xMDkzNzUgMC41IDAuMDkzNzUgMC42ODc1IC0wLjA5Mzc1IEMgMC43MDMx MjUgLTAuMTA5Mzc1IDAuNzAzMTI1IC0wLjEyNSAwLjg5MDYyNSAtMC4zMTI1IEMgMS4zMjgxMjUg MC4wOTM3NSAxLjc4MTI1IDAuMTA5Mzc1IDEuOTg0Mzc1IDAuMTA5Mzc1IEMgMy4xMjUgMC4xMDkz NzUgMy41OTM3NSAtMC41NjI1IDMuNTkzNzUgLTEuMjgxMjUgQyAzLjU5Mzc1IC0xLjc5Njg3NSAz LjI5Njg3NSAtMi4xMDkzNzUgMy4xNzE4NzUgLTIuMjE4NzUgQyAyLjg0Mzc1IC0yLjU0Njg3NSAy LjQ1MzEyNSAtMi42MjUgMi4wMzEyNSAtMi43MDMxMjUgQyAxLjQ2ODc1IC0yLjgxMjUgMC44MTI1 IC0yLjkzNzUgMC44MTI1IC0zLjUxNTYyNSBDIDAuODEyNSAtMy44NzUgMS4wNjI1IC00LjI4MTI1 IDEuOTIxODc1IC00LjI4MTI1IEMgMy4wMTU2MjUgLTQuMjgxMjUgMy4wNzgxMjUgLTMuMzc1IDMu MDkzNzUgLTMuMDc4MTI1IEMgMy4wOTM3NSAtMi45ODQzNzUgMy4xODc1IC0yLjk4NDM3NSAzLjIw MzEyNSAtMi45ODQzNzUgQyAzLjM0Mzc1IC0yLjk4NDM3NSAzLjM0Mzc1IC0zLjAzMTI1IDMuMzQz NzUgLTMuMjE4NzUgTCAzLjM0Mzc1IC00LjIzNDM3NSBDIDMuMzQzNzUgLTQuMzkwNjI1IDMuMzQz NzUgLTQuNDY4NzUgMy4yMzQzNzUgLTQuNDY4NzUgQyAzLjE4NzUgLTQuNDY4NzUgMy4xNTYyNSAt NC40Njg3NSAzLjAzMTI1IC00LjM0Mzc1IEMgMyAtNC4zMTI1IDIuOTA2MjUgLTQuMjE4NzUgMi44 NTkzNzUgLTQuMTg3NSBDIDIuNDg0Mzc1IC00LjQ2ODc1IDIuMDc4MTI1IC00LjQ2ODc1IDEuOTIx ODc1IC00LjQ2ODc1IEMgMC43MDMxMjUgLTQuNDY4NzUgMC4zMjgxMjUgLTMuNzk2ODc1IDAuMzI4 MTI1IC0zLjIzNDM3NSBDIDAuMzI4MTI1IC0yLjg5MDYyNSAwLjQ4NDM3NSAtMi42MDkzNzUgMC43 NSAtMi4zOTA2MjUgQyAxLjA3ODEyNSAtMi4xNDA2MjUgMS4zNTkzNzUgLTIuMDc4MTI1IDIuMDc4 MTI1IC0xLjkzNzUgWiBNIDIuMDc4MTI1IC0xLjkzNzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTAt MTUiPgo8cGF0aCBkPSJNIDEuNzE4NzUgLTMuOTg0Mzc1IEwgMy4xNTYyNSAtMy45ODQzNzUgTCAz LjE1NjI1IC00LjI5Njg3NSBMIDEuNzE4NzUgLTQuMjk2ODc1IEwgMS43MTg3NSAtNi4xMjUgTCAx LjQ2ODc1IC02LjEyNSBDIDEuNDY4NzUgLTUuMzEyNSAxLjE3MTg3NSAtNC4yNSAwLjE4NzUgLTQu MjAzMTI1IEwgMC4xODc1IC0zLjk4NDM3NSBMIDEuMDMxMjUgLTMuOTg0Mzc1IEwgMS4wMzEyNSAt MS4yMzQzNzUgQyAxLjAzMTI1IC0wLjAxNTYyNSAxLjk2ODc1IDAuMTA5Mzc1IDIuMzI4MTI1IDAu MTA5Mzc1IEMgMy4wMzEyNSAwLjEwOTM3NSAzLjMxMjUgLTAuNTkzNzUgMy4zMTI1IC0xLjIzNDM3 NSBMIDMuMzEyNSAtMS43OTY4NzUgTCAzLjA2MjUgLTEuNzk2ODc1IEwgMy4wNjI1IC0xLjI1IEMg My4wNjI1IC0wLjUxNTYyNSAyLjc2NTYyNSAtMC4xNDA2MjUgMi4zOTA2MjUgLTAuMTQwNjI1IEMg MS43MTg3NSAtMC4xNDA2MjUgMS43MTg3NSAtMS4wNDY4NzUgMS43MTg3NSAtMS4yMTg3NSBaIE0g MS43MTg3NSAtMy45ODQzNzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTAtMTYiPgo8cGF0aCBkPSJN IDQuNjg3NSAtMi4xNDA2MjUgQyA0LjY4NzUgLTMuNDA2MjUgMy43MDMxMjUgLTQuNDY4NzUgMi41 IC00LjQ2ODc1IEMgMS4yNSAtNC40Njg3NSAwLjI4MTI1IC0zLjM3NSAwLjI4MTI1IC0yLjE0MDYy NSBDIDAuMjgxMjUgLTAuODQzNzUgMS4zMTI1IDAuMTA5Mzc1IDIuNDg0Mzc1IDAuMTA5Mzc1IEMg My42ODc1IDAuMTA5Mzc1IDQuNjg3NSAtMC44NzUgNC42ODc1IC0yLjE0MDYyNSBaIE0gMi41IC0w LjE0MDYyNSBDIDIuMDYyNSAtMC4xNDA2MjUgMS42MjUgLTAuMzQzNzUgMS4zNTkzNzUgLTAuODEy NSBDIDEuMTA5Mzc1IC0xLjI1IDEuMTA5Mzc1IC0xLjg1OTM3NSAxLjEwOTM3NSAtMi4yMTg3NSBD IDEuMTA5Mzc1IC0yLjYwOTM3NSAxLjEwOTM3NSAtMy4xNDA2MjUgMS4zNDM3NSAtMy41NzgxMjUg QyAxLjYwOTM3NSAtNC4wMzEyNSAyLjA3ODEyNSAtNC4yNSAyLjQ4NDM3NSAtNC4yNSBDIDIuOTIx ODc1IC00LjI1IDMuMzQzNzUgLTQuMDMxMjUgMy42MDkzNzUgLTMuNTkzNzUgQyAzLjg3NSAtMy4x NzE4NzUgMy44NzUgLTIuNTkzNzUgMy44NzUgLTIuMjE4NzUgQyAzLjg3NSAtMS44NTkzNzUgMy44 NzUgLTEuMzEyNSAzLjY1NjI1IC0wLjg3NSBDIDMuNDIxODc1IC0wLjQyMTg3NSAyLjk4NDM3NSAt MC4xNDA2MjUgMi41IC0wLjE0MDYyNSBaIE0gMi41IC0wLjE0MDYyNSAiLz4KPC9nPgo8ZyBpZD0i Z2x5cGgtMC0xNyI+CjxwYXRoIGQ9Ik0gMi4yMTg3NSAtMS43MTg3NSBDIDEuMzQzNzUgLTEuNzE4 NzUgMS4zNDM3NSAtMi43MTg3NSAxLjM0Mzc1IC0yLjkzNzUgQyAxLjM0Mzc1IC0zLjIwMzEyNSAx LjM1OTM3NSAtMy41MzEyNSAxLjUgLTMuNzgxMjUgQyAxLjU3ODEyNSAtMy44OTA2MjUgMS44MTI1 IC00LjE3MTg3NSAyLjIxODc1IC00LjE3MTg3NSBDIDMuMDc4MTI1IC00LjE3MTg3NSAzLjA3ODEy NSAtMy4xODc1IDMuMDc4MTI1IC0yLjk1MzEyNSBDIDMuMDc4MTI1IC0yLjY4NzUgMy4wNzgxMjUg LTIuMzU5Mzc1IDIuOTIxODc1IC0yLjEwOTM3NSBDIDIuODQzNzUgLTIgMi42MDkzNzUgLTEuNzE4 NzUgMi4yMTg3NSAtMS43MTg3NSBaIE0gMS4wNjI1IC0xLjMyODEyNSBDIDEuMDYyNSAtMS4zNTkz NzUgMS4wNjI1IC0xLjU5Mzc1IDEuMjE4NzUgLTEuNzk2ODc1IEMgMS42MDkzNzUgLTEuNTE1NjI1 IDIuMDMxMjUgLTEuNDg0Mzc1IDIuMjE4NzUgLTEuNDg0Mzc1IEMgMy4xNDA2MjUgLTEuNDg0Mzc1 IDMuODI4MTI1IC0yLjE3MTg3NSAzLjgyODEyNSAtMi45Mzc1IEMgMy44MjgxMjUgLTMuMzEyNSAz LjY3MTg3NSAtMy42NzE4NzUgMy40MjE4NzUgLTMuOTA2MjUgQyAzLjc4MTI1IC00LjI1IDQuMTQw NjI1IC00LjI5Njg3NSA0LjMxMjUgLTQuMjk2ODc1IEMgNC4zNDM3NSAtNC4yOTY4NzUgNC4zOTA2 MjUgLTQuMjk2ODc1IDQuNDIxODc1IC00LjI4MTI1IEMgNC4zMTI1IC00LjI1IDQuMjUgLTQuMTQw NjI1IDQuMjUgLTQuMDE1NjI1IEMgNC4yNSAtMy44NDM3NSA0LjM5MDYyNSAtMy43MzQzNzUgNC41 NDY4NzUgLTMuNzM0Mzc1IEMgNC42NDA2MjUgLTMuNzM0Mzc1IDQuODI4MTI1IC0zLjc5Njg3NSA0 LjgyODEyNSAtNC4wMzEyNSBDIDQuODI4MTI1IC00LjIwMzEyNSA0LjcxODc1IC00LjUxNTYyNSA0 LjMyODEyNSAtNC41MTU2MjUgQyA0LjEyNSAtNC41MTU2MjUgMy42ODc1IC00LjQ1MzEyNSAzLjI2 NTYyNSAtNC4wNDY4NzUgQyAyLjg0Mzc1IC00LjM3NSAyLjQzNzUgLTQuNDA2MjUgMi4yMTg3NSAt NC40MDYyNSBDIDEuMjgxMjUgLTQuNDA2MjUgMC41OTM3NSAtMy43MTg3NSAwLjU5Mzc1IC0yLjk1 MzEyNSBDIDAuNTkzNzUgLTIuNTE1NjI1IDAuODEyNSAtMi4xNDA2MjUgMS4wNjI1IC0xLjkyMTg3 NSBDIDAuOTM3NSAtMS43ODEyNSAwLjc1IC0xLjQ1MzEyNSAwLjc1IC0xLjA5Mzc1IEMgMC43NSAt MC43ODEyNSAwLjg5MDYyNSAtMC40MDYyNSAxLjIwMzEyNSAtMC4yMDMxMjUgQyAwLjU5Mzc1IC0w LjA0Njg3NSAwLjI4MTI1IDAuMzkwNjI1IDAuMjgxMjUgMC43ODEyNSBDIDAuMjgxMjUgMS41IDEu MjY1NjI1IDIuMDQ2ODc1IDIuNDg0Mzc1IDIuMDQ2ODc1IEMgMy42NTYyNSAyLjA0Njg3NSA0LjY4 NzUgMS41NDY4NzUgNC42ODc1IDAuNzY1NjI1IEMgNC42ODc1IDAuNDIxODc1IDQuNTYyNSAtMC4w OTM3NSA0LjA0Njg3NSAtMC4zNzUgQyAzLjUxNTYyNSAtMC42NDA2MjUgMi45Mzc1IC0wLjY0MDYy NSAyLjMyODEyNSAtMC42NDA2MjUgQyAyLjA3ODEyNSAtMC42NDA2MjUgMS42NTYyNSAtMC42NDA2 MjUgMS41NzgxMjUgLTAuNjU2MjUgQyAxLjI2NTYyNSAtMC43MDMxMjUgMS4wNjI1IC0xIDEuMDYy NSAtMS4zMjgxMjUgWiBNIDIuNSAxLjgyODEyNSBDIDEuNDg0Mzc1IDEuODI4MTI1IDAuNzk2ODc1 IDEuMzEyNSAwLjc5Njg3NSAwLjc4MTI1IEMgMC43OTY4NzUgMC4zMjgxMjUgMS4xNzE4NzUgLTAu MDQ2ODc1IDEuNjA5Mzc1IC0wLjA2MjUgTCAyLjIwMzEyNSAtMC4wNjI1IEMgMy4wNjI1IC0wLjA2 MjUgNC4xNzE4NzUgLTAuMDYyNSA0LjE3MTg3NSAwLjc4MTI1IEMgNC4xNzE4NzUgMS4zMjgxMjUg My40Njg3NSAxLjgyODEyNSAyLjUgMS44MjgxMjUgWiBNIDIuNSAxLjgyODEyNSAiLz4KPC9nPgo8 ZyBpZD0iZ2x5cGgtMC0xOCI+CjxwYXRoIGQ9Ik0gNC4xNDA2MjUgLTMuMzQzNzUgQyA0LjM5MDYy NSAtMy45ODQzNzUgNC45MDYyNSAtMy45ODQzNzUgNS4wNjI1IC0zLjk4NDM3NSBMIDUuMDYyNSAt NC4yOTY4NzUgQyA0LjgyODEyNSAtNC4yODEyNSA0LjU0Njg3NSAtNC4yNjU2MjUgNC4zMTI1IC00 LjI2NTYyNSBDIDQuMTQwNjI1IC00LjI2NTYyNSAzLjY3MTg3NSAtNC4yODEyNSAzLjQ1MzEyNSAt NC4yOTY4NzUgTCAzLjQ1MzEyNSAtMy45ODQzNzUgQyAzLjc2NTYyNSAtMy45ODQzNzUgMy45MjE4 NzUgLTMuODEyNSAzLjkyMTg3NSAtMy41NjI1IEMgMy45MjE4NzUgLTMuNDUzMTI1IDMuOTA2MjUg LTMuNDM3NSAzLjg1OTM3NSAtMy4zMTI1IEwgMi44NDM3NSAtMC44NzUgTCAxLjc1IC0zLjU0Njg3 NSBDIDEuNzAzMTI1IC0zLjY1NjI1IDEuNjg3NSAtMy42ODc1IDEuNjg3NSAtMy43MzQzNzUgQyAx LjY4NzUgLTMuOTg0Mzc1IDIuMDQ2ODc1IC0zLjk4NDM3NSAyLjI1IC0zLjk4NDM3NSBMIDIuMjUg LTQuMjk2ODc1IEMgMS45ODQzNzUgLTQuMjgxMjUgMS4zMjgxMjUgLTQuMjY1NjI1IDEuMTU2MjUg LTQuMjY1NjI1IEMgMC44OTA2MjUgLTQuMjY1NjI1IDAuNDg0Mzc1IC00LjI4MTI1IDAuMTg3NSAt NC4yOTY4NzUgTCAwLjE4NzUgLTMuOTg0Mzc1IEMgMC42NzE4NzUgLTMuOTg0Mzc1IDAuODU5Mzc1 IC0zLjk4NDM3NSAxIC0zLjY0MDYyNSBMIDIuNSAwIEMgMi40Mzc1IDAuMTI1IDIuMjk2ODc1IDAu NDUzMTI1IDIuMjUgMC41OTM3NSBDIDIuMDMxMjUgMS4xNDA2MjUgMS43NSAxLjgyODEyNSAxLjEw OTM3NSAxLjgyODEyNSBDIDEuMDYyNSAxLjgyODEyNSAwLjgyODEyNSAxLjgyODEyNSAwLjY0MDYy NSAxLjY0MDYyNSBDIDAuOTUzMTI1IDEuNjA5Mzc1IDEuMDMxMjUgMS4zOTA2MjUgMS4wMzEyNSAx LjIxODc1IEMgMS4wMzEyNSAwLjk2ODc1IDAuODQzNzUgMC44MTI1IDAuNjA5Mzc1IDAuODEyNSBD IDAuNDA2MjUgMC44MTI1IDAuMTg3NSAwLjkzNzUgMC4xODc1IDEuMjM0Mzc1IEMgMC4xODc1IDEu Njg3NSAwLjYwOTM3NSAyLjA0Njg3NSAxLjEwOTM3NSAyLjA0Njg3NSBDIDEuNzM0Mzc1IDIuMDQ2 ODc1IDIuMTQwNjI1IDEuNDY4NzUgMi4zNzUgMC45MDYyNSBaIE0gNC4xNDA2MjUgLTMuMzQzNzUg Ii8+CjwvZz4KPGcgaWQ9ImdseXBoLTAtMTkiPgo8cGF0aCBkPSJNIDEuMTA5Mzc1IC0yLjUxNTYy NSBDIDEuMTcxODc1IC00IDIuMDE1NjI1IC00LjI1IDIuMzU5Mzc1IC00LjI1IEMgMy4zNzUgLTQu MjUgMy40ODQzNzUgLTIuOTA2MjUgMy40ODQzNzUgLTIuNTE1NjI1IFogTSAxLjEwOTM3NSAtMi4y OTY4NzUgTCAzLjg5MDYyNSAtMi4yOTY4NzUgQyA0LjEwOTM3NSAtMi4yOTY4NzUgNC4xNDA2MjUg LTIuMjk2ODc1IDQuMTQwNjI1IC0yLjUxNTYyNSBDIDQuMTQwNjI1IC0zLjUgMy41OTM3NSAtNC40 Njg3NSAyLjM1OTM3NSAtNC40Njg3NSBDIDEuMjAzMTI1IC00LjQ2ODc1IDAuMjgxMjUgLTMuNDM3 NSAwLjI4MTI1IC0yLjE4NzUgQyAwLjI4MTI1IC0wLjg1OTM3NSAxLjMyODEyNSAwLjEwOTM3NSAy LjQ2ODc1IDAuMTA5Mzc1IEMgMy42ODc1IDAuMTA5Mzc1IDQuMTQwNjI1IC0xIDQuMTQwNjI1IC0x LjE4NzUgQyA0LjE0MDYyNSAtMS4yODEyNSA0LjA2MjUgLTEuMzEyNSA0IC0xLjMxMjUgQyAzLjky MTg3NSAtMS4zMTI1IDMuODkwNjI1IC0xLjI1IDMuODc1IC0xLjE3MTg3NSBDIDMuNTMxMjUgLTAu MTQwNjI1IDIuNjI1IC0wLjE0MDYyNSAyLjUzMTI1IC0wLjE0MDYyNSBDIDIuMDMxMjUgLTAuMTQw NjI1IDEuNjQwNjI1IC0wLjQzNzUgMS40MDYyNSAtMC44MTI1IEMgMS4xMDkzNzUgLTEuMjgxMjUg MS4xMDkzNzUgLTEuOTM3NSAxLjEwOTM3NSAtMi4yOTY4NzUgWiBNIDEuMTA5Mzc1IC0yLjI5Njg3 NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMC0yMCI+CjxwYXRoIGQ9Ik0gMS43NjU2MjUgLTYuOTIx ODc1IEwgMC4zMjgxMjUgLTYuODEyNSBMIDAuMzI4MTI1IC02LjUgQyAxLjAzMTI1IC02LjUgMS4x MDkzNzUgLTYuNDM3NSAxLjEwOTM3NSAtNS45Mzc1IEwgMS4xMDkzNzUgLTAuNzUgQyAxLjEwOTM3 NSAtMC4zMTI1IDEgLTAuMzEyNSAwLjMyODEyNSAtMC4zMTI1IEwgMC4zMjgxMjUgMCBDIDAuNjU2 MjUgLTAuMDE1NjI1IDEuMTg3NSAtMC4wMzEyNSAxLjQzNzUgLTAuMDMxMjUgQyAxLjY4NzUgLTAu MDMxMjUgMi4xNzE4NzUgLTAuMDE1NjI1IDIuNTQ2ODc1IDAgTCAyLjU0Njg3NSAtMC4zMTI1IEMg MS44NzUgLTAuMzEyNSAxLjc2NTYyNSAtMC4zMTI1IDEuNzY1NjI1IC0wLjc1IFogTSAxLjc2NTYy NSAtNi45MjE4NzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTEtMCI+CjwvZz4KPGcgaWQ9ImdseXBo LTEtMSI+CjxwYXRoIGQ9Ik0gMy42ODc1IC0xLjE0MDYyNSBMIDMuNjg3NSAtMS4zOTA2MjUgTCAy LjkwNjI1IC0xLjM5MDYyNSBMIDIuOTA2MjUgLTQuNSBDIDIuOTA2MjUgLTQuNjQwNjI1IDIuOTA2 MjUgLTQuNzAzMTI1IDIuNzY1NjI1IC00LjcwMzEyNSBDIDIuNjcxODc1IC00LjcwMzEyNSAyLjY0 MDYyNSAtNC43MDMxMjUgMi41NzgxMjUgLTQuNTkzNzUgTCAwLjI2NTYyNSAtMS4zOTA2MjUgTCAw LjI2NTYyNSAtMS4xNDA2MjUgTCAyLjMyODEyNSAtMS4xNDA2MjUgTCAyLjMyODEyNSAtMC41Nzgx MjUgQyAyLjMyODEyNSAtMC4zMjgxMjUgMi4zMjgxMjUgLTAuMjUgMS43NSAtMC4yNSBMIDEuNTYy NSAtMC4yNSBMIDEuNTYyNSAwIEMgMS45MjE4NzUgLTAuMDE1NjI1IDIuMzU5Mzc1IC0wLjAzMTI1 IDIuNjA5Mzc1IC0wLjAzMTI1IEMgMi44NzUgLTAuMDMxMjUgMy4zMTI1IC0wLjAxNTYyNSAzLjY3 MTg3NSAwIEwgMy42NzE4NzUgLTAuMjUgTCAzLjQ4NDM3NSAtMC4yNSBDIDIuOTA2MjUgLTAuMjUg Mi45MDYyNSAtMC4zMjgxMjUgMi45MDYyNSAtMC41NzgxMjUgTCAyLjkwNjI1IC0xLjE0MDYyNSBa IE0gMi4zNzUgLTMuOTM3NSBMIDIuMzc1IC0xLjM5MDYyNSBMIDAuNTMxMjUgLTEuMzkwNjI1IFog TSAyLjM3NSAtMy45Mzc1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0xLTIiPgo8cGF0aCBkPSJNIDEu MDc4MTI1IC0zLjg5MDYyNSBDIDEuNDM3NSAtMy43OTY4NzUgMS42NDA2MjUgLTMuNzk2ODc1IDEu NzUgLTMuNzk2ODc1IEMgMi42NzE4NzUgLTMuNzk2ODc1IDMuMjE4NzUgLTQuNDIxODc1IDMuMjE4 NzUgLTQuNTMxMjUgQyAzLjIxODc1IC00LjYwOTM3NSAzLjE3MTg3NSAtNC42MjUgMy4xNDA2MjUg LTQuNjI1IEMgMy4xMjUgLTQuNjI1IDMuMTA5Mzc1IC00LjYyNSAzLjA3ODEyNSAtNC42MDkzNzUg QyAyLjkwNjI1IC00LjU0Njg3NSAyLjU0Njg3NSAtNC40MDYyNSAyLjAzMTI1IC00LjQwNjI1IEMg MS44MjgxMjUgLTQuNDA2MjUgMS40Njg3NSAtNC40MjE4NzUgMS4wMTU2MjUgLTQuNTkzNzUgQyAw LjkzNzUgLTQuNjI1IDAuOTIxODc1IC00LjYyNSAwLjkyMTg3NSAtNC42MjUgQyAwLjgyODEyNSAt NC42MjUgMC44MjgxMjUgLTQuNTQ2ODc1IDAuODI4MTI1IC00LjQzNzUgTCAwLjgyODEyNSAtMi4z OTA2MjUgQyAwLjgyODEyNSAtMi4yNjU2MjUgMC44MjgxMjUgLTIuMTg3NSAwLjkzNzUgLTIuMTg3 NSBDIDEgLTIuMTg3NSAxLjAxNTYyNSAtMi4xODc1IDEuMDc4MTI1IC0yLjI4MTI1IEMgMS4zNzUg LTIuNjU2MjUgMS44MTI1IC0yLjcxODc1IDIuMDQ2ODc1IC0yLjcxODc1IEMgMi40Njg3NSAtMi43 MTg3NSAyLjY1NjI1IC0yLjM5MDYyNSAyLjY4NzUgLTIuMzI4MTI1IEMgMi44MTI1IC0yLjA5Mzc1 IDIuODU5Mzc1IC0xLjgyODEyNSAyLjg1OTM3NSAtMS40MjE4NzUgQyAyLjg1OTM3NSAtMS4yMTg3 NSAyLjg1OTM3NSAtMC44MTI1IDIuNjQwNjI1IC0wLjUgQyAyLjQ2ODc1IC0wLjI1IDIuMTcxODc1 IC0wLjA3ODEyNSAxLjgyODEyNSAtMC4wNzgxMjUgQyAxLjM3NSAtMC4wNzgxMjUgMC45MDYyNSAt MC4zMjgxMjUgMC43MzQzNzUgLTAuNzk2ODc1IEMgMSAtMC43ODEyNSAxLjE0MDYyNSAtMC45NTMx MjUgMS4xNDA2MjUgLTEuMTQwNjI1IEMgMS4xNDA2MjUgLTEuNDM3NSAwLjg3NSAtMS40ODQzNzUg MC43ODEyNSAtMS40ODQzNzUgQyAwLjc4MTI1IC0xLjQ4NDM3NSAwLjQzNzUgLTEuNDg0Mzc1IDAu NDM3NSAtMS4xMDkzNzUgQyAwLjQzNzUgLTAuNDg0Mzc1IDEuMDE1NjI1IDAuMTQwNjI1IDEuODQz NzUgMC4xNDA2MjUgQyAyLjczNDM3NSAwLjE0MDYyNSAzLjUxNTYyNSAtMC41MTU2MjUgMy41MTU2 MjUgLTEuNDA2MjUgQyAzLjUxNTYyNSAtMi4xODc1IDIuOTIxODc1IC0yLjkwNjI1IDIuMDYyNSAt Mi45MDYyNSBDIDEuNzUgLTIuOTA2MjUgMS4zOTA2MjUgLTIuODQzNzUgMS4wNzgxMjUgLTIuNTc4 MTI1IFogTSAxLjA3ODEyNSAtMy44OTA2MjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTEtMyI+Cjxw YXRoIGQ9Ik0gMS4wNDY4NzUgLTIuMjgxMjUgQyAxLjA0Njg3NSAtMi44NDM3NSAxLjA5Mzc1IC0z LjM1OTM3NSAxLjM1OTM3NSAtMy43OTY4NzUgQyAxLjU5Mzc1IC00LjE3MTg3NSAxLjk2ODc1IC00 LjQyMTg3NSAyLjQyMTg3NSAtNC40MjE4NzUgQyAyLjYyNSAtNC40MjE4NzUgMi45MDYyNSAtNC4z NzUgMy4wNDY4NzUgLTQuMTg3NSBDIDIuODc1IC00LjE3MTg3NSAyLjcxODc1IC00LjA0Njg3NSAy LjcxODc1IC0zLjg0Mzc1IEMgMi43MTg3NSAtMy42NzE4NzUgMi44NDM3NSAtMy41MTU2MjUgMy4w NDY4NzUgLTMuNTE1NjI1IEMgMy4yNjU2MjUgLTMuNTE1NjI1IDMuMzkwNjI1IC0zLjY1NjI1IDMu MzkwNjI1IC0zLjg1OTM3NSBDIDMuMzkwNjI1IC00LjI2NTYyNSAzLjA5Mzc1IC00LjYyNSAyLjQw NjI1IC00LjYyNSBDIDEuNDA2MjUgLTQuNjI1IDAuMzc1IC0zLjcwMzEyNSAwLjM3NSAtMi4yMDMx MjUgQyAwLjM3NSAtMC40MDYyNSAxLjIxODc1IDAuMTQwNjI1IDIgMC4xNDA2MjUgQyAyLjg0Mzc1 IDAuMTQwNjI1IDMuNTc4MTI1IC0wLjUxNTYyNSAzLjU3ODEyNSAtMS40MjE4NzUgQyAzLjU3ODEy NSAtMi4zMTI1IDIuODc1IC0yLjk2ODc1IDIuMDYyNSAtMi45Njg3NSBDIDEuNSAtMi45Njg3NSAx LjIwMzEyNSAtMi41OTM3NSAxLjA0Njg3NSAtMi4yODEyNSBaIE0gMiAtMC4wNzgxMjUgQyAxLjY0 MDYyNSAtMC4wNzgxMjUgMS4zNzUgLTAuMjgxMjUgMS4yMTg3NSAtMC41OTM3NSBDIDEuMTI1IC0w Ljc5Njg3NSAxLjA2MjUgLTEuMTU2MjUgMS4wNjI1IC0xLjU2MjUgQyAxLjA2MjUgLTIuMjUgMS40 Njg3NSAtMi43NjU2MjUgMi4wMzEyNSAtMi43NjU2MjUgQyAyLjM0Mzc1IC0yLjc2NTYyNSAyLjU2 MjUgLTIuNjQwNjI1IDIuNzM0Mzc1IC0yLjM5MDYyNSBDIDIuOTA2MjUgLTIuMTI1IDIuOTA2MjUg LTEuODI4MTI1IDIuOTA2MjUgLTEuNDIxODc1IEMgMi45MDYyNSAtMS4wMzEyNSAyLjkwNjI1IC0w LjczNDM3NSAyLjcxODc1IC0wLjQ1MzEyNSBDIDIuNTYyNSAtMC4yMTg3NSAyLjMyODEyNSAtMC4w NzgxMjUgMiAtMC4wNzgxMjUgWiBNIDIgLTAuMDc4MTI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0x LTQiPgo8cGF0aCBkPSJNIDMuNzM0Mzc1IC00LjIwMzEyNSBDIDMuNzk2ODc1IC00LjI5Njg3NSAz Ljc5Njg3NSAtNC4zMTI1IDMuNzk2ODc1IC00LjQ4NDM3NSBMIDEuOTY4NzUgLTQuNDg0Mzc1IEMg MS42ODc1IC00LjQ4NDM3NSAxLjYwOTM3NSAtNC41IDEuMzU5Mzc1IC00LjUxNTYyNSBDIDEgLTQu NTQ2ODc1IDAuOTg0Mzc1IC00LjU5Mzc1IDAuOTY4NzUgLTQuNzAzMTI1IEwgMC43MzQzNzUgLTQu NzAzMTI1IEwgMC40ODQzNzUgLTMuMjE4NzUgTCAwLjcxODc1IC0zLjIxODc1IEMgMC43MzQzNzUg LTMuMzI4MTI1IDAuODEyNSAtMy43ODEyNSAwLjkyMTg3NSAtMy44NTkzNzUgQyAwLjk2ODc1IC0z Ljg5MDYyNSAxLjU0Njg3NSAtMy44OTA2MjUgMS42NDA2MjUgLTMuODkwNjI1IEwgMy4xNTYyNSAt My44OTA2MjUgQyAyLjkzNzUgLTMuNjA5Mzc1IDIuNTc4MTI1IC0zLjE3MTg3NSAyLjQzNzUgLTIu OTY4NzUgQyAxLjUzMTI1IC0xLjc4MTI1IDEuNDM3NSAtMC42NzE4NzUgMS40Mzc1IC0wLjI2NTYy NSBDIDEuNDM3NSAtMC4xODc1IDEuNDM3NSAwLjE0MDYyNSAxLjc2NTYyNSAwLjE0MDYyNSBDIDIu MTA5Mzc1IDAuMTQwNjI1IDIuMTA5Mzc1IC0wLjE3MTg3NSAyLjEwOTM3NSAtMC4yNjU2MjUgTCAy LjEwOTM3NSAtMC41NDY4NzUgQyAyLjEwOTM3NSAtMS44OTA2MjUgMi4zOTA2MjUgLTIuNTE1NjI1 IDIuNjg3NSAtMi44OTA2MjUgWiBNIDMuNzM0Mzc1IC00LjIwMzEyNSAiLz4KPC9nPgo8ZyBpZD0i Z2x5cGgtMS01Ij4KPHBhdGggZD0iTSAyLjQ2ODc1IC0yLjUxNTYyNSBDIDMuMDE1NjI1IC0yLjc4 MTI1IDMuMzU5Mzc1IC0zLjEwOTM3NSAzLjM1OTM3NSAtMy41OTM3NSBDIDMuMzU5Mzc1IC00LjI2 NTYyNSAyLjY1NjI1IC00LjYyNSAxLjk4NDM3NSAtNC42MjUgQyAxLjIxODc1IC00LjYyNSAwLjU5 Mzc1IC00LjEyNSAwLjU5Mzc1IC0zLjQ2ODc1IEMgMC41OTM3NSAtMy4xNDA2MjUgMC43NSAtMi45 MDYyNSAwLjg3NSAtMi43NjU2MjUgQyAxIC0yLjYwOTM3NSAxLjA0Njg3NSAtMi41NzgxMjUgMS40 NTMxMjUgLTIuMzQzNzUgQyAxLjA2MjUgLTIuMTcxODc1IDAuMzc1IC0xLjc5Njg3NSAwLjM3NSAt MS4wNjI1IEMgMC4zNzUgLTAuMjk2ODc1IDEuMTcxODc1IDAuMTQwNjI1IDEuOTY4NzUgMC4xNDA2 MjUgQyAyLjg1OTM3NSAwLjE0MDYyNSAzLjU3ODEyNSAtMC40MjE4NzUgMy41NzgxMjUgLTEuMTcx ODc1IEMgMy41NzgxMjUgLTEuNjQwNjI1IDMuMzEyNSAtMi4wMzEyNSAyLjkwNjI1IC0yLjI2NTYy NSBDIDIuODEyNSAtMi4zMjgxMjUgMi41NzgxMjUgLTIuNDUzMTI1IDIuNDY4NzUgLTIuNTE1NjI1 IFogTSAxLjM0Mzc1IC0zLjE3MTg3NSBDIDEuMTU2MjUgLTMuMjgxMjUgMC45Njg3NSAtMy40Njg3 NSAwLjk2ODc1IC0zLjczNDM3NSBDIDAuOTY4NzUgLTQuMTcxODc1IDEuNDY4NzUgLTQuNDIxODc1 IDEuOTY4NzUgLTQuNDIxODc1IEMgMi41MTU2MjUgLTQuNDIxODc1IDMgLTQuMDc4MTI1IDMgLTMu NTkzNzUgQyAzIC0yLjk2ODc1IDIuMjY1NjI1IC0yLjY1NjI1IDIuMjY1NjI1IC0yLjY1NjI1IEMg Mi4yNSAtMi42NTYyNSAyLjIzNDM3NSAtMi42NTYyNSAyLjE4NzUgLTIuNjg3NSBaIE0gMS42NzE4 NzUgLTIuMjAzMTI1IEwgMi42NDA2MjUgLTEuNjU2MjUgQyAyLjgxMjUgLTEuNTQ2ODc1IDMuMTU2 MjUgLTEuMzQzNzUgMy4xNTYyNSAtMC45Mzc1IEMgMy4xNTYyNSAtMC40MDYyNSAyLjU3ODEyNSAt MC4wNzgxMjUgMS45ODQzNzUgLTAuMDc4MTI1IEMgMS4zNDM3NSAtMC4wNzgxMjUgMC43OTY4NzUg LTAuNSAwLjc5Njg3NSAtMS4wNjI1IEMgMC43OTY4NzUgLTEuNTc4MTI1IDEuMTcxODc1IC0xLjk4 NDM3NSAxLjY3MTg3NSAtMi4yMDMxMjUgWiBNIDEuNjcxODc1IC0yLjIwMzEyNSAiLz4KPC9nPgo8 ZyBpZD0iZ2x5cGgtMS02Ij4KPHBhdGggZD0iTSAyLjMyODEyNSAtNC40Mzc1IEMgMi4zMjgxMjUg LTQuNjI1IDIuMzI4MTI1IC00LjYyNSAyLjEyNSAtNC42MjUgQyAxLjY3MTg3NSAtNC4xODc1IDEu MDQ2ODc1IC00LjE4NzUgMC43NjU2MjUgLTQuMTg3NSBMIDAuNzY1NjI1IC0zLjkzNzUgQyAwLjky MTg3NSAtMy45Mzc1IDEuMzkwNjI1IC0zLjkzNzUgMS43NjU2MjUgLTQuMTI1IEwgMS43NjU2MjUg LTAuNTc4MTI1IEMgMS43NjU2MjUgLTAuMzQzNzUgMS43NjU2MjUgLTAuMjUgMS4wNzgxMjUgLTAu MjUgTCAwLjgxMjUgLTAuMjUgTCAwLjgxMjUgMCBDIDAuOTM3NSAwIDEuNzk2ODc1IC0wLjAzMTI1 IDIuMDQ2ODc1IC0wLjAzMTI1IEMgMi4yNjU2MjUgLTAuMDMxMjUgMy4xNDA2MjUgMCAzLjI5Njg3 NSAwIEwgMy4yOTY4NzUgLTAuMjUgTCAzLjAzMTI1IC0wLjI1IEMgMi4zMjgxMjUgLTAuMjUgMi4z MjgxMjUgLTAuMzQzNzUgMi4zMjgxMjUgLTAuNTc4MTI1IFogTSAyLjMyODEyNSAtNC40Mzc1ICIv Pgo8L2c+CjxnIGlkPSJnbHlwaC0xLTciPgo8cGF0aCBkPSJNIDMuNTE1NjI1IC0xLjI2NTYyNSBM IDMuMjgxMjUgLTEuMjY1NjI1IEMgMy4yNjU2MjUgLTEuMTA5Mzc1IDMuMTg3NSAtMC43MDMxMjUg My4wOTM3NSAtMC42NDA2MjUgQyAzLjA0Njg3NSAtMC41OTM3NSAyLjUxNTYyNSAtMC41OTM3NSAy LjQwNjI1IC0wLjU5Mzc1IEwgMS4xMjUgLTAuNTkzNzUgQyAxLjg1OTM3NSAtMS4yMzQzNzUgMi4x MDkzNzUgLTEuNDM3NSAyLjUxNTYyNSAtMS43NjU2MjUgQyAzLjAzMTI1IC0yLjE3MTg3NSAzLjUx NTYyNSAtMi42MDkzNzUgMy41MTU2MjUgLTMuMjY1NjI1IEMgMy41MTU2MjUgLTQuMTA5Mzc1IDIu NzgxMjUgLTQuNjI1IDEuODkwNjI1IC00LjYyNSBDIDEuMDMxMjUgLTQuNjI1IDAuNDM3NSAtNC4w MTU2MjUgMC40Mzc1IC0zLjM3NSBDIDAuNDM3NSAtMy4wMzEyNSAwLjczNDM3NSAtMi45ODQzNzUg MC44MTI1IC0yLjk4NDM3NSBDIDAuOTY4NzUgLTIuOTg0Mzc1IDEuMTcxODc1IC0zLjEwOTM3NSAx LjE3MTg3NSAtMy4zNTkzNzUgQyAxLjE3MTg3NSAtMy40ODQzNzUgMS4xMjUgLTMuNzM0Mzc1IDAu NzY1NjI1IC0zLjczNDM3NSBDIDAuOTg0Mzc1IC00LjIxODc1IDEuNDUzMTI1IC00LjM3NSAxLjc4 MTI1IC00LjM3NSBDIDIuNDg0Mzc1IC00LjM3NSAyLjg0Mzc1IC0zLjgyODEyNSAyLjg0Mzc1IC0z LjI2NTYyNSBDIDIuODQzNzUgLTIuNjU2MjUgMi40MDYyNSAtMi4xODc1IDIuMTg3NSAtMS45Mzc1 IEwgMC41MTU2MjUgLTAuMjY1NjI1IEMgMC40Mzc1IC0wLjIwMzEyNSAwLjQzNzUgLTAuMTg3NSAw LjQzNzUgMCBMIDMuMzEyNSAwIFogTSAzLjUxNTYyNSAtMS4yNjU2MjUgIi8+CjwvZz4KPGcgaWQ9 ImdseXBoLTEtOCI+CjxwYXRoIGQ9Ik0gMS45MDYyNSAtMi4zMjgxMjUgQyAyLjQ1MzEyNSAtMi4z MjgxMjUgMi44NDM3NSAtMS45NTMxMjUgMi44NDM3NSAtMS4yMDMxMjUgQyAyLjg0Mzc1IC0wLjM0 Mzc1IDIuMzI4MTI1IC0wLjA3ODEyNSAxLjkzNzUgLTAuMDc4MTI1IEMgMS42NTYyNSAtMC4wNzgx MjUgMS4wMzEyNSAtMC4xNTYyNSAwLjc1IC0wLjU3ODEyNSBDIDEuMDc4MTI1IC0wLjU3ODEyNSAx LjE1NjI1IC0wLjgxMjUgMS4xNTYyNSAtMC45Njg3NSBDIDEuMTU2MjUgLTEuMTg3NSAwLjk4NDM3 NSAtMS4zNDM3NSAwLjc2NTYyNSAtMS4zNDM3NSBDIDAuNTc4MTI1IC0xLjM0Mzc1IDAuMzc1IC0x LjIxODc1IDAuMzc1IC0wLjkzNzUgQyAwLjM3NSAtMC4yODEyNSAxLjA5Mzc1IDAuMTQwNjI1IDEu OTM3NSAwLjE0MDYyNSBDIDIuOTA2MjUgMC4xNDA2MjUgMy41NzgxMjUgLTAuNTE1NjI1IDMuNTc4 MTI1IC0xLjIwMzEyNSBDIDMuNTc4MTI1IC0xLjc1IDMuMTQwNjI1IC0yLjI5Njg3NSAyLjM3NSAt Mi40NTMxMjUgQyAzLjA5Mzc1IC0yLjcxODc1IDMuMzU5Mzc1IC0zLjIzNDM3NSAzLjM1OTM3NSAt My42NzE4NzUgQyAzLjM1OTM3NSAtNC4yMTg3NSAyLjczNDM3NSAtNC42MjUgMS45NTMxMjUgLTQu NjI1IEMgMS4xODc1IC00LjYyNSAwLjU5Mzc1IC00LjI1IDAuNTkzNzUgLTMuNjg3NSBDIDAuNTkz NzUgLTMuNDUzMTI1IDAuNzUgLTMuMzI4MTI1IDAuOTUzMTI1IC0zLjMyODEyNSBDIDEuMTcxODc1 IC0zLjMyODEyNSAxLjMxMjUgLTMuNDg0Mzc1IDEuMzEyNSAtMy42NzE4NzUgQyAxLjMxMjUgLTMu ODc1IDEuMTcxODc1IC00LjAzMTI1IDAuOTUzMTI1IC00LjA0Njg3NSBDIDEuMjAzMTI1IC00LjM0 Mzc1IDEuNjcxODc1IC00LjQyMTg3NSAxLjkzNzUgLTQuNDIxODc1IEMgMi4yNSAtNC40MjE4NzUg Mi42ODc1IC00LjI2NTYyNSAyLjY4NzUgLTMuNjcxODc1IEMgMi42ODc1IC0zLjM3NSAyLjU5Mzc1 IC0zLjA0Njg3NSAyLjQwNjI1IC0yLjg0Mzc1IEMgMi4xODc1IC0yLjU3ODEyNSAxLjk4NDM3NSAt Mi41NjI1IDEuNjQwNjI1IC0yLjUzMTI1IEMgMS40Njg3NSAtMi41MTU2MjUgMS40NTMxMjUgLTIu NTE1NjI1IDEuNDIxODc1IC0yLjUxNTYyNSBDIDEuNDA2MjUgLTIuNTE1NjI1IDEuMzQzNzUgLTIu NSAxLjM0Mzc1IC0yLjQyMTg3NSBDIDEuMzQzNzUgLTIuMzI4MTI1IDEuNDA2MjUgLTIuMzI4MTI1 IDEuNTMxMjUgLTIuMzI4MTI1IFogTSAxLjkwNjI1IC0yLjMyODEyNSAiLz4KPC9nPgo8ZyBpZD0i Z2x5cGgtMi0wIj4KPC9nPgo8ZyBpZD0iZ2x5cGgtMi0xIj4KPHBhdGggZD0iTSA5LjIzNDM3NSAt Ni4wNDY4NzUgQyA5LjMyODEyNSAtNi40MDYyNSA5LjM0Mzc1IC02LjUgMTAuMDkzNzUgLTYuNSBD IDEwLjMxMjUgLTYuNSAxMC40MDYyNSAtNi41IDEwLjQwNjI1IC02LjcwMzEyNSBDIDEwLjQwNjI1 IC02LjgxMjUgMTAuMzEyNSAtNi44MTI1IDEwLjE0MDYyNSAtNi44MTI1IEwgOC44MjgxMjUgLTYu ODEyNSBDIDguNTYyNSAtNi44MTI1IDguNTQ2ODc1IC02LjgxMjUgOC40Mzc1IC02LjYyNSBMIDQu Nzk2ODc1IC0wLjkzNzUgTCA0LjAxNTYyNSAtNi41NzgxMjUgQyAzLjk4NDM3NSAtNi44MTI1IDMu OTY4NzUgLTYuODEyNSAzLjcwMzEyNSAtNi44MTI1IEwgMi4zNDM3NSAtNi44MTI1IEMgMi4xNTYy NSAtNi44MTI1IDIuMDQ2ODc1IC02LjgxMjUgMi4wNDY4NzUgLTYuNjI1IEMgMi4wNDY4NzUgLTYu NSAyLjE0MDYyNSAtNi41IDIuMzI4MTI1IC02LjUgQyAyLjQ2ODc1IC02LjUgMi42NDA2MjUgLTYu NDg0Mzc1IDIuNzY1NjI1IC02LjQ4NDM3NSBDIDIuOTIxODc1IC02LjQ1MzEyNSAyLjk4NDM3NSAt Ni40Mzc1IDIuOTg0Mzc1IC02LjMxMjUgQyAyLjk4NDM3NSAtNi4yODEyNSAyLjk2ODc1IC02LjI1 IDIuOTM3NSAtNi4xMjUgTCAxLjY3MTg3NSAtMS4wNjI1IEMgMS41NzgxMjUgLTAuNjU2MjUgMS40 MDYyNSAtMC4zNDM3NSAwLjU5Mzc1IC0wLjMxMjUgQyAwLjU0Njg3NSAtMC4zMTI1IDAuNDIxODc1 IC0wLjI5Njg3NSAwLjQyMTg3NSAtMC4xMjUgQyAwLjQyMTg3NSAtMC4wMzEyNSAwLjQ4NDM3NSAw IDAuNTYyNSAwIEMgMC44NzUgMCAxLjIxODc1IC0wLjAzMTI1IDEuNTYyNSAtMC4wMzEyNSBDIDEu ODkwNjI1IC0wLjAzMTI1IDIuMjUgMCAyLjU3ODEyNSAwIEMgMi42MjUgMCAyLjc2NTYyNSAwIDIu NzY1NjI1IC0wLjIwMzEyNSBDIDIuNzY1NjI1IC0wLjMxMjUgMi42NTYyNSAtMC4zMTI1IDIuNTc4 MTI1IC0wLjMxMjUgQyAyLjAxNTYyNSAtMC4zMTI1IDEuOTA2MjUgLTAuNTE1NjI1IDEuOTA2MjUg LTAuNzUgQyAxLjkwNjI1IC0wLjgxMjUgMS45MDYyNSAtMC44NzUgMS45Mzc1IC0wLjk4NDM3NSBM IDMuMjk2ODc1IC02LjQwNjI1IEwgMy4zMTI1IC02LjQwNjI1IEwgNC4xNzE4NzUgLTAuMjM0Mzc1 IEMgNC4xODc1IC0wLjEwOTM3NSA0LjIwMzEyNSAwIDQuMzEyNSAwIEMgNC40MjE4NzUgMCA0LjQ4 NDM3NSAtMC4xMDkzNzUgNC41MzEyNSAtMC4xNzE4NzUgTCA4LjU2MjUgLTYuNDg0Mzc1IEwgOC41 NzgxMjUgLTYuNDg0Mzc1IEwgNy4xNDA2MjUgLTAuNzgxMjUgQyA3LjA0Njg3NSAtMC4zOTA2MjUg Ny4wMzEyNSAtMC4zMTI1IDYuMjM0Mzc1IC0wLjMxMjUgQyA2LjA3ODEyNSAtMC4zMTI1IDUuOTY4 NzUgLTAuMzEyNSA1Ljk2ODc1IC0wLjEyNSBDIDUuOTY4NzUgMCA2LjA3ODEyNSAwIDYuMTA5Mzc1 IDAgQyA2LjM5MDYyNSAwIDcuMDYyNSAtMC4wMzEyNSA3LjM0Mzc1IC0wLjAzMTI1IEMgNy43NSAt MC4wMzEyNSA4LjE4NzUgMCA4LjU5Mzc1IDAgQyA4LjY1NjI1IDAgOC43ODEyNSAwIDguNzgxMjUg LTAuMjAzMTI1IEMgOC43ODEyNSAtMC4zMTI1IDguNjg3NSAtMC4zMTI1IDguNSAtMC4zMTI1IEMg OC4xNDA2MjUgLTAuMzEyNSA3Ljg1OTM3NSAtMC4zMTI1IDcuODU5Mzc1IC0wLjQ4NDM3NSBDIDcu ODU5Mzc1IC0wLjUzMTI1IDcuODU5Mzc1IC0wLjU0Njg3NSA3LjkwNjI1IC0wLjczNDM3NSBaIE0g OS4yMzQzNzUgLTYuMDQ2ODc1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0yLTIiPgo8cGF0aCBkPSJN IDcuNTMxMjUgLTUuNzY1NjI1IEMgNy42NDA2MjUgLTYuMTU2MjUgNy44MTI1IC02LjQ2ODc1IDgu NjA5Mzc1IC02LjUgQyA4LjY1NjI1IC02LjUgOC43ODEyNSAtNi41MTU2MjUgOC43ODEyNSAtNi43 MDMxMjUgQyA4Ljc4MTI1IC02LjcwMzEyNSA4Ljc4MTI1IC02LjgxMjUgOC42NTYyNSAtNi44MTI1 IEMgOC4zMjgxMjUgLTYuODEyNSA3Ljk2ODc1IC02Ljc4MTI1IDcuNjQwNjI1IC02Ljc4MTI1IEMg Ny4zMTI1IC02Ljc4MTI1IDYuOTUzMTI1IC02LjgxMjUgNi42MjUgLTYuODEyNSBDIDYuNTYyNSAt Ni44MTI1IDYuNDUzMTI1IC02LjgxMjUgNi40NTMxMjUgLTYuNjA5Mzc1IEMgNi40NTMxMjUgLTYu NSA2LjU0Njg3NSAtNi41IDYuNjI1IC02LjUgQyA3LjIwMzEyNSAtNi40ODQzNzUgNy4zMTI1IC02 LjI4MTI1IDcuMzEyNSAtNi4wNjI1IEMgNy4zMTI1IC02LjAzMTI1IDcuMjgxMjUgLTUuODc1IDcu MjgxMjUgLTUuODU5Mzc1IEwgNi4xNTYyNSAtMS40MjE4NzUgTCAzLjk1MzEyNSAtNi42MjUgQyAz Ljg3NSAtNi43OTY4NzUgMy44NzUgLTYuODEyNSAzLjY0MDYyNSAtNi44MTI1IEwgMi4yOTY4NzUg LTYuODEyNSBDIDIuMTA5Mzc1IC02LjgxMjUgMi4wMTU2MjUgLTYuODEyNSAyLjAxNTYyNSAtNi42 MDkzNzUgQyAyLjAxNTYyNSAtNi41IDIuMTA5Mzc1IC02LjUgMi4yOTY4NzUgLTYuNSBDIDIuMzQz NzUgLTYuNSAyLjk2ODc1IC02LjUgMi45Njg3NSAtNi40MDYyNSBMIDEuNjQwNjI1IC0xLjA2MjUg QyAxLjUzMTI1IC0wLjY1NjI1IDEuMzU5Mzc1IC0wLjM0Mzc1IDAuNTYyNSAtMC4zMTI1IEMgMC41 IC0wLjMxMjUgMC4zOTA2MjUgLTAuMjk2ODc1IDAuMzkwNjI1IC0wLjEwOTM3NSBDIDAuMzkwNjI1 IC0wLjA0Njg3NSAwLjQzNzUgMCAwLjUxNTYyNSAwIEMgMC44NDM3NSAwIDEuMTg3NSAtMC4wMzEy NSAxLjUxNTYyNSAtMC4wMzEyNSBDIDEuODU5Mzc1IC0wLjAzMTI1IDIuMjE4NzUgMCAyLjU0Njg3 NSAwIEMgMi41OTM3NSAwIDIuNzE4NzUgMCAyLjcxODc1IC0wLjIwMzEyNSBDIDIuNzE4NzUgLTAu Mjk2ODc1IDIuNjI1IC0wLjMxMjUgMi41MTU2MjUgLTAuMzEyNSBDIDEuOTM3NSAtMC4zMjgxMjUg MS44NTkzNzUgLTAuNTQ2ODc1IDEuODU5Mzc1IC0wLjc1IEMgMS44NTkzNzUgLTAuODEyNSAxLjg3 NSAtMC44NzUgMS45MDYyNSAtMC45ODQzNzUgTCAzLjIxODc1IC02LjIzNDM3NSBDIDMuMjY1NjI1 IC02LjE4NzUgMy4yNjU2MjUgLTYuMTU2MjUgMy4zMTI1IC02LjA2MjUgTCA1Ljc5Njg3NSAtMC4x ODc1IEMgNS44NTkzNzUgLTAuMDE1NjI1IDUuODkwNjI1IDAgNS45ODQzNzUgMCBDIDYuMDkzNzUg MCA2LjA5Mzc1IC0wLjAzMTI1IDYuMTQwNjI1IC0wLjIwMzEyNSBaIE0gNy41MzEyNSAtNS43NjU2 MjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTItMyI+CjxwYXRoIGQ9Ik0gMS41NzgxMjUgLTAuNzgx MjUgQyAxLjQ4NDM3NSAtMC4zOTA2MjUgMS40Njg3NSAtMC4zMTI1IDAuNjcxODc1IC0wLjMxMjUg QyAwLjUxNTYyNSAtMC4zMTI1IDAuNDA2MjUgLTAuMzEyNSAwLjQwNjI1IC0wLjEyNSBDIDAuNDA2 MjUgMCAwLjQ4NDM3NSAwIDAuNjcxODc1IDAgTCAzLjk4NDM3NSAwIEMgNi4wNDY4NzUgMCA4LjAx NTYyNSAtMi4xMDkzNzUgOC4wMTU2MjUgLTQuMjgxMjUgQyA4LjAxNTYyNSAtNS42ODc1IDcuMTcx ODc1IC02LjgxMjUgNS42NzE4NzUgLTYuODEyNSBMIDIuMzI4MTI1IC02LjgxMjUgQyAyLjE0MDYy NSAtNi44MTI1IDIuMDMxMjUgLTYuODEyNSAyLjAzMTI1IC02LjYyNSBDIDIuMDMxMjUgLTYuNSAy LjEwOTM3NSAtNi41IDIuMzEyNSAtNi41IEMgMi40Mzc1IC02LjUgMi42MjUgLTYuNDg0Mzc1IDIu NzM0Mzc1IC02LjQ4NDM3NSBDIDIuOTA2MjUgLTYuNDUzMTI1IDIuOTUzMTI1IC02LjQzNzUgMi45 NTMxMjUgLTYuMzEyNSBDIDIuOTUzMTI1IC02LjI4MTI1IDIuOTUzMTI1IC02LjI1IDIuOTIxODc1 IC02LjEyNSBaIE0gMy43MzQzNzUgLTYuMTI1IEMgMy44MjgxMjUgLTYuNDY4NzUgMy44NDM3NSAt Ni41IDQuMjgxMjUgLTYuNSBMIDUuMzQzNzUgLTYuNSBDIDYuMzEyNSAtNi41IDcuMTQwNjI1IC01 Ljk2ODc1IDcuMTQwNjI1IC00LjY1NjI1IEMgNy4xNDA2MjUgLTQuMTcxODc1IDYuOTUzMTI1IC0y LjUzMTI1IDYuMDkzNzUgLTEuNDM3NSBDIDUuODEyNSAtMS4wNjI1IDUuMDMxMjUgLTAuMzEyNSAz Ljc5Njg3NSAtMC4zMTI1IEwgMi42NzE4NzUgLTAuMzEyNSBDIDIuNTMxMjUgLTAuMzEyNSAyLjUx NTYyNSAtMC4zMTI1IDIuNDUzMTI1IC0wLjMxMjUgQyAyLjM1OTM3NSAtMC4zMjgxMjUgMi4zMjgx MjUgLTAuMzQzNzUgMi4zMjgxMjUgLTAuNDIxODc1IEMgMi4zMjgxMjUgLTAuNDUzMTI1IDIuMzI4 MTI1IC0wLjQ2ODc1IDIuMzc1IC0wLjY0MDYyNSBaIE0gMy43MzQzNzUgLTYuMTI1ICIvPgo8L2c+ CjxnIGlkPSJnbHlwaC0zLTAiPgo8L2c+CjxnIGlkPSJnbHlwaC0zLTEiPgo8cGF0aCBkPSJNIC02 LjA0Njg3NSAtNC4yNSBDIC02LjMyODEyNSAtNC4zMjgxMjUgLTYuMzkwNjI1IC00LjM1OTM3NSAt Ni40MjE4NzUgLTQuNDg0Mzc1IEMgLTYuNDM3NSAtNC41NzgxMjUgLTYuNDM3NSAtNC45MDYyNSAt Ni40Mzc1IC01LjEwOTM3NSBDIC02LjQzNzUgLTYuMTI1IC02LjQwNjI1IC02LjU2MjUgLTUuNjI1 IC02LjU2MjUgQyAtNS40Njg3NSAtNi41NjI1IC01LjA3ODEyNSAtNi41MzEyNSAtNC44MjgxMjUg LTYuNDg0Mzc1IEMgLTQuNzgxMjUgLTYuNDg0Mzc1IC00LjY3MTg3NSAtNi40NTMxMjUgLTQuNjQw NjI1IC02LjQ1MzEyNSBDIC00LjU3ODEyNSAtNi40NTMxMjUgLTQuNSAtNi40ODQzNzUgLTQuNSAt Ni41NzgxMjUgQyAtNC41IC02LjY4NzUgLTQuNTc4MTI1IC02LjcwMzEyNSAtNC43MzQzNzUgLTYu NzM0Mzc1IEwgLTYuNDY4NzUgLTcgQyAtNi41MTU2MjUgLTcuMDE1NjI1IC02LjYwOTM3NSAtNy4w MTU2MjUgLTYuNjQwNjI1IC03LjAxNTYyNSBDIC02Ljc1IC03LjAxNTYyNSAtNi43NSAtNi45MjE4 NzUgLTYuNzUgLTYuNzUgTCAtNi43NSAtMS4yMTg3NSBDIC02Ljc1IC0wLjk4NDM3NSAtNi43MzQz NzUgLTAuOTY4NzUgLTYuNTQ2ODc1IC0wLjg5MDYyNSBMIC00Ljc5Njg3NSAtMC4yOTY4NzUgQyAt NC43ODEyNSAtMC4yOTY4NzUgLTQuNjQwNjI1IC0wLjIzNDM3NSAtNC42MDkzNzUgLTAuMjM0Mzc1 IEMgLTQuNTYyNSAtMC4yMzQzNzUgLTQuNSAtMC4yOTY4NzUgLTQuNSAtMC4zNTkzNzUgQyAtNC41 IC0wLjQ1MzEyNSAtNC41NjI1IC0wLjQ2ODc1IC00LjcxODc1IC0wLjUzMTI1IEMgLTYuMjY1NjI1 IC0xLjA2MjUgLTYuNDM3NSAtMS4zMjgxMjUgLTYuNDM3NSAtMi43OTY4NzUgTCAtNi40Mzc1IC0z LjE4NzUgQyAtNi40Mzc1IC0zLjQ2ODc1IC02LjQwNjI1IC0zLjQ2ODc1IC02LjMxMjUgLTMuNDY4 NzUgQyAtNi4yNjU2MjUgLTMuNDY4NzUgLTYuMTQwNjI1IC0zLjQzNzUgLTYuMTA5Mzc1IC0zLjQy MTg3NSBMIC0wLjc4MTI1IC0yLjA5Mzc1IEMgLTAuNDIxODc1IC0yIC0wLjMxMjUgLTEuOTY4NzUg LTAuMzEyNSAtMC45MDYyNSBDIC0wLjMxMjUgLTAuNTQ2ODc1IC0wLjMxMjUgLTAuNDg0Mzc1IC0w LjEyNSAtMC40ODQzNzUgQyAwIC0wLjQ4NDM3NSAwIC0wLjU5Mzc1IDAgLTAuNjU2MjUgQyAwIC0w LjkyMTg3NSAtMC4wMTU2MjUgLTEuMjAzMTI1IC0wLjAxNTYyNSAtMS40Njg3NSBDIC0wLjAxNTYy NSAtMS43NSAtMC4wMzEyNSAtMi4wNDY4NzUgLTAuMDMxMjUgLTIuMzI4MTI1IEMgLTAuMDMxMjUg LTIuNjA5Mzc1IC0wLjAxNTYyNSAtMi44NzUgLTAuMDE1NjI1IC0zLjE1NjI1IEMgLTAuMDE1NjI1 IC0zLjQzNzUgMCAtMy43MzQzNzUgMCAtNC4wMTU2MjUgQyAwIC00LjEwOTM3NSAwIC00LjIzNDM3 NSAtMC4yMDMxMjUgLTQuMjM0Mzc1IEMgLTAuMzEyNSAtNC4yMzQzNzUgLTAuMzEyNSAtNC4xNTYy NSAtMC4zMTI1IC0zLjg5MDYyNSBDIC0wLjMxMjUgLTMuNjU2MjUgLTAuMzEyNSAtMy41MTU2MjUg LTAuMzI4MTI1IC0zLjI2NTYyNSBDIC0wLjM1OTM3NSAtMi45Njg3NSAtMC4zOTA2MjUgLTIuODkw NjI1IC0wLjU0Njg3NSAtMi44OTA2MjUgQyAtMC41NjI1IC0yLjg5MDYyNSAtMC42MDkzNzUgLTIu ODkwNjI1IC0wLjc1IC0yLjkzNzUgWiBNIC02LjA0Njg3NSAtNC4yNSAiLz4KPC9nPgo8ZyBpZD0i Z2x5cGgtNC0wIj4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC0xIj4KPHBhdGggZD0iTSAyLjM5MDYyNSAt My4yOTY4NzUgQyAyLjM1OTM3NSAtMy4yOTY4NzUgMi4zNDM3NSAtMy4yOTY4NzUgMi4xNzE4NzUg LTMuMTI1IEMgMC45MjE4NzUgLTEuODkwNjI1IC0wLjk2ODc1IC0xLjU2MjUgLTIuNSAtMS41NjI1 IEMgLTQuMjM0Mzc1IC0xLjU2MjUgLTUuOTY4NzUgLTEuOTM3NSAtNy4yMDMxMjUgLTMuMTcxODc1 IEMgLTcuMzI4MTI1IC0zLjI5Njg3NSAtNy4zNDM3NSAtMy4yOTY4NzUgLTcuMzc1IC0zLjI5Njg3 NSBDIC03LjQ1MzEyNSAtMy4yOTY4NzUgLTcuNDg0Mzc1IC0zLjI2NTYyNSAtNy40ODQzNzUgLTMu MjAzMTI1IEMgLTcuNDg0Mzc1IC0zLjA5Mzc1IC02Ljc5Njg3NSAtMi4yMDMxMjUgLTUuNTMxMjUg LTEuNjA5Mzc1IEMgLTQuNDM3NSAtMS4xMDkzNzUgLTMuMzI4MTI1IC0wLjk4NDM3NSAtMi41IC0w Ljk4NDM3NSBDIC0xLjcxODc1IC0wLjk4NDM3NSAtMC41MTU2MjUgLTEuMDkzNzUgMC42MjUgLTEu NjQwNjI1IEMgMS44NDM3NSAtMi4yNSAyLjUgLTMuMDkzNzUgMi41IC0zLjIwMzEyNSBDIDIuNSAt My4yNjU2MjUgMi40Njg3NSAtMy4yOTY4NzUgMi4zOTA2MjUgLTMuMjk2ODc1IFogTSAyLjM5MDYy NSAtMy4yOTY4NzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTQtMiI+CjxwYXRoIGQ9Ik0gLTMuNDIx ODc1IC0xLjA5Mzc1IEwgLTAuNzUgLTEuMDkzNzUgQyAtMC4zMTI1IC0xLjA5Mzc1IC0wLjMxMjUg LTAuOTg0Mzc1IC0wLjMxMjUgLTAuMzEyNSBMIDAgLTAuMzEyNSBDIC0wLjAxNTYyNSAtMC42NzE4 NzUgLTAuMDMxMjUgLTEuMTcxODc1IC0wLjAzMTI1IC0xLjQ1MzEyNSBDIC0wLjAzMTI1IC0xLjcw MzEyNSAtMC4wMTU2MjUgLTIuMjE4NzUgMCAtMi41NjI1IEwgLTAuMzEyNSAtMi41NjI1IEMgLTAu MzEyNSAtMS44OTA2MjUgLTAuMzEyNSAtMS43ODEyNSAtMC43NSAtMS43ODEyNSBMIC0yLjU5Mzc1 IC0xLjc4MTI1IEMgLTMuNjI1IC0xLjc4MTI1IC00LjE4NzUgLTIuNSAtNC4xODc1IC0zLjEyNSBD IC00LjE4NzUgLTMuNzY1NjI1IC0zLjY1NjI1IC0zLjg3NSAtMy4wNzgxMjUgLTMuODc1IEwgLTAu NzUgLTMuODc1IEMgLTAuMzEyNSAtMy44NzUgLTAuMzEyNSAtMy43NjU2MjUgLTAuMzEyNSAtMy4w OTM3NSBMIDAgLTMuMDkzNzUgQyAtMC4wMTU2MjUgLTMuNDM3NSAtMC4wMzEyNSAtMy45NTMxMjUg LTAuMDMxMjUgLTQuMjE4NzUgQyAtMC4wMzEyNSAtNC40Njg3NSAtMC4wMTU2MjUgLTUgMCAtNS4z MjgxMjUgTCAtMC4zMTI1IC01LjMyODEyNSBDIC0wLjMxMjUgLTQuNjcxODc1IC0wLjMxMjUgLTQu NTYyNSAtMC43NSAtNC41NjI1IEwgLTIuNTkzNzUgLTQuNTYyNSBDIC0zLjYyNSAtNC41NjI1IC00 LjE4NzUgLTUuMjY1NjI1IC00LjE4NzUgLTUuOTA2MjUgQyAtNC4xODc1IC02LjUzMTI1IC0zLjY1 NjI1IC02LjY0MDYyNSAtMy4wNzgxMjUgLTYuNjQwNjI1IEwgLTAuNzUgLTYuNjQwNjI1IEMgLTAu MzEyNSAtNi42NDA2MjUgLTAuMzEyNSAtNi41MzEyNSAtMC4zMTI1IC01Ljg1OTM3NSBMIDAgLTUu ODU5Mzc1IEMgLTAuMDE1NjI1IC02LjIwMzEyNSAtMC4wMzEyNSAtNi43MTg3NSAtMC4wMzEyNSAt Ni45ODQzNzUgQyAtMC4wMzEyNSAtNy4yNSAtMC4wMTU2MjUgLTcuNzY1NjI1IDAgLTguMTA5Mzc1 IEwgLTAuMzEyNSAtOC4xMDkzNzUgQyAtMC4zMTI1IC03LjU5Mzc1IC0wLjMxMjUgLTcuMzQzNzUg LTAuNjA5Mzc1IC03LjMyODEyNSBMIC0yLjUxNTYyNSAtNy4zMjgxMjUgQyAtMy4zNzUgLTcuMzI4 MTI1IC0zLjY3MTg3NSAtNy4zMjgxMjUgLTQuMDMxMjUgLTcuMDE1NjI1IEMgLTQuMjAzMTI1IC02 Ljg3NSAtNC40MDYyNSAtNi41NDY4NzUgLTQuNDA2MjUgLTUuOTY4NzUgQyAtNC40MDYyNSAtNS4x NDA2MjUgLTMuODEyNSAtNC42ODc1IC0zLjQyMTg3NSAtNC41MzEyNSBDIC00LjI5Njg3NSAtNC4z OTA2MjUgLTQuNDA2MjUgLTMuNjU2MjUgLTQuNDA2MjUgLTMuMjAzMTI1IEMgLTQuNDA2MjUgLTIu NDY4NzUgLTMuOTg0Mzc1IC0yIC0zLjM1OTM3NSAtMS43MTg3NSBMIC00LjQwNjI1IC0xLjcxODc1 IEwgLTQuMjk2ODc1IC0wLjMxMjUgTCAtMy45ODQzNzUgLTAuMzEyNSBDIC0zLjk4NDM3NSAtMS4w MTU2MjUgLTMuOTIxODc1IC0xLjA5Mzc1IC0zLjQyMTg3NSAtMS4wOTM3NSBaIE0gLTMuNDIxODc1 IC0xLjA5Mzc1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC00LTMiPgo8cGF0aCBkPSJNIC0xLjkzNzUg LTIuMDc4MTI1IEMgLTEuODkwNjI1IC0yLjI5Njg3NSAtMS43MzQzNzUgLTMuMTA5Mzc1IC0xLjAx NTYyNSAtMy4xMDkzNzUgQyAtMC41MTU2MjUgLTMuMTA5Mzc1IC0wLjEwOTM3NSAtMi43NjU2MjUg LTAuMTA5Mzc1IC0xLjk4NDM3NSBDIC0wLjEwOTM3NSAtMS4xNDA2MjUgLTAuNjcxODc1IC0wLjc4 MTI1IC0xLjUzMTI1IC0wLjU5Mzc1IEMgLTEuNjU2MjUgLTAuNTYyNSAtMS42ODc1IC0wLjU2MjUg LTEuNjg3NSAtMC40NTMxMjUgQyAtMS42ODc1IC0wLjMyODEyNSAtMS42MjUgLTAuMzI4MTI1IC0x LjQ1MzEyNSAtMC4zMjgxMjUgTCAtMC4xMjUgLTAuMzI4MTI1IEMgMC4wNDY4NzUgLTAuMzI4MTI1 IDAuMTA5Mzc1IC0wLjMyODEyNSAwLjEwOTM3NSAtMC40Mzc1IEMgMC4xMDkzNzUgLTAuNDg0Mzc1 IDAuMDkzNzUgLTAuNSAtMC4wOTM3NSAtMC42ODc1IEMgLTAuMTA5Mzc1IC0wLjcwMzEyNSAtMC4x MjUgLTAuNzAzMTI1IC0wLjMxMjUgLTAuODkwNjI1IEMgMC4wOTM3NSAtMS4zMjgxMjUgMC4xMDkz NzUgLTEuNzgxMjUgMC4xMDkzNzUgLTEuOTg0Mzc1IEMgMC4xMDkzNzUgLTMuMTI1IC0wLjU2MjUg LTMuNTkzNzUgLTEuMjgxMjUgLTMuNTkzNzUgQyAtMS43OTY4NzUgLTMuNTkzNzUgLTIuMTA5Mzc1 IC0zLjI5Njg3NSAtMi4yMTg3NSAtMy4xNzE4NzUgQyAtMi41NDY4NzUgLTIuODQzNzUgLTIuNjI1 IC0yLjQ1MzEyNSAtMi43MDMxMjUgLTIuMDMxMjUgQyAtMi44MTI1IC0xLjQ2ODc1IC0yLjkzNzUg LTAuODEyNSAtMy41MTU2MjUgLTAuODEyNSBDIC0zLjg3NSAtMC44MTI1IC00LjI4MTI1IC0xLjA2 MjUgLTQuMjgxMjUgLTEuOTIxODc1IEMgLTQuMjgxMjUgLTMuMDE1NjI1IC0zLjM3NSAtMy4wNzgx MjUgLTMuMDc4MTI1IC0zLjA5Mzc1IEMgLTIuOTg0Mzc1IC0zLjA5Mzc1IC0yLjk4NDM3NSAtMy4x ODc1IC0yLjk4NDM3NSAtMy4yMDMxMjUgQyAtMi45ODQzNzUgLTMuMzQzNzUgLTMuMDMxMjUgLTMu MzQzNzUgLTMuMjE4NzUgLTMuMzQzNzUgTCAtNC4yMzQzNzUgLTMuMzQzNzUgQyAtNC4zOTA2MjUg LTMuMzQzNzUgLTQuNDY4NzUgLTMuMzQzNzUgLTQuNDY4NzUgLTMuMjM0Mzc1IEMgLTQuNDY4NzUg LTMuMTg3NSAtNC40Njg3NSAtMy4xNTYyNSAtNC4zNDM3NSAtMy4wMzEyNSBDIC00LjMxMjUgLTMg LTQuMjE4NzUgLTIuOTA2MjUgLTQuMTg3NSAtMi44NTkzNzUgQyAtNC40Njg3NSAtMi40ODQzNzUg LTQuNDY4NzUgLTIuMDc4MTI1IC00LjQ2ODc1IC0xLjkyMTg3NSBDIC00LjQ2ODc1IC0wLjcwMzEy NSAtMy43OTY4NzUgLTAuMzI4MTI1IC0zLjIzNDM3NSAtMC4zMjgxMjUgQyAtMi44OTA2MjUgLTAu MzI4MTI1IC0yLjYwOTM3NSAtMC40ODQzNzUgLTIuMzkwNjI1IC0wLjc1IEMgLTIuMTQwNjI1IC0x LjA3ODEyNSAtMi4wNzgxMjUgLTEuMzU5Mzc1IC0xLjkzNzUgLTIuMDc4MTI1IFogTSAtMS45Mzc1 IC0yLjA3ODEyNSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC00Ij4KPHBhdGggZD0iTSAtMi41IC0y Ljg3NSBDIC0zLjI2NTYyNSAtMi44NzUgLTQuNDY4NzUgLTIuNzY1NjI1IC01LjYwOTM3NSAtMi4y MTg3NSBDIC02LjgyODEyNSAtMS42MjUgLTcuNDg0Mzc1IC0wLjc2NTYyNSAtNy40ODQzNzUgLTAu NjcxODc1IEMgLTcuNDg0Mzc1IC0wLjYwOTM3NSAtNy40Mzc1IC0wLjU2MjUgLTcuMzc1IC0wLjU2 MjUgQyAtNy4zNDM3NSAtMC41NjI1IC03LjMyODEyNSAtMC41NjI1IC03LjE0MDYyNSAtMC43NSBD IC02LjE1NjI1IC0xLjczNDM3NSAtNC41NzgxMjUgLTIuMjk2ODc1IC0yLjUgLTIuMjk2ODc1IEMg LTAuNzgxMjUgLTIuMjk2ODc1IDAuOTY4NzUgLTEuOTM3NSAyLjIxODc1IC0wLjcwMzEyNSBDIDIu MzQzNzUgLTAuNTYyNSAyLjM1OTM3NSAtMC41NjI1IDIuMzkwNjI1IC0wLjU2MjUgQyAyLjQ1MzEy NSAtMC41NjI1IDIuNSAtMC42MDkzNzUgMi41IC0wLjY3MTg3NSBDIDIuNSAtMC43NjU2MjUgMS44 MTI1IC0xLjY3MTg3NSAwLjU0Njg3NSAtMi4yNSBDIC0wLjU0Njg3NSAtMi43NjU2MjUgLTEuNjU2 MjUgLTIuODc1IC0yLjUgLTIuODc1IFogTSAtMi41IC0yLjg3NSAiLz4KPC9nPgo8L2c+CjxjbGlw UGF0aCBpZD0iY2xpcC0wIj4KPHBhdGggY2xpcC1ydWxlPSJub256ZXJvIiBkPSJNIDQ0LjA2MjUg OTcgTCAzMjkuMzQ3NjU2IDk3IEwgMzI5LjM0NzY1NiAyNTUuNTU4NTk0IEwgNDQuMDYyNSAyNTUu NTU4NTk0IFogTSA0NC4wNjI1IDk3ICIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAt MSI+CjxwYXRoIGNsaXAtcnVsZT0ibm9uemVybyIgZD0iTSA0NC4wNjI1IDg1IEwgMzI5LjM0NzY1 NiA4NSBMIDMyOS4zNDc2NTYgMjU1LjU1ODU5NCBMIDQ0LjA2MjUgMjU1LjU1ODU5NCBaIE0gNDQu MDYyNSA4NSAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwLTIiPgo8cGF0aCBjbGlw LXJ1bGU9Im5vbnplcm8iIGQ9Ik0gNDQuMDYyNSA5LjUgTCAzMjkuMzQ3NjU2IDkuNSBMIDMyOS4z NDc2NTYgMjU1LjU1ODU5NCBMIDQ0LjA2MjUgMjU1LjU1ODU5NCBaIE0gNDQuMDYyNSA5LjUgIi8+ CjwvY2xpcFBhdGg+CjxjbGlwUGF0aCBpZD0iY2xpcC0zIj4KPHBhdGggY2xpcC1ydWxlPSJub256 ZXJvIiBkPSJNIDMwNSA5NiBMIDMzNi4xMjEwOTQgOTYgTCAzMzYuMTIxMDk0IDE0NCBMIDMwNSAx NDQgWiBNIDMwNSA5NiAiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwLTQiPgo8cGF0 aCBjbGlwLXJ1bGU9Im5vbnplcm8iIGQ9Ik0gMzA1IDAgTCAzMzYuMTIxMDk0IDAgTCAzMzYuMTIx MDk0IDM1IEwgMzA1IDM1IFogTSAzMDUgMCAiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8cGF0aCBm aWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9InJnYigxMDAlLCAxMDAlLCAxMDAlKSIgZmlsbC1vcGFj aXR5PSIxIiBkPSJNIDAuNSAyOTIuNzk2ODc1IEwgMC41IDAuNDk2MDk0IEwgMzM1LjYyNSAwLjQ5 NjA5NCBMIDMzNS42MjUgMjkyLjc5Njg3NSBaIE0gMC41IDI5Mi43OTY4NzUgIi8+CjxwYXRoIGZp bGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMC4zOTg1IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ry b2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwgNjkuMDE4NTU1JSwg NjkuMDE4NTU1JSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9 Ik0gMjMzLjEwOTM0NCAyMC42NTQ0MDYgTCAyMzMuMTA5MzQ0IDI2Ni43MTMgTSAyOTEuMzg2Njg3 IDIwLjY1NDQwNiBMIDI5MS4zODY2ODcgMjY2LjcxMyBNIDM0OS42NjQwMzEgMjAuNjU0NDA2IEwg MzQ5LjY2NDAzMSAyNjYuNzEzIE0gNDA3Ljk0MTM3NSAyMC42NTQ0MDYgTCA0MDcuOTQxMzc1IDI2 Ni43MTMgTSA0NjYuMjE4NzE5IDIwLjY1NDQwNiBMIDQ2Ni4yMTg3MTkgMjY2LjcxMyAiIHRyYW5z Zm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmls bD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjM5ODUiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJv a2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYig2OS4wMTg1NTUlLCA2OS4wMTg1NTUlLCA2 OS4wMTg1NTUlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0i TSAyMDMuODk0NSA2Ni4wMTM3ODEgTCA0ODkuMTc5NjU2IDY2LjAxMzc4MSBNIDIwMy44OTQ1IDEz Mi4wMjU1IEwgNDg5LjE3OTY1NiAxMzIuMDI1NSBNIDIwMy44OTQ1IDE5OC4wMzcyMTkgTCA0ODku MTc5NjU2IDE5OC4wMzcyMTkgTSAyMDMuODk0NSAyNjQuMDUyODQ0IEwgNDg5LjE3OTY1NiAyNjQu MDUyODQ0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEz KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjAuMTk5MjUiIHN0cm9rZS1saW5l Y2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUsIDAl KSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDkuOTE3 OTM3IDIwLjY1NDQwNiBMIDIwOS45MTc5MzcgMjMuNDcwODEyIE0gMjE1LjU2NjM3NSAyMC42NTQ0 MDYgTCAyMTUuNTY2Mzc1IDIzLjQ3MDgxMiBNIDIyMC4xNzk2NTYgMjAuNjU0NDA2IEwgMjIwLjE3 OTY1NiAyMy40NzA4MTIgTSAyMjQuMDgyIDIwLjY1NDQwNiBMIDIyNC4wODIgMjMuNDcwODEyIE0g MjI3LjQ2MDkwNiAyMC42NTQ0MDYgTCAyMjcuNDYwOTA2IDIzLjQ3MDgxMiBNIDIzMC40NDEzNzUg MjAuNjU0NDA2IEwgMjMwLjQ0MTM3NSAyMy40NzA4MTIgTSAyMzMuMTA5MzQ0IDIwLjY1NDQwNiBM IDIzMy4xMDkzNDQgMjMuNDcwODEyIE0gMjUwLjY1MjMxMiAyMC42NTQ0MDYgTCAyNTAuNjUyMzEy IDIzLjQ3MDgxMiBNIDI2MC45MTQwMzEgMjAuNjU0NDA2IEwgMjYwLjkxNDAzMSAyMy40NzA4MTIg TSAyNjguMTk1MjgxIDIwLjY1NDQwNiBMIDI2OC4xOTUyODEgMjMuNDcwODEyIE0gMjczLjg0Mzcx OSAyMC42NTQ0MDYgTCAyNzMuODQzNzE5IDIzLjQ3MDgxMiBNIDI3OC40NTcgMjAuNjU0NDA2IEwg Mjc4LjQ1NyAyMy40NzA4MTIgTSAyODIuMzU5MzQ0IDIwLjY1NDQwNiBMIDI4Mi4zNTkzNDQgMjMu NDcwODEyIE0gMjg1LjczODI1IDIwLjY1NDQwNiBMIDI4NS43MzgyNSAyMy40NzA4MTIgTSAyODgu NzE4NzE5IDIwLjY1NDQwNiBMIDI4OC43MTg3MTkgMjMuNDcwODEyIE0gMjkxLjM4NjY4NyAyMC42 NTQ0MDYgTCAyOTEuMzg2Njg3IDIzLjQ3MDgxMiBNIDMwOC45Mjk2NTYgMjAuNjU0NDA2IEwgMzA4 LjkyOTY1NiAyMy40NzA4MTIgTSAzMTkuMTkxMzc1IDIwLjY1NDQwNiBMIDMxOS4xOTEzNzUgMjMu NDcwODEyIE0gMzI2LjQ3MjYyNSAyMC42NTQ0MDYgTCAzMjYuNDcyNjI1IDIzLjQ3MDgxMiBNIDMz Mi4xMjEwNjIgMjAuNjU0NDA2IEwgMzMyLjEyMTA2MiAyMy40NzA4MTIgTSAzMzYuNzM0MzQ0IDIw LjY1NDQwNiBMIDMzNi43MzQzNDQgMjMuNDcwODEyIE0gMzQwLjYzNjY4NyAyMC42NTQ0MDYgTCAz NDAuNjM2Njg3IDIzLjQ3MDgxMiBNIDM0NC4wMTU1OTQgMjAuNjU0NDA2IEwgMzQ0LjAxNTU5NCAy My40NzA4MTIgTSAzNDYuOTk2MDYyIDIwLjY1NDQwNiBMIDM0Ni45OTYwNjIgMjMuNDcwODEyIE0g MzQ5LjY2NDAzMSAyMC42NTQ0MDYgTCAzNDkuNjY0MDMxIDIzLjQ3MDgxMiBNIDM2Ny4yMDcgMjAu NjU0NDA2IEwgMzY3LjIwNyAyMy40NzA4MTIgTSAzNzcuNDY4NzE5IDIwLjY1NDQwNiBMIDM3Ny40 Njg3MTkgMjMuNDcwODEyIE0gMzg0Ljc0OTk2OSAyMC42NTQ0MDYgTCAzODQuNzQ5OTY5IDIzLjQ3 MDgxMiBNIDM5MC4zOTg0MDYgMjAuNjU0NDA2IEwgMzkwLjM5ODQwNiAyMy40NzA4MTIgTSAzOTUu MDExNjg3IDIwLjY1NDQwNiBMIDM5NS4wMTE2ODcgMjMuNDcwODEyIE0gMzk4LjkxNDAzMSAyMC42 NTQ0MDYgTCAzOTguOTE0MDMxIDIzLjQ3MDgxMiBNIDQwMi4yOTI5MzcgMjAuNjU0NDA2IEwgNDAy LjI5MjkzNyAyMy40NzA4MTIgTSA0MDUuMjc3MzEyIDIwLjY1NDQwNiBMIDQwNS4yNzczMTIgMjMu NDcwODEyIE0gNDA3Ljk0MTM3NSAyMC42NTQ0MDYgTCA0MDcuOTQxMzc1IDIzLjQ3MDgxMiBNIDQy NS40ODQzNDQgMjAuNjU0NDA2IEwgNDI1LjQ4NDM0NCAyMy40NzA4MTIgTSA0MzUuNzQ2MDYyIDIw LjY1NDQwNiBMIDQzNS43NDYwNjIgMjMuNDcwODEyIE0gNDQzLjAyNzMxMiAyMC42NTQ0MDYgTCA0 NDMuMDI3MzEyIDIzLjQ3MDgxMiBNIDQ0OC42NzU3NSAyMC42NTQ0MDYgTCA0NDguNjc1NzUgMjMu NDcwODEyIE0gNDUzLjI5MjkzNyAyMC42NTQ0MDYgTCA0NTMuMjkyOTM3IDIzLjQ3MDgxMiBNIDQ1 Ny4xOTEzNzUgMjAuNjU0NDA2IEwgNDU3LjE5MTM3NSAyMy40NzA4MTIgTSA0NjAuNTcwMjgxIDIw LjY1NDQwNiBMIDQ2MC41NzAyODEgMjMuNDcwODEyIE0gNDYzLjU1NDY1NiAyMC42NTQ0MDYgTCA0 NjMuNTU0NjU2IDIzLjQ3MDgxMiBNIDIwOS45MTc5MzcgMjY2LjcxMyBMIDIwOS45MTc5MzcgMjYz Ljg5NjU5NCBNIDIxNS41NjYzNzUgMjY2LjcxMyBMIDIxNS41NjYzNzUgMjYzLjg5NjU5NCBNIDIy MC4xNzk2NTYgMjY2LjcxMyBMIDIyMC4xNzk2NTYgMjYzLjg5NjU5NCBNIDIyNC4wODIgMjY2Ljcx MyBMIDIyNC4wODIgMjYzLjg5NjU5NCBNIDIyNy40NjA5MDYgMjY2LjcxMyBMIDIyNy40NjA5MDYg MjYzLjg5NjU5NCBNIDIzMC40NDEzNzUgMjY2LjcxMyBMIDIzMC40NDEzNzUgMjYzLjg5NjU5NCBN IDIzMy4xMDkzNDQgMjY2LjcxMyBMIDIzMy4xMDkzNDQgMjYzLjg5NjU5NCBNIDI1MC42NTIzMTIg MjY2LjcxMyBMIDI1MC42NTIzMTIgMjYzLjg5NjU5NCBNIDI2MC45MTQwMzEgMjY2LjcxMyBMIDI2 MC45MTQwMzEgMjYzLjg5NjU5NCBNIDI2OC4xOTUyODEgMjY2LjcxMyBMIDI2OC4xOTUyODEgMjYz Ljg5NjU5NCBNIDI3My44NDM3MTkgMjY2LjcxMyBMIDI3My44NDM3MTkgMjYzLjg5NjU5NCBNIDI3 OC40NTcgMjY2LjcxMyBMIDI3OC40NTcgMjYzLjg5NjU5NCBNIDI4Mi4zNTkzNDQgMjY2LjcxMyBM IDI4Mi4zNTkzNDQgMjYzLjg5NjU5NCBNIDI4NS43MzgyNSAyNjYuNzEzIEwgMjg1LjczODI1IDI2 My44OTY1OTQgTSAyODguNzE4NzE5IDI2Ni43MTMgTCAyODguNzE4NzE5IDI2My44OTY1OTQgTSAy OTEuMzg2Njg3IDI2Ni43MTMgTCAyOTEuMzg2Njg3IDI2My44OTY1OTQgTSAzMDguOTI5NjU2IDI2 Ni43MTMgTCAzMDguOTI5NjU2IDI2My44OTY1OTQgTSAzMTkuMTkxMzc1IDI2Ni43MTMgTCAzMTku MTkxMzc1IDI2My44OTY1OTQgTSAzMjYuNDcyNjI1IDI2Ni43MTMgTCAzMjYuNDcyNjI1IDI2My44 OTY1OTQgTSAzMzIuMTIxMDYyIDI2Ni43MTMgTCAzMzIuMTIxMDYyIDI2My44OTY1OTQgTSAzMzYu NzM0MzQ0IDI2Ni43MTMgTCAzMzYuNzM0MzQ0IDI2My44OTY1OTQgTSAzNDAuNjM2Njg3IDI2Ni43 MTMgTCAzNDAuNjM2Njg3IDI2My44OTY1OTQgTSAzNDQuMDE1NTk0IDI2Ni43MTMgTCAzNDQuMDE1 NTk0IDI2My44OTY1OTQgTSAzNDYuOTk2MDYyIDI2Ni43MTMgTCAzNDYuOTk2MDYyIDI2My44OTY1 OTQgTSAzNDkuNjY0MDMxIDI2Ni43MTMgTCAzNDkuNjY0MDMxIDI2My44OTY1OTQgTSAzNjcuMjA3 IDI2Ni43MTMgTCAzNjcuMjA3IDI2My44OTY1OTQgTSAzNzcuNDY4NzE5IDI2Ni43MTMgTCAzNzcu NDY4NzE5IDI2My44OTY1OTQgTSAzODQuNzQ5OTY5IDI2Ni43MTMgTCAzODQuNzQ5OTY5IDI2My44 OTY1OTQgTSAzOTAuMzk4NDA2IDI2Ni43MTMgTCAzOTAuMzk4NDA2IDI2My44OTY1OTQgTSAzOTUu MDExNjg3IDI2Ni43MTMgTCAzOTUuMDExNjg3IDI2My44OTY1OTQgTSAzOTguOTE0MDMxIDI2Ni43 MTMgTCAzOTguOTE0MDMxIDI2My44OTY1OTQgTSA0MDIuMjkyOTM3IDI2Ni43MTMgTCA0MDIuMjky OTM3IDI2My44OTY1OTQgTSA0MDUuMjc3MzEyIDI2Ni43MTMgTCA0MDUuMjc3MzEyIDI2My44OTY1 OTQgTSA0MDcuOTQxMzc1IDI2Ni43MTMgTCA0MDcuOTQxMzc1IDI2My44OTY1OTQgTSA0MjUuNDg0 MzQ0IDI2Ni43MTMgTCA0MjUuNDg0MzQ0IDI2My44OTY1OTQgTSA0MzUuNzQ2MDYyIDI2Ni43MTMg TCA0MzUuNzQ2MDYyIDI2My44OTY1OTQgTSA0NDMuMDI3MzEyIDI2Ni43MTMgTCA0NDMuMDI3MzEy IDI2My44OTY1OTQgTSA0NDguNjc1NzUgMjY2LjcxMyBMIDQ0OC42NzU3NSAyNjMuODk2NTk0IE0g NDUzLjI5MjkzNyAyNjYuNzEzIEwgNDUzLjI5MjkzNyAyNjMuODk2NTk0IE0gNDU3LjE5MTM3NSAy NjYuNzEzIEwgNDU3LjE5MTM3NSAyNjMuODk2NTk0IE0gNDYwLjU3MDI4MSAyNjYuNzEzIEwgNDYw LjU3MDI4MSAyNjMuODk2NTk0IE0gNDYzLjU1NDY1NiAyNjYuNzEzIEwgNDYzLjU1NDY1NiAyNjMu ODk2NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEz KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjAuMTk5MjUiIHN0cm9rZS1saW5l Y2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUsIDAl KSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMzMuMTA5 MzQ0IDIwLjY1NDQwNiBMIDIzMy4xMDkzNDQgMjQuODgwOTY5IE0gMjkxLjM4NjY4NyAyMC42NTQ0 MDYgTCAyOTEuMzg2Njg3IDI0Ljg4MDk2OSBNIDM0OS42NjQwMzEgMjAuNjU0NDA2IEwgMzQ5LjY2 NDAzMSAyNC44ODA5NjkgTSA0MDcuOTQxMzc1IDIwLjY1NDQwNiBMIDQwNy45NDEzNzUgMjQuODgw OTY5IE0gNDY2LjIxODcxOSAyMC42NTQ0MDYgTCA0NjYuMjE4NzE5IDI0Ljg4MDk2OSBNIDIzMy4x MDkzNDQgMjY2LjcxMyBMIDIzMy4xMDkzNDQgMjYyLjQ5MDM0NCBNIDI5MS4zODY2ODcgMjY2Ljcx MyBMIDI5MS4zODY2ODcgMjYyLjQ5MDM0NCBNIDM0OS42NjQwMzEgMjY2LjcxMyBMIDM0OS42NjQw MzEgMjYyLjQ5MDM0NCBNIDQwNy45NDEzNzUgMjY2LjcxMyBMIDQwNy45NDEzNzUgMjYyLjQ5MDM0 NCBNIDQ2Ni4yMTg3MTkgMjY2LjcxMyBMIDQ2Ni4yMTg3MTkgMjYyLjQ5MDM0NCAiIHRyYW5zZm9y bT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0i bm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjE5OTI1IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tl LWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDAlLCAwJSkiIHN0cm9rZS1vcGFjaXR5 PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjAzLjg5NDUgMzEuNDk0MjUgTCAyMDYu NzEwOTA2IDMxLjQ5NDI1IE0gMjAzLjg5NDUgMzkuNzQ0MjUgTCAyMDYuNzEwOTA2IDM5Ljc0NDI1 IE0gMjAzLjg5NDUgNDYuMTM4NzgxIEwgMjA2LjcxMDkwNiA0Ni4xMzg3ODEgTSAyMDMuODk0NSA1 MS4zNjkyNSBMIDIwNi43MTA5MDYgNTEuMzY5MjUgTSAyMDMuODk0NSA1NS43ODcyMTkgTCAyMDYu NzEwOTA2IDU1Ljc4NzIxOSBNIDIwMy44OTQ1IDU5LjYxNTM0NCBMIDIwNi43MTA5MDYgNTkuNjE1 MzQ0IE0gMjAzLjg5NDUgNjIuOTkwMzQ0IEwgMjA2LjcxMDkwNiA2Mi45OTAzNDQgTSAyMDMuODk0 NSA2Ni4wMTM3ODEgTCAyMDYuNzEwOTA2IDY2LjAxMzc4MSBNIDIwMy44OTQ1IDg1Ljg4NDg3NSBM IDIwNi43MTA5MDYgODUuODg0ODc1IE0gMjAzLjg5NDUgOTcuNTA5ODc1IEwgMjA2LjcxMDkwNiA5 Ny41MDk4NzUgTSAyMDMuODk0NSAxMDUuNzU1OTY5IEwgMjA2LjcxMDkwNiAxMDUuNzU1OTY5IE0g MjAzLjg5NDUgMTEyLjE1NDQwNiBMIDIwNi43MTA5MDYgMTEyLjE1NDQwNiBNIDIwMy44OTQ1IDEx Ny4zODA5NjkgTCAyMDYuNzEwOTA2IDExNy4zODA5NjkgTSAyMDMuODk0NSAxMjEuNzk4OTM3IEwg MjA2LjcxMDkwNiAxMjEuNzk4OTM3IE0gMjAzLjg5NDUgMTI1LjYyNzA2MiBMIDIwNi43MTA5MDYg MTI1LjYyNzA2MiBNIDIwMy44OTQ1IDEyOS4wMDU5NjkgTCAyMDYuNzEwOTA2IDEyOS4wMDU5Njkg TSAyMDMuODk0NSAxMzIuMDI1NSBMIDIwNi43MTA5MDYgMTMyLjAyNTUgTSAyMDMuODk0NSAxNTEu ODk2NTk0IEwgMjA2LjcxMDkwNiAxNTEuODk2NTk0IE0gMjAzLjg5NDUgMTYzLjUyMTU5NCBMIDIw Ni43MTA5MDYgMTYzLjUyMTU5NCBNIDIwMy44OTQ1IDE3MS43Njc2ODcgTCAyMDYuNzEwOTA2IDE3 MS43Njc2ODcgTSAyMDMuODk0NSAxNzguMTY2MTI1IEwgMjA2LjcxMDkwNiAxNzguMTY2MTI1IE0g MjAzLjg5NDUgMTgzLjM5MjY4NyBMIDIwNi43MTA5MDYgMTgzLjM5MjY4NyBNIDIwMy44OTQ1IDE4 Ny44MTA2NTYgTCAyMDYuNzEwOTA2IDE4Ny44MTA2NTYgTSAyMDMuODk0NSAxOTEuNjM4NzgxIEwg MjA2LjcxMDkwNiAxOTEuNjM4NzgxIE0gMjAzLjg5NDUgMTk1LjAxNzY4NyBMIDIwNi43MTA5MDYg MTk1LjAxNzY4NyBNIDIwMy44OTQ1IDE5OC4wMzcyMTkgTCAyMDYuNzEwOTA2IDE5OC4wMzcyMTkg TSAyMDMuODk0NSAyMTcuOTA4MzEyIEwgMjA2LjcxMDkwNiAyMTcuOTA4MzEyIE0gMjAzLjg5NDUg MjI5LjUzMzMxMiBMIDIwNi43MTA5MDYgMjI5LjUzMzMxMiBNIDIwMy44OTQ1IDIzNy43ODMzMTIg TCAyMDYuNzEwOTA2IDIzNy43ODMzMTIgTSAyMDMuODk0NSAyNDQuMTc3ODQ0IEwgMjA2LjcxMDkw NiAyNDQuMTc3ODQ0IE0gMjAzLjg5NDUgMjQ5LjQwODMxMiBMIDIwNi43MTA5MDYgMjQ5LjQwODMx MiBNIDIwMy44OTQ1IDI1My44MjYyODEgTCAyMDYuNzEwOTA2IDI1My44MjYyODEgTSAyMDMuODk0 NSAyNTcuNjU0NDA2IEwgMjA2LjcxMDkwNiAyNTcuNjU0NDA2IE0gMjAzLjg5NDUgMjYxLjAyOTQw NiBMIDIwNi43MTA5MDYgMjYxLjAyOTQwNiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0x LCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIw LjE5OTI1IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ry b2tlPSJyZ2IoMCUsIDAlLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1p dD0iMTAiIGQ9Ik0gMjAzLjg5NDUgNjYuMDEzNzgxIEwgMjA4LjEyMTA2MiA2Ni4wMTM3ODEgTSAy MDMuODk0NSAxMzIuMDI1NSBMIDIwOC4xMjEwNjIgMTMyLjAyNTUgTSAyMDMuODk0NSAxOTguMDM3 MjE5IEwgMjA4LjEyMTA2MiAxOTguMDM3MjE5IE0gMjAzLjg5NDUgMjY0LjA1Mjg0NCBMIDIwOC4x MjEwNjIgMjY0LjA1Mjg0NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5Ljgz MiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBz dHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2Io MCUsIDAlLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9 Ik0gMjAzLjg5NDUgMjAuNjU0NDA2IEwgMjAzLjg5NDUgMjY2LjcxMyBMIDQ4OS4xNzk2NTYgMjY2 LjcxMyBMIDQ4OS4xNzk2NTYgMjAuNjU0NDA2IFogTSAyMDMuODk0NSAyMC42NTQ0MDYgIiB0cmFu c2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxnIGZpbGw9 InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5 cGgtMC0xIiB4PSI2Ni4wNTkiIHk9IjI2Ny43ODYiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgt MC0yIiB4PSI3MS4wNDAzIiB5PSIyNjcuNzg2Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwg MCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0xLTEiIHg9Ijc2 LjAyMiIgeT0iMjY0LjE3MSIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1v cGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xIiB4PSIxMjQuMzM2IiB5PSIy NjcuNzg2Ii8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMiIgeD0iMTI5LjMxNzMiIHk9IjI2 Ny43ODYiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+ Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTEtMiIgeD0iMTM0LjI5OCIgeT0iMjY0LjE3MSIvPgo8 L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGlu azpocmVmPSIjZ2x5cGgtMC0xIiB4PSIxODIuNjEzIiB5PSIyNjcuNzg2Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMiIgeD0iMTg3LjU5NDMiIHk9IjI2Ny43ODYiLz4KPC9nPgo8ZyBmaWxs PSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2ds eXBoLTEtMyIgeD0iMTkyLjU3NSIgeT0iMjY0LjE3MSIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwg MCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xIiB4 PSIyNDAuODg5IiB5PSIyNjcuNzg2Ii8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMiIgeD0i MjQ1Ljg3MDMiIHk9IjI2Ny43ODYiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZp bGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTEtNCIgeD0iMjUwLjg1MiIg eT0iMjY0LjE3MSIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5 PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xIiB4PSIyOTkuMTY2IiB5PSIyNjcuNzg2 Ii8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMiIgeD0iMzA0LjE0NzMiIHk9IjI2Ny43ODYi Lz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2Ug eGxpbms6aHJlZj0iI2dseXBoLTEtNSIgeD0iMzA5LjEyOSIgeT0iMjY0LjE3MSIvPgo8L2c+Cjxn IGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVm PSIjZ2x5cGgtMC0xIiB4PSIyNS41MTEiIHk9IjIxNC4yNTYiLz4KPHVzZSB4bGluazpocmVmPSIj Z2x5cGgtMC0yIiB4PSIzMC40OTIzIiB5PSIyMTQuMjU2Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAl LCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0xLTYi IHg9IjM1LjQ3MyIgeT0iMjEwLjY0Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBm aWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjI1LjUxMSIg eT0iMTQ4LjI0NCIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTIiIHg9IjMwLjQ5MjMiIHk9 IjE0OC4yNDQiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0i MSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTEtNyIgeD0iMzUuNDczIiB5PSIxNDQuNjI5Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjI1LjUxMSIgeT0iODIuMjMyIi8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMiIgeD0iMzAuNDkyMyIgeT0iODIuMjMyIi8+CjwvZz4KPGcgZmlsbD0i cmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlw aC0xLTgiIHg9IjM1LjQ3MyIgeT0iNzguNjE3Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwg MCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjI1 LjUxMSIgeT0iMTYuMjIiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0yIiB4PSIzMC40OTIz IiB5PSIxNi4yMiIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5 PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMS0xIiB4PSIzNS40NzMiIHk9IjEyLjYwNSIv Pgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwLTApIj4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry b2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2lu PSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9 IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDMuODk0NSAyMC42NTQ0MDYgTCAyMzcu MTI0OTY5IDQ0LjgyNjI4MSBMIDI1Ny45NTcgNTkuODgwOTY5IEwgMjc1LjMyNDE4NyA2OC4xNjYx MjUgTCAyOTIuMjMwNDM3IDc1LjQ4NjQzNyBMIDMwOC4wNzQxODcgODEuODMwMTg3IEwgMzI0LjM0 MzcxOSA4Ny45MjM5MzcgTCAzNDEuMTE3MTU2IDk1Ljc5MTEyNSBMIDM1OS40MTAxMjUgMTAzLjgx NDU2MiBMIDM4MC44Nzg4NzUgMTEzLjA0ODkzNyBMIDQwOC41NTg1NjIgMTI1LjI0ODE1NiBMIDQ4 OS4xNzk2NTYgMTU2LjE3MzkzNyAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5 LjgzMiwgMjc2LjIxMykiLz4KPC9nPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcC0xKSI+CjxwYXRo IGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgNTQuNTA4OTcyJSki IHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjAzLjg5NDUg MjQuMjc1NSBMIDIzNy4xMjQ5NjkgNDguMzczMTU2IEwgMjU3Ljk1NyA2Mi41Njg0NjkgTCAyNzUu MzI0MTg3IDcwLjg5NjU5NCBMIDI5Mi4yMzA0MzcgNzguNTEzNzgxIEwgMzA4LjA3NDE4NyA4NC4y NTU5NjkgTCAzMjQuMzQzNzE5IDkwLjUyNTUgTCAzNDEuMTE3MTU2IDk3LjU5OTcxOSBMIDM1OS40 MTAxMjUgMTA1LjE1ODMxMiBMIDM4MC44Nzg4NzUgMTE0LjU5NTgxMiBMIDQwOC41NTg1NjIgMTI3 LjAwMjA2MiBMIDQ4OS4xNzk2NTYgMTY3Ljc0MDM0NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAs IDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPC9nPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xp cC0yKSI+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxp bmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1 NSUsIDE4LjgyMzI0MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1p dGVybGltaXQ9IjEwIiBkPSJNIDIwMy44OTQ1IDQxLjA3NjI4MSBMIDIzNy4xMjQ5NjkgNzYuODYx NDM3IEwgMjU3Ljk1NyA5Ni4wODggTCAyNzUuMzI0MTg3IDEwNS4yNjc2ODcgTCAyOTIuMjMwNDM3 IDExNC40OTgxNTYgTCAzMDguMDc0MTg3IDEyMC40ODI1MzEgTCAzMjQuMzQzNzE5IDEyNy4xNzc4 NDQgTCAzNDEuMTE3MTU2IDEzNS44MzAxODcgTCAzNTkuNDEwMTI1IDE0NS41Njg0NjkgTCAzODAu ODc4ODc1IDE1OC4zNjUzNDQgTCA0MDguNTU4NTYyIDE3OS42NjYxMjUgTCA0ODkuMTc5NjU2IDI2 Ni43MTMgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMp Ii8+CjwvZz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2Ut bGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5 LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg ZD0iTSAyMDIuNDg0MzQ0IDE5LjI0NDI1IEwgMjA1LjMwNDY1NiAyMi4wNjQ1NjIgTSAyMDIuNDg0 MzQ0IDIyLjA2NDU2MiBMIDIwNS4zMDQ2NTYgMTkuMjQ0MjUgIiB0cmFuc2Zvcm09Im1hdHJpeCgx LCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9r ZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0i bWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUwODglLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIx IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjM1LjcxNDgxMiA0My40MjAwMzEgTCAyMzgu NTM1MTI1IDQ2LjIzNjQzNyBNIDIzNS43MTQ4MTIgNDYuMjM2NDM3IEwgMjM4LjUzNTEyNSA0My40 MjAwMzEgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMp Ii8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVj YXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUw ODglLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0g MjU2LjU1MDc1IDU4LjQ3MDgxMiBMIDI1OS4zNjcxNTYgNjEuMjg3MjE5IE0gMjU2LjU1MDc1IDYx LjI4NzIxOSBMIDI1OS4zNjcxNTYgNTguNDcwODEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwg MCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lk dGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVy IiBzdHJva2U9InJnYigwJSwgMzkuMjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ry b2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDI3My45MTQwMzEgNjYuNzU1OTY5IEwgMjc2LjczMDQz NyA2OS41NzIzNzUgTSAyNzMuOTE0MDMxIDY5LjU3MjM3NSBMIDI3Ni43MzA0MzcgNjYuNzU1OTY5 ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8 cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJi dXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMzkuMjE1MDg4JSwg MCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDI5MC44 MjQxODcgNzQuMDgwMTg3IEwgMjkzLjY0MDU5NCA3Ni44OTY1OTQgTSAyOTAuODI0MTg3IDc2Ljg5 NjU5NCBMIDI5My42NDA1OTQgNzQuMDgwMTg3ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwg LTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9 IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBz dHJva2U9InJnYigwJSwgMzkuMjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tl LW1pdGVybGltaXQ9IjEwIiBkPSJNIDMwNi42Njc5MzcgODAuNDIzOTM3IEwgMzA5LjQ4NDM0NCA4 My4yNDAzNDQgTSAzMDYuNjY3OTM3IDgzLjI0MDM0NCBMIDMwOS40ODQzNDQgODAuNDIzOTM3ICIg dHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0 aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0 IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMzkuMjE1MDg4JSwgMCUp IiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDMyMi45MzM1 NjIgODYuNTEzNzgxIEwgMzI1Ljc1Mzg3NSA4OS4zMzAxODcgTSAzMjIuOTMzNTYyIDg5LjMzMDE4 NyBMIDMyNS43NTM4NzUgODYuNTEzNzgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEs IC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEu NTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJv a2U9InJnYigwJSwgMzkuMjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1p dGVybGltaXQ9IjEwIiBkPSJNIDMzOS43MTA5MDYgOTQuMzgwOTY5IEwgMzQyLjUyNzMxMiA5Ny4y MDEyODEgTSAzMzkuNzEwOTA2IDk3LjIwMTI4MSBMIDM0Mi41MjczMTIgOTQuMzgwOTY5ICIgdHJh bnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBm aWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBz dHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMzkuMjE1MDg4JSwgMCUpIiBz dHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDM1Ny45OTk5Njkg MTAyLjQwNDQwNiBMIDM2MC44MTYzNzUgMTA1LjIyNDcxOSBNIDM1Ny45OTk5NjkgMTA1LjIyNDcx OSBMIDM2MC44MTYzNzUgMTAyLjQwNDQwNiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0x LCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIx LjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ry b2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1t aXRlcmxpbWl0PSIxMCIgZD0iTSAzNzkuNDY4NzE5IDExMS42Mzg3ODEgTCAzODIuMjg1MTI1IDEx NC40NTkwOTQgTSAzNzkuNDY4NzE5IDExNC40NTkwOTQgTCAzODIuMjg1MTI1IDExMS42Mzg3ODEg IiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+Cjxw YXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1 dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUwODglLCAw JSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gNDA3LjE1 MjMxMiAxMjMuODM4IEwgNDA5Ljk2ODcxOSAxMjYuNjU4MzEyIE0gNDA3LjE1MjMxMiAxMjYuNjU4 MzEyIEwgNDA5Ljk2ODcxOSAxMjMuODM4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEs IC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcC0zKSI+CjxwYXRo IGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUwODglLCAwJSki IHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gNDg3Ljc2OTUg MTU0Ljc2NzY4NyBMIDQ5MC41ODk4MTIgMTU3LjU4NDA5NCBNIDQ4Ny43Njk1IDE1Ny41ODQwOTQg TCA0OTAuNTg5ODEyIDE1NC43Njc2ODcgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwg LTE1OS44MzIsIDI3Ni4yMTMpIi8+CjwvZz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRo PSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIg c3Ryb2tlPSJyZ2IoMCUsIDAlLCA1NC41MDg5NzIlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9r ZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDEuOTAyMzEyIDI0LjI3NTUgTCAyMDUuODg2Njg3IDI0 LjI3NTUgTSAyMDMuODk0NSAyNi4yNjc2ODcgTCAyMDMuODk0NSAyMi4yODMzMTIgIiB0cmFuc2Zv cm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9 Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9r ZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgNTQuNTA4OTcyJSkiIHN0cm9r ZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjM1LjEzMjc4MSA0OC4z NzMxNTYgTCAyMzkuMTE3MTU2IDQ4LjM3MzE1NiBNIDIzNy4xMjQ5NjkgNTAuMzY1MzQ0IEwgMjM3 LjEyNDk2OSA0Ni4zODA5NjkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44 MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIg c3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdi KDAlLCAwJSwgNTQuNTA4OTcyJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1p dD0iMTAiIGQ9Ik0gMjU1Ljk2NDgxMiA2Mi41Njg0NjkgTCAyNTkuOTUzMDk0IDYyLjU2ODQ2OSBN IDI1Ny45NTcgNjQuNTYwNjU2IEwgMjU3Ljk1NyA2MC41NzYyODEgIiB0cmFuc2Zvcm09Im1hdHJp eCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0 cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9p bj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgNTQuNTA4OTcyJSkiIHN0cm9rZS1vcGFjaXR5 PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjczLjMzMiA3MC44OTY1OTQgTCAyNzcu MzE2Mzc1IDcwLjg5NjU5NCBNIDI3NS4zMjQxODcgNzIuODg4NzgxIEwgMjc1LjMyNDE4NyA2OC45 MDQ0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMp Ii8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVj YXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgNTQu NTA4OTcyJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0g MjkwLjIzODI1IDc4LjUxMzc4MSBMIDI5NC4yMjY1MzEgNzguNTEzNzgxIE0gMjkyLjIzMDQzNyA4 MC41MDU5NjkgTCAyOTIuMjMwNDM3IDc2LjUyMTU5NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAs IDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdp ZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRl ciIgc3Ryb2tlPSJyZ2IoMCUsIDAlLCA1NC41MDg5NzIlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0 cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAzMDYuMDgyIDg0LjI1NTk2OSBMIDMxMC4wNjYzNzUg ODQuMjU1OTY5IE0gMzA4LjA3NDE4NyA4Ni4yNDgxNTYgTCAzMDguMDc0MTg3IDgyLjI2Mzc4MSAi IHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBh dGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0 dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDAlLCA1NC41MDg5NzIl KSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAzMjIuMzUx NTMxIDkwLjUyNTUgTCAzMjYuMzM1OTA2IDkwLjUyNTUgTSAzMjQuMzQzNzE5IDkyLjUxNzY4NyBM IDMyNC4zNDM3MTkgODguNTI5NDA2ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0x NTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0 MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9 InJnYigwJSwgMCUsIDU0LjUwODk3MiUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVy bGltaXQ9IjEwIiBkPSJNIDMzOS4xMjQ5NjkgOTcuNTk5NzE5IEwgMzQzLjEwOTM0NCA5Ny41OTk3 MTkgTSAzNDEuMTE3MTU2IDk5LjU5MTkwNiBMIDM0MS4xMTcxNTYgOTUuNjA3NTMxICIgdHJhbnNm b3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxs PSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJv a2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUsIDU0LjUwODk3MiUpIiBzdHJv a2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDM1Ny40MTc5MzcgMTA1 LjE1ODMxMiBMIDM2MS40MDIzMTIgMTA1LjE1ODMxMiBNIDM1OS40MTAxMjUgMTA3LjE1MDUgTCAz NTkuNDEwMTI1IDEwMy4xNjYxMjUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1 OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQw NCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0i cmdiKDAlLCAwJSwgNTQuNTA4OTcyJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJs aW1pdD0iMTAiIGQ9Ik0gMzc4Ljg4Mjc4MSAxMTQuNTk1ODEyIEwgMzgyLjg3MTA2MiAxMTQuNTk1 ODEyIE0gMzgwLjg3ODg3NSAxMTYuNTkxOTA2IEwgMzgwLjg3ODg3NSAxMTIuNjAzNjI1ICIgdHJh bnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBm aWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBz dHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUsIDU0LjUwODk3MiUpIiBz dHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDQwNi41NjYzNzUg MTI3LjAwMjA2MiBMIDQxMC41NTA3NSAxMjcuMDAyMDYyIE0gNDA4LjU1ODU2MiAxMjguOTk0MjUg TCA0MDguNTU4NTYyIDEyNS4wMDk4NzUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwg LTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41 OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9r ZT0icmdiKDAlLCAwJSwgNTQuNTA4OTcyJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0 ZXJsaW1pdD0iMTAiIGQ9Ik0gNDg3LjE4NzQ2OSAxNjcuNzQwMzQ0IEwgNDkxLjE3MTg0NCAxNjcu NzQwMzQ0IE0gNDg5LjE3OTY1NiAxNjkuNzMyNTMxIEwgNDg5LjE3OTY1NiAxNjUuNzQ0MjUgIiB0 cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRo IGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUsIDE4LjgyMzI0 MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEw IiBkPSJNIDIwMy44OTQ1IDM5LjA4NDA5NCBMIDIwMi4xNjc5MzcgNDIuMDcyMzc1IEwgMjA1LjYy MTA2MiA0Mi4wNzIzNzUgWiBNIDIwMy44OTQ1IDM5LjA4NDA5NCAiIHRyYW5zZm9ybT0ibWF0cml4 KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry b2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2lu PSJtaXRlciIgc3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwgMTguODIzMjQyJSwgMzcuNjQ2NDg0JSki IHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMjM3LjEyNDk2 OSA3NC44NjkyNSBMIDIzNS4zOTg0MDYgNzcuODU3NTMxIEwgMjM4Ljg1MTUzMSA3Ny44NTc1MzEg WiBNIDIzNy4xMjQ5NjkgNzQuODY5MjUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwg LTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41 OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9r ZT0icmdiKDY5LjAxODU1NSUsIDE4LjgyMzI0MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0 eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDI1Ny45NTcgOTQuMDk1ODEyIEwgMjU2 LjIzNDM0NCA5Ny4wODQwOTQgTCAyNTkuNjgzNTYyIDk3LjA4NDA5NCBaIE0gMjU3Ljk1NyA5NC4w OTU4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMp Ii8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVj YXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUs IDE4LjgyMzI0MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVy bGltaXQ9IjEwIiBkPSJNIDI3NS4zMjQxODcgMTAzLjI3NTUgTCAyNzMuNTk3NjI1IDEwNi4yNjM3 ODEgTCAyNzcuMDQ2ODQ0IDEwNi4yNjM3ODEgWiBNIDI3NS4zMjQxODcgMTAzLjI3NTUgIiB0cmFu c2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZp bGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0 cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUsIDE4LjgyMzI0MiUs IDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBk PSJNIDI5Mi4yMzA0MzcgMTEyLjUwNTk2OSBMIDI5MC41MDc3ODEgMTE1LjQ5NDI1IEwgMjkzLjk1 NyAxMTUuNDk0MjUgWiBNIDI5Mi4yMzA0MzcgMTEyLjUwNTk2OSAiIHRyYW5zZm9ybT0ibWF0cml4 KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry b2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2lu PSJtaXRlciIgc3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwgMTguODIzMjQyJSwgMzcuNjQ2NDg0JSki IHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMzA4LjA3NDE4 NyAxMTguNDkwMzQ0IEwgMzA2LjM1MTUzMSAxMjEuNDc4NjI1IEwgMzA5LjgwMDc1IDEyMS40Nzg2 MjUgWiBNIDMwOC4wNzQxODcgMTE4LjQ5MDM0NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAs IC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRo PSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIg c3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwgMTguODIzMjQyJSwgMzcuNjQ2NDg0JSkiIHN0cm9rZS1v cGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMzI0LjM0MzcxOSAxMjUuMTg1 NjU2IEwgMzIyLjYxNzE1NiAxMjguMTczOTM3IEwgMzI2LjA3MDI4MSAxMjguMTczOTM3IFogTSAz MjQuMzQzNzE5IDEyNS4xODU2NTYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1 OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQw NCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0i cmdiKDY5LjAxODU1NSUsIDE4LjgyMzI0MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0i MSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDM0MS4xMTcxNTYgMTMzLjgzOCBMIDMzOS4z OTQ1IDEzNi44MjYyODEgTCAzNDIuODQzNzE5IDEzNi44MjYyODEgWiBNIDM0MS4xMTcxNTYgMTMz LjgzOCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMyki Lz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNh cD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwg MTguODIzMjQyJSwgMzcuNjQ2NDg0JSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJs aW1pdD0iMTAiIGQ9Ik0gMzU5LjQxMDEyNSAxNDMuNTc2MjgxIEwgMzU3LjY4MzU2MiAxNDYuNTY0 NTYyIEwgMzYxLjEzMjc4MSAxNDYuNTY0NTYyIFogTSAzNTkuNDEwMTI1IDE0My41NzYyODEgIiB0 cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1OS44MzIsIDI3Ni4yMTMpIi8+CjxwYXRo IGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUsIDE4LjgyMzI0 MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEw IiBkPSJNIDM4MC44Nzg4NzUgMTU2LjM3MzE1NiBMIDM3OS4xNTIzMTIgMTU5LjM2MTQzNyBMIDM4 Mi42MDE1MzEgMTU5LjM2MTQzNyBaIE0gMzgwLjg3ODg3NSAxNTYuMzczMTU2ICIgdHJhbnNmb3Jt PSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJu b25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2Ut bGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYig2OS4wMTg1NTUlLCAxOC44MjMyNDIlLCAzNy42 NDY0ODQlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSA0 MDguNTU4NTYyIDE3Ny42NzM5MzcgTCA0MDYuODMyIDE4MC42NjIyMTkgTCA0MTAuMjg1MTI1IDE4 MC42NjIyMTkgWiBNIDQwOC41NTg1NjIgMTc3LjY3MzkzNyAiIHRyYW5zZm9ybT0ibWF0cml4KDEs IDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAt NCkiPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5l Y2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYig2OS4wMTg1NTUl LCAxOC44MjMyNDIlLCAzNy42NDY0ODQlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRl cmxpbWl0PSIxMCIgZD0iTSA0ODkuMTc5NjU2IDI2NC43MjA4MTIgTCA0ODcuNDUzMDk0IDI2Ny43 MDkwOTQgTCA0OTAuOTA2MjE5IDI2Ny43MDkwOTQgWiBNIDQ4OS4xNzk2NTYgMjY0LjcyMDgxMiAi IHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTU5LjgzMiwgMjc2LjIxMykiLz4KPC9n Pgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMyIgeD0iMTYyLjU1NCIgeT0iMjgyLjY5NiIvPgo8L2c+CjxnIGZpbGw9 InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5 cGgtMi0xIiB4PSIxNjYuNDI4IiB5PSIyODIuNjk2Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAw JSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTQiIHg9 IjE3OS4zOTQiIHk9IjI4Mi42OTYiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZp bGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTItMiIgeD0iMTg5LjM1NiIg eT0iMjgyLjY5NiIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5 PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC01IiB4PSIxOTguNDQ3IiB5PSIyODIuNjk2 Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNl IHhsaW5rOmhyZWY9IiNnbHlwaC0yLTMiIHg9IjIwMi4zMjEiIHk9IjI4Mi42OTYiLz4KPC9nPgo8 ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJl Zj0iI2dseXBoLTMtMSIgeD0iMTUuNTgyIiB5PSIxNDYuOTU0Ii8+CjwvZz4KPGcgZmlsbD0icmdi KDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC00 LTEiIHg9IjE1LjU4MiIgeT0iMTM4LjA4OCIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC00LTIi IHg9IjE1LjU4MiIgeT0iMTM0LjIxMzU0NSIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC00LTMi IHg9IjE1LjU4MiIgeT0iMTI1LjkxMTcxIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTQtNCIg eD0iMTUuNTgyIiB5PSIxMjEuOTgyNDYxIi8+CjwvZz4KPHBhdGggZmlsbC1ydWxlPSJub256ZXJv IiBmaWxsPSJyZ2IoMTAwJSwgMTAwJSwgMTAwJSkiIGZpbGwtb3BhY2l0eT0iMSIgc3Ryb2tlLXdp ZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRl ciIgc3Ryb2tlPSJyZ2IoMCUsIDAlLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0 ZXJsaW1pdD0iMTAiIGQ9Ik0gMjEwLjM5ODQwNiAyMTkuODE0NTYyIEwgMzI3LjkxMDEyNSAyMTku ODE0NTYyIEwgMzI3LjkxMDEyNSAyNjAuOTk0MjUgTCAyMTAuMzk4NDA2IDI2MC45OTQyNSBaIE0g MjEwLjM5ODQwNiAyMTkuODE0NTYyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0x NTkuODMyLCAyNzYuMjEzKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0 MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9 InJnYigwJSwgMzkuMjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVy bGltaXQ9IjEwIiBkPSJNIDAuMDAxNTYyNSAtMC4wMDEwNjI1IEwgMTcuMDA5Mzc1IC0wLjAwMTA2 MjUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgNTQuMzUsIDIzLjQxMykiLz4KPHBh dGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0 dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAl KSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSA3LjA5NTMx MiAtMS40MDczMTMgTCA5LjkxMTcxOSAxLjQwOTA5NCBNIDcuMDk1MzEyIDEuNDA5MDk0IEwgOS45 MTE3MTkgLTEuNDA3MzEzICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIDU0LjM1LCAy My40MTMpIi8+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVz ZSB4bGluazpocmVmPSIjZ2x5cGgtMC02IiB4PSI3NC4xNDciIHk9IjI2LjEyNSIvPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTciIHg9Ijc2LjkxNDYxIiB5PSIyNi4xMjUiLz4KPHVzZSB4bGlu azpocmVmPSIjZ2x5cGgtMC04IiB4PSI4NS4yMTY0NDUiIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC0wLTkiIHg9IjkwLjE5Nzc0NSIgeT0iMjYuMTI1Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtOCIgeD0iOTQuMTAwMDk1IiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC0xMCIgeD0iOTkuMDgxMzk1IiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC0xMSIgeD0iMTAyLjQwMTkzIiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC02IiB4PSIxMDcuOTM3MTUiIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5rOmhy ZWY9IiNnbHlwaC0wLTEyIiB4PSIxMTAuNzA0NzYxIiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC0xMCIgeD0iMTE2LjUxNTk0NSIgeT0iMjYuMTI1Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMTMiIHg9IjExOS44MzY0OCIgeT0iMjYuMTI1Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtNiIgeD0iMTI1LjM3MTciIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5rOmhy ZWY9IiNnbHlwaC0wLTE0IiB4PSIxMjguMTM5MzExIiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC0xNSIgeD0iMTMyLjA2ODU2IiB5PSIyNi4xMjUiLz4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMC0xNiIgeD0iMTM1Ljk0MzAxNSIgeT0iMjYuMTI1Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMTciIHg9IjE0MC45MjQzMTUiIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC0wLTkiIHg9IjE0NS45MDU2MTUiIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC0wLTgiIHg9IjE0OS44MDc5NjYiIHk9IjI2LjEyNSIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC0wLTciIHg9IjE1NC43ODkyNjYiIHk9IjI2LjEyNSIvPgo8L2c+CjxwYXRo IGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgNTQuNTA4OTcyJSki IHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMC4wMDE1NjI1 IC0wLjAwMTUgTCAxNy4wMDkzNzUgLTAuMDAxNSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAs IC0xLCA1NC4zNSwgMzUuODExKSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEu NTk0MDQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJv a2U9InJnYigwJSwgMCUsIDU0LjUwODk3MiUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1p dGVybGltaXQ9IjEwIiBkPSJNIDYuNTEzMjgxIC0wLjAwMTUgTCAxMC40OTc2NTYgLTAuMDAxNSBN IDguNTA1NDY5IDEuOTkwNjg3IEwgOC41MDU0NjkgLTEuOTkzNjg4ICIgdHJhbnNmb3JtPSJtYXRy aXgoMSwgMCwgMCwgLTEsIDU0LjM1LCAzNS44MTEpIi8+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAl KSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC02IiB4PSI3NC4x NDciIHk9IjM4LjUyMyIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTciIHg9Ijc2LjkxNDYx IiB5PSIzOC41MjMiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC04IiB4PSI4NS4yMTY0NDUi IHk9IjM4LjUyMyIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTkiIHg9IjkwLjE5Nzc0NSIg eT0iMzguNTIzIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtOCIgeD0iOTQuMTAwMDk1IiB5 PSIzOC41MjMiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xMCIgeD0iOTkuMDgxMzk1IiB5 PSIzOC41MjMiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xMSIgeD0iMTAyLjQwMTkzIiB5 PSIzOC41MjMiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC02IiB4PSIxMDcuOTM3MTUiIHk9 IjM4LjUyMyIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEyIiB4PSIxMTAuNzA0NzYxIiB5 PSIzOC41MjMiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xMCIgeD0iMTE2LjUxNTk0NSIg eT0iMzguNTIzIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtNyIgeD0iMTE5LjgzNjQ4IiB5 PSIzOC41MjMiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0i MSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMTgiIHg9IjEyNy44NTkzNjIiIHk9IjM4LjUy MyIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVz ZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xOSIgeD0iMTMyLjg0ODYzMiIgeT0iMzguNTIzIi8+Cjx1 c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtOSIgeD0iMTM3LjI3NjAxMSIgeT0iMzguNTIzIi8+Cjx1 c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMTQiIHg9IjE0MS4xNzgzNjIiIHk9IjM4LjUyMyIvPgo8 L2c+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVj YXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUs IDE4LjgyMzI0MiUsIDM3LjY0NjQ4NCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVy bGltaXQ9IjEwIiBkPSJNIDAuMDAxNTYyNSAwLjAwMDk2ODc1IEwgMTcuMDA5Mzc1IDAuMDAwOTY4 NzUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgNTQuMzUsIDQ4LjIwOCkiLz4KPHBh dGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0 dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoNjkuMDE4NTU1JSwgMTguODIz MjQyJSwgMzcuNjQ2NDg0JSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0i MTAiIGQ9Ik0gOC41MDU0NjkgLTEuOTkxMjE5IEwgNi43Nzg5MDYgMC45OTcwNjIgTCAxMC4yMjgx MjUgMC45OTcwNjIgWiBNIDguNTA1NDY5IC0xLjk5MTIxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEs IDAsIDAsIC0xLCA1NC4zNSwgNDguMjA4KSIvPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZp bGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMTQiIHg9Ijc0LjE0NyIg eT0iNTAuOTIxIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtNiIgeD0iNzguMDc2MjQ5IiB5 PSI1MC45MjEiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC03IiB4PSI4MC44NDM4NiIgeT0i NTAuOTIxIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtNiIgeD0iODkuMTQ1Njk0IiB5PSI1 MC45MjEiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0yMCIgeD0iOTEuOTEzMzA1IiB5PSI1 MC45MjEiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC04IiB4PSI5NC42ODA5MTUiIHk9IjUw LjkyMSIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTkiIHg9Ijk5LjY2MjIxNSIgeT0iNTAu OTIxIi8+CjwvZz4KPC9zdmc+Cg== imara-diff-0.1.5/plots/linux_speedup.svg000064400000000000000000001366651046102023000164150ustar 00000000000000 imara-diff-0.1.5/plots/linux_speedup.svg.base64000064400000000000000000002001111046102023000174520ustar 00000000000000PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDov L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5 L3hsaW5rIiB3aWR0aD0iMzQ0LjEzNiIgaGVpZ2h0PSIyODkuOTk1IiB2aWV3Qm94PSIwIDAgMzQ0 LjEzNiAyODkuOTk1Ij4KPGRlZnM+CjxnPgo8ZyBpZD0iZ2x5cGgtMC0wIj4KPC9nPgo8ZyBpZD0i Z2x5cGgtMC0xIj4KPHBhdGggZD0iTSAyLjkzNzUgLTYuMzc1IEMgMi45Mzc1IC02LjYyNSAyLjkz NzUgLTYuNjQwNjI1IDIuNzAzMTI1IC02LjY0MDYyNSBDIDIuMDc4MTI1IC02IDEuMjAzMTI1IC02 IDAuODkwNjI1IC02IEwgMC44OTA2MjUgLTUuNjg3NSBDIDEuMDkzNzUgLTUuNjg3NSAxLjY3MTg3 NSAtNS42ODc1IDIuMTg3NSAtNS45NTMxMjUgTCAyLjE4NzUgLTAuNzgxMjUgQyAyLjE4NzUgLTAu NDIxODc1IDIuMTU2MjUgLTAuMzEyNSAxLjI2NTYyNSAtMC4zMTI1IEwgMC45NTMxMjUgLTAuMzEy NSBMIDAuOTUzMTI1IDAgQyAxLjI5Njg3NSAtMC4wMzEyNSAyLjE1NjI1IC0wLjAzMTI1IDIuNTYy NSAtMC4wMzEyNSBDIDIuOTUzMTI1IC0wLjAzMTI1IDMuODI4MTI1IC0wLjAzMTI1IDQuMTcxODc1 IDAgTCA0LjE3MTg3NSAtMC4zMTI1IEwgMy44NTkzNzUgLTAuMzEyNSBDIDIuOTUzMTI1IC0wLjMx MjUgMi45Mzc1IC0wLjQyMTg3NSAyLjkzNzUgLTAuNzgxMjUgWiBNIDIuOTM3NSAtNi4zNzUgIi8+ CjwvZz4KPGcgaWQ9ImdseXBoLTAtMiI+CjxwYXRoIGQ9Ik0gNC41NzgxMjUgLTMuMTg3NSBDIDQu NTc4MTI1IC0zLjk4NDM3NSA0LjUzMTI1IC00Ljc4MTI1IDQuMTg3NSAtNS41MTU2MjUgQyAzLjcz NDM3NSAtNi40ODQzNzUgMi45MDYyNSAtNi42NDA2MjUgMi41IC02LjY0MDYyNSBDIDEuODkwNjI1 IC02LjY0MDYyNSAxLjE3MTg3NSAtNi4zNzUgMC43NSAtNS40NTMxMjUgQyAwLjQzNzUgLTQuNzY1 NjI1IDAuMzkwNjI1IC0zLjk4NDM3NSAwLjM5MDYyNSAtMy4xODc1IEMgMC4zOTA2MjUgLTIuNDM3 NSAwLjQyMTg3NSAtMS41NDY4NzUgMC44NDM3NSAtMC43ODEyNSBDIDEuMjY1NjI1IDAuMDE1NjI1 IDIgMC4yMTg3NSAyLjQ4NDM3NSAwLjIxODc1IEMgMy4wMTU2MjUgMC4yMTg3NSAzLjc4MTI1IDAu MDE1NjI1IDQuMjE4NzUgLTAuOTM3NSBDIDQuNTMxMjUgLTEuNjI1IDQuNTc4MTI1IC0yLjQwNjI1 IDQuNTc4MTI1IC0zLjE4NzUgWiBNIDIuNDg0Mzc1IDAgQyAyLjA5Mzc1IDAgMS41IC0wLjI1IDEu MzI4MTI1IC0xLjIwMzEyNSBDIDEuMjE4NzUgLTEuNzk2ODc1IDEuMjE4NzUgLTIuNzE4NzUgMS4y MTg3NSAtMy4zMTI1IEMgMS4yMTg3NSAtMy45NTMxMjUgMS4yMTg3NSAtNC42MDkzNzUgMS4yOTY4 NzUgLTUuMTQwNjI1IEMgMS40ODQzNzUgLTYuMzI4MTI1IDIuMjM0Mzc1IC02LjQyMTg3NSAyLjQ4 NDM3NSAtNi40MjE4NzUgQyAyLjgxMjUgLTYuNDIxODc1IDMuNDY4NzUgLTYuMjM0Mzc1IDMuNjU2 MjUgLTUuMjUgQyAzLjc2NTYyNSAtNC42ODc1IDMuNzY1NjI1IC0zLjkzNzUgMy43NjU2MjUgLTMu MzEyNSBDIDMuNzY1NjI1IC0yLjU2MjUgMy43NjU2MjUgLTEuODkwNjI1IDMuNjU2MjUgLTEuMjUg QyAzLjUgLTAuMjk2ODc1IDIuOTM3NSAwIDIuNDg0Mzc1IDAgWiBNIDIuNDg0Mzc1IDAgIi8+Cjwv Zz4KPGcgaWQ9ImdseXBoLTAtMyI+CjxwYXRoIGQ9Ik0gNC40Njg3NSAtMiBDIDQuNDY4NzUgLTMu MTg3NSAzLjY1NjI1IC00LjE4NzUgMi41NzgxMjUgLTQuMTg3NSBDIDIuMTA5Mzc1IC00LjE4NzUg MS42NzE4NzUgLTQuMDMxMjUgMS4zMTI1IC0zLjY3MTg3NSBMIDEuMzEyNSAtNS42MjUgQyAxLjUx NTYyNSAtNS41NjI1IDEuODQzNzUgLTUuNSAyLjE1NjI1IC01LjUgQyAzLjM5MDYyNSAtNS41IDQu MDkzNzUgLTYuNDA2MjUgNC4wOTM3NSAtNi41MzEyNSBDIDQuMDkzNzUgLTYuNTkzNzUgNC4wNjI1 IC02LjY0MDYyNSAzLjk4NDM3NSAtNi42NDA2MjUgQyAzLjk4NDM3NSAtNi42NDA2MjUgMy45NTMx MjUgLTYuNjQwNjI1IDMuOTA2MjUgLTYuNjA5Mzc1IEMgMy43MDMxMjUgLTYuNTE1NjI1IDMuMjE4 NzUgLTYuMzEyNSAyLjU0Njg3NSAtNi4zMTI1IEMgMi4xNTYyNSAtNi4zMTI1IDEuNjg3NSAtNi4z OTA2MjUgMS4yMTg3NSAtNi41OTM3NSBDIDEuMTQwNjI1IC02LjYyNSAxLjEyNSAtNi42MjUgMS4x MDkzNzUgLTYuNjI1IEMgMSAtNi42MjUgMSAtNi41NDY4NzUgMSAtNi4zOTA2MjUgTCAxIC0zLjQz NzUgQyAxIC0zLjI2NTYyNSAxIC0zLjE4NzUgMS4xNDA2MjUgLTMuMTg3NSBDIDEuMjE4NzUgLTMu MTg3NSAxLjIzNDM3NSAtMy4yMDMxMjUgMS4yODEyNSAtMy4yNjU2MjUgQyAxLjM5MDYyNSAtMy40 MjE4NzUgMS43NSAtMy45Njg3NSAyLjU2MjUgLTMuOTY4NzUgQyAzLjA3ODEyNSAtMy45Njg3NSAz LjMyODEyNSAtMy41MTU2MjUgMy40MDYyNSAtMy4zMjgxMjUgQyAzLjU2MjUgLTIuOTUzMTI1IDMu NTkzNzUgLTIuNTc4MTI1IDMuNTkzNzUgLTIuMDc4MTI1IEMgMy41OTM3NSAtMS43MTg3NSAzLjU5 Mzc1IC0xLjEyNSAzLjM0Mzc1IC0wLjcwMzEyNSBDIDMuMTA5Mzc1IC0wLjMxMjUgMi43MzQzNzUg LTAuMDYyNSAyLjI4MTI1IC0wLjA2MjUgQyAxLjU2MjUgLTAuMDYyNSAwLjk4NDM3NSAtMC41OTM3 NSAwLjgxMjUgLTEuMTcxODc1IEMgMC44NDM3NSAtMS4xNzE4NzUgMC44NzUgLTEuMTU2MjUgMC45 ODQzNzUgLTEuMTU2MjUgQyAxLjMxMjUgLTEuMTU2MjUgMS40ODQzNzUgLTEuNDA2MjUgMS40ODQz NzUgLTEuNjQwNjI1IEMgMS40ODQzNzUgLTEuODkwNjI1IDEuMzEyNSAtMi4xNDA2MjUgMC45ODQz NzUgLTIuMTQwNjI1IEMgMC44NDM3NSAtMi4xNDA2MjUgMC41IC0yLjA2MjUgMC41IC0xLjYwOTM3 NSBDIDAuNSAtMC43NSAxLjE4NzUgMC4yMTg3NSAyLjI5Njg3NSAwLjIxODc1IEMgMy40NTMxMjUg MC4yMTg3NSA0LjQ2ODc1IC0wLjczNDM3NSA0LjQ2ODc1IC0yIFogTSA0LjQ2ODc1IC0yICIvPgo8 L2c+CjxnIGlkPSJnbHlwaC0wLTQiPgo8cGF0aCBkPSJNIDEuMjY1NjI1IC0wLjc2NTYyNSBMIDIu MzI4MTI1IC0xLjc5Njg3NSBDIDMuODc1IC0zLjE3MTg3NSA0LjQ2ODc1IC0zLjcwMzEyNSA0LjQ2 ODc1IC00LjcwMzEyNSBDIDQuNDY4NzUgLTUuODQzNzUgMy41NzgxMjUgLTYuNjQwNjI1IDIuMzU5 Mzc1IC02LjY0MDYyNSBDIDEuMjM0Mzc1IC02LjY0MDYyNSAwLjUgLTUuNzE4NzUgMC41IC00Ljgy ODEyNSBDIDAuNSAtNC4yODEyNSAxIC00LjI4MTI1IDEuMDMxMjUgLTQuMjgxMjUgQyAxLjIwMzEy NSAtNC4yODEyNSAxLjU0Njg3NSAtNC4zOTA2MjUgMS41NDY4NzUgLTQuODEyNSBDIDEuNTQ2ODc1 IC01LjA2MjUgMS4zNTkzNzUgLTUuMzI4MTI1IDEuMDE1NjI1IC01LjMyODEyNSBDIDAuOTM3NSAt NS4zMjgxMjUgMC45MjE4NzUgLTUuMzI4MTI1IDAuODkwNjI1IC01LjMxMjUgQyAxLjEwOTM3NSAt NS45Njg3NSAxLjY1NjI1IC02LjMyODEyNSAyLjIzNDM3NSAtNi4zMjgxMjUgQyAzLjE0MDYyNSAt Ni4zMjgxMjUgMy41NjI1IC01LjUxNTYyNSAzLjU2MjUgLTQuNzAzMTI1IEMgMy41NjI1IC0zLjkw NjI1IDMuMDc4MTI1IC0zLjEyNSAyLjUxNTYyNSAtMi41IEwgMC42MDkzNzUgLTAuMzc1IEMgMC41 IC0wLjI2NTYyNSAwLjUgLTAuMjM0Mzc1IDAuNSAwIEwgNC4yMDMxMjUgMCBMIDQuNDY4NzUgLTEu NzM0Mzc1IEwgNC4yMzQzNzUgLTEuNzM0Mzc1IEMgNC4xNzE4NzUgLTEuNDM3NSA0LjEwOTM3NSAt MSA0IC0wLjg0Mzc1IEMgMy45Mzc1IC0wLjc2NTYyNSAzLjI4MTI1IC0wLjc2NTYyNSAzLjA2MjUg LTAuNzY1NjI1IFogTSAxLjI2NTYyNSAtMC43NjU2MjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTAt NSI+CjxwYXRoIGQ9Ik0gMi44OTA2MjUgLTMuNTE1NjI1IEMgMy43MDMxMjUgLTMuNzgxMjUgNC4y ODEyNSAtNC40Njg3NSA0LjI4MTI1IC01LjI2NTYyNSBDIDQuMjgxMjUgLTYuMDc4MTI1IDMuNDA2 MjUgLTYuNjQwNjI1IDIuNDUzMTI1IC02LjY0MDYyNSBDIDEuNDUzMTI1IC02LjY0MDYyNSAwLjY4 NzUgLTYuMDQ2ODc1IDAuNjg3NSAtNS4yODEyNSBDIDAuNjg3NSAtNC45NTMxMjUgMC45MDYyNSAt NC43NjU2MjUgMS4yMDMxMjUgLTQuNzY1NjI1IEMgMS41IC00Ljc2NTYyNSAxLjcwMzEyNSAtNC45 ODQzNzUgMS43MDMxMjUgLTUuMjgxMjUgQyAxLjcwMzEyNSAtNS43NjU2MjUgMS4yMzQzNzUgLTUu NzY1NjI1IDEuMDkzNzUgLTUuNzY1NjI1IEMgMS4zOTA2MjUgLTYuMjY1NjI1IDIuMDQ2ODc1IC02 LjM5MDYyNSAyLjQwNjI1IC02LjM5MDYyNSBDIDIuODI4MTI1IC02LjM5MDYyNSAzLjM3NSAtNi4x NzE4NzUgMy4zNzUgLTUuMjgxMjUgQyAzLjM3NSAtNS4xNTYyNSAzLjM0Mzc1IC00LjU3ODEyNSAz LjA5Mzc1IC00LjE0MDYyNSBDIDIuNzk2ODc1IC0zLjY1NjI1IDIuNDUzMTI1IC0zLjYyNSAyLjIw MzEyNSAtMy42MjUgQyAyLjEyNSAtMy42MDkzNzUgMS44OTA2MjUgLTMuNTkzNzUgMS44MTI1IC0z LjU5Mzc1IEMgMS43MzQzNzUgLTMuNTc4MTI1IDEuNjcxODc1IC0zLjU2MjUgMS42NzE4NzUgLTMu NDY4NzUgQyAxLjY3MTg3NSAtMy4zNTkzNzUgMS43MzQzNzUgLTMuMzU5Mzc1IDEuOTA2MjUgLTMu MzU5Mzc1IEwgMi4zNDM3NSAtMy4zNTkzNzUgQyAzLjE1NjI1IC0zLjM1OTM3NSAzLjUzMTI1IC0y LjY4NzUgMy41MzEyNSAtMS43MDMxMjUgQyAzLjUzMTI1IC0wLjM0Mzc1IDIuODQzNzUgLTAuMDYy NSAyLjQwNjI1IC0wLjA2MjUgQyAxLjk2ODc1IC0wLjA2MjUgMS4yMTg3NSAtMC4yMzQzNzUgMC44 NzUgLTAuODEyNSBDIDEuMjE4NzUgLTAuNzY1NjI1IDEuNTMxMjUgLTAuOTg0Mzc1IDEuNTMxMjUg LTEuMzU5Mzc1IEMgMS41MzEyNSAtMS43MTg3NSAxLjI2NTYyNSAtMS45MjE4NzUgMC45ODQzNzUg LTEuOTIxODc1IEMgMC43MzQzNzUgLTEuOTIxODc1IDAuNDIxODc1IC0xLjc4MTI1IDAuNDIxODc1 IC0xLjM0Mzc1IEMgMC40MjE4NzUgLTAuNDM3NSAxLjM0Mzc1IDAuMjE4NzUgMi40Mzc1IDAuMjE4 NzUgQyAzLjY1NjI1IDAuMjE4NzUgNC41NjI1IC0wLjY4NzUgNC41NjI1IC0xLjcwMzEyNSBDIDQu NTYyNSAtMi41MTU2MjUgMy45MjE4NzUgLTMuMjk2ODc1IDIuODkwNjI1IC0zLjUxNTYyNSBaIE0g Mi44OTA2MjUgLTMuNTE1NjI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0wLTYiPgo8cGF0aCBkPSJN IDIuOTM3NSAtMS42NDA2MjUgTCAyLjkzNzUgLTAuNzgxMjUgQyAyLjkzNzUgLTAuNDIxODc1IDIu OTA2MjUgLTAuMzEyNSAyLjE3MTg3NSAtMC4zMTI1IEwgMS45Njg3NSAtMC4zMTI1IEwgMS45Njg3 NSAwIEMgMi4zNzUgLTAuMDMxMjUgMi44OTA2MjUgLTAuMDMxMjUgMy4zMTI1IC0wLjAzMTI1IEMg My43MzQzNzUgLTAuMDMxMjUgNC4yNSAtMC4wMzEyNSA0LjY3MTg3NSAwIEwgNC42NzE4NzUgLTAu MzEyNSBMIDQuNDUzMTI1IC0wLjMxMjUgQyAzLjcxODc1IC0wLjMxMjUgMy43MDMxMjUgLTAuNDIx ODc1IDMuNzAzMTI1IC0wLjc4MTI1IEwgMy43MDMxMjUgLTEuNjQwNjI1IEwgNC42ODc1IC0xLjY0 MDYyNSBMIDQuNjg3NSAtMS45NTMxMjUgTCAzLjcwMzEyNSAtMS45NTMxMjUgTCAzLjcwMzEyNSAt Ni40ODQzNzUgQyAzLjcwMzEyNSAtNi42ODc1IDMuNzAzMTI1IC02Ljc1IDMuNTMxMjUgLTYuNzUg QyAzLjQ1MzEyNSAtNi43NSAzLjQyMTg3NSAtNi43NSAzLjM0Mzc1IC02LjYyNSBMIDAuMjgxMjUg LTEuOTUzMTI1IEwgMC4yODEyNSAtMS42NDA2MjUgWiBNIDIuOTg0Mzc1IC0xLjk1MzEyNSBMIDAu NTYyNSAtMS45NTMxMjUgTCAyLjk4NDM3NSAtNS42NzE4NzUgWiBNIDIuOTg0Mzc1IC0xLjk1MzEy NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMC03Ij4KPHBhdGggZD0iTSAzLjI5Njg3NSAyLjM5MDYy NSBDIDMuMjk2ODc1IDIuMzU5Mzc1IDMuMjk2ODc1IDIuMzQzNzUgMy4xMjUgMi4xNzE4NzUgQyAx Ljg5MDYyNSAwLjkyMTg3NSAxLjU2MjUgLTAuOTY4NzUgMS41NjI1IC0yLjUgQyAxLjU2MjUgLTQu MjM0Mzc1IDEuOTM3NSAtNS45Njg3NSAzLjE3MTg3NSAtNy4yMDMxMjUgQyAzLjI5Njg3NSAtNy4z MjgxMjUgMy4yOTY4NzUgLTcuMzQzNzUgMy4yOTY4NzUgLTcuMzc1IEMgMy4yOTY4NzUgLTcuNDUz MTI1IDMuMjY1NjI1IC03LjQ4NDM3NSAzLjIwMzEyNSAtNy40ODQzNzUgQyAzLjA5Mzc1IC03LjQ4 NDM3NSAyLjIwMzEyNSAtNi43OTY4NzUgMS42MDkzNzUgLTUuNTMxMjUgQyAxLjEwOTM3NSAtNC40 Mzc1IDAuOTg0Mzc1IC0zLjMyODEyNSAwLjk4NDM3NSAtMi41IEMgMC45ODQzNzUgLTEuNzE4NzUg MS4wOTM3NSAtMC41MTU2MjUgMS42NDA2MjUgMC42MjUgQyAyLjI1IDEuODQzNzUgMy4wOTM3NSAy LjUgMy4yMDMxMjUgMi41IEMgMy4yNjU2MjUgMi41IDMuMjk2ODc1IDIuNDY4NzUgMy4yOTY4NzUg Mi4zOTA2MjUgWiBNIDMuMjk2ODc1IDIuMzkwNjI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0wLTgi Pgo8cGF0aCBkPSJNIDQuMDc4MTI1IC0yLjI5Njg3NSBMIDYuODU5Mzc1IC0yLjI5Njg3NSBDIDcg LTIuMjk2ODc1IDcuMTg3NSAtMi4yOTY4NzUgNy4xODc1IC0yLjUgQyA3LjE4NzUgLTIuNjg3NSA3 IC0yLjY4NzUgNi44NTkzNzUgLTIuNjg3NSBMIDQuMDc4MTI1IC0yLjY4NzUgTCA0LjA3ODEyNSAt NS40ODQzNzUgQyA0LjA3ODEyNSAtNS42MjUgNC4wNzgxMjUgLTUuODEyNSAzLjg3NSAtNS44MTI1 IEMgMy42NzE4NzUgLTUuODEyNSAzLjY3MTg3NSAtNS42MjUgMy42NzE4NzUgLTUuNDg0Mzc1IEwg My42NzE4NzUgLTIuNjg3NSBMIDAuODkwNjI1IC0yLjY4NzUgQyAwLjc1IC0yLjY4NzUgMC41NjI1 IC0yLjY4NzUgMC41NjI1IC0yLjUgQyAwLjU2MjUgLTIuMjk2ODc1IDAuNzUgLTIuMjk2ODc1IDAu ODkwNjI1IC0yLjI5Njg3NSBMIDMuNjcxODc1IC0yLjI5Njg3NSBMIDMuNjcxODc1IDAuNSBDIDMu NjcxODc1IDAuNjQwNjI1IDMuNjcxODc1IDAuODI4MTI1IDMuODc1IDAuODI4MTI1IEMgNC4wNzgx MjUgMC44MjgxMjUgNC4wNzgxMjUgMC42NDA2MjUgNC4wNzgxMjUgMC41IFogTSA0LjA3ODEyNSAt Mi4yOTY4NzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTAtOSI+CjxwYXRoIGQ9Ik0gMi44NzUgLTIu NSBDIDIuODc1IC0zLjI2NTYyNSAyLjc2NTYyNSAtNC40Njg3NSAyLjIxODc1IC01LjYwOTM3NSBD IDEuNjI1IC02LjgyODEyNSAwLjc2NTYyNSAtNy40ODQzNzUgMC42NzE4NzUgLTcuNDg0Mzc1IEMg MC42MDkzNzUgLTcuNDg0Mzc1IDAuNTYyNSAtNy40Mzc1IDAuNTYyNSAtNy4zNzUgQyAwLjU2MjUg LTcuMzQzNzUgMC41NjI1IC03LjMyODEyNSAwLjc1IC03LjE0MDYyNSBDIDEuNzM0Mzc1IC02LjE1 NjI1IDIuMjk2ODc1IC00LjU3ODEyNSAyLjI5Njg3NSAtMi41IEMgMi4yOTY4NzUgLTAuNzgxMjUg MS45Mzc1IDAuOTY4NzUgMC43MDMxMjUgMi4yMTg3NSBDIDAuNTYyNSAyLjM0Mzc1IDAuNTYyNSAy LjM1OTM3NSAwLjU2MjUgMi4zOTA2MjUgQyAwLjU2MjUgMi40NTMxMjUgMC42MDkzNzUgMi41IDAu NjcxODc1IDIuNSBDIDAuNzY1NjI1IDIuNSAxLjY3MTg3NSAxLjgxMjUgMi4yNSAwLjU0Njg3NSBD IDIuNzY1NjI1IC0wLjU0Njg3NSAyLjg3NSAtMS42NTYyNSAyLjg3NSAtMi41IFogTSAyLjg3NSAt Mi41ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0xLTAiPgo8L2c+CjxnIGlkPSJnbHlwaC0xLTEiPgo8 cGF0aCBkPSJNIDMuNjg3NSAtMS4xNDA2MjUgTCAzLjY4NzUgLTEuMzkwNjI1IEwgMi45MDYyNSAt MS4zOTA2MjUgTCAyLjkwNjI1IC00LjUgQyAyLjkwNjI1IC00LjY0MDYyNSAyLjkwNjI1IC00Ljcw MzEyNSAyLjc2NTYyNSAtNC43MDMxMjUgQyAyLjY3MTg3NSAtNC43MDMxMjUgMi42NDA2MjUgLTQu NzAzMTI1IDIuNTc4MTI1IC00LjU5Mzc1IEwgMC4yNjU2MjUgLTEuMzkwNjI1IEwgMC4yNjU2MjUg LTEuMTQwNjI1IEwgMi4zMjgxMjUgLTEuMTQwNjI1IEwgMi4zMjgxMjUgLTAuNTc4MTI1IEMgMi4z MjgxMjUgLTAuMzI4MTI1IDIuMzI4MTI1IC0wLjI1IDEuNzUgLTAuMjUgTCAxLjU2MjUgLTAuMjUg TCAxLjU2MjUgMCBDIDEuOTIxODc1IC0wLjAxNTYyNSAyLjM1OTM3NSAtMC4wMzEyNSAyLjYwOTM3 NSAtMC4wMzEyNSBDIDIuODc1IC0wLjAzMTI1IDMuMzEyNSAtMC4wMTU2MjUgMy42NzE4NzUgMCBM IDMuNjcxODc1IC0wLjI1IEwgMy40ODQzNzUgLTAuMjUgQyAyLjkwNjI1IC0wLjI1IDIuOTA2MjUg LTAuMzI4MTI1IDIuOTA2MjUgLTAuNTc4MTI1IEwgMi45MDYyNSAtMS4xNDA2MjUgWiBNIDIuMzc1 IC0zLjkzNzUgTCAyLjM3NSAtMS4zOTA2MjUgTCAwLjUzMTI1IC0xLjM5MDYyNSBaIE0gMi4zNzUg LTMuOTM3NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMS0yIj4KPHBhdGggZD0iTSAxLjA3ODEyNSAt My44OTA2MjUgQyAxLjQzNzUgLTMuNzk2ODc1IDEuNjQwNjI1IC0zLjc5Njg3NSAxLjc1IC0zLjc5 Njg3NSBDIDIuNjcxODc1IC0zLjc5Njg3NSAzLjIxODc1IC00LjQyMTg3NSAzLjIxODc1IC00LjUz MTI1IEMgMy4yMTg3NSAtNC42MDkzNzUgMy4xNzE4NzUgLTQuNjI1IDMuMTQwNjI1IC00LjYyNSBD IDMuMTI1IC00LjYyNSAzLjEwOTM3NSAtNC42MjUgMy4wNzgxMjUgLTQuNjA5Mzc1IEMgMi45MDYy NSAtNC41NDY4NzUgMi41NDY4NzUgLTQuNDA2MjUgMi4wMzEyNSAtNC40MDYyNSBDIDEuODI4MTI1 IC00LjQwNjI1IDEuNDY4NzUgLTQuNDIxODc1IDEuMDE1NjI1IC00LjU5Mzc1IEMgMC45Mzc1IC00 LjYyNSAwLjkyMTg3NSAtNC42MjUgMC45MjE4NzUgLTQuNjI1IEMgMC44MjgxMjUgLTQuNjI1IDAu ODI4MTI1IC00LjU0Njg3NSAwLjgyODEyNSAtNC40Mzc1IEwgMC44MjgxMjUgLTIuMzkwNjI1IEMg MC44MjgxMjUgLTIuMjY1NjI1IDAuODI4MTI1IC0yLjE4NzUgMC45Mzc1IC0yLjE4NzUgQyAxIC0y LjE4NzUgMS4wMTU2MjUgLTIuMTg3NSAxLjA3ODEyNSAtMi4yODEyNSBDIDEuMzc1IC0yLjY1NjI1 IDEuODEyNSAtMi43MTg3NSAyLjA0Njg3NSAtMi43MTg3NSBDIDIuNDY4NzUgLTIuNzE4NzUgMi42 NTYyNSAtMi4zOTA2MjUgMi42ODc1IC0yLjMyODEyNSBDIDIuODEyNSAtMi4wOTM3NSAyLjg1OTM3 NSAtMS44MjgxMjUgMi44NTkzNzUgLTEuNDIxODc1IEMgMi44NTkzNzUgLTEuMjE4NzUgMi44NTkz NzUgLTAuODEyNSAyLjY0MDYyNSAtMC41IEMgMi40Njg3NSAtMC4yNSAyLjE3MTg3NSAtMC4wNzgx MjUgMS44MjgxMjUgLTAuMDc4MTI1IEMgMS4zNzUgLTAuMDc4MTI1IDAuOTA2MjUgLTAuMzI4MTI1 IDAuNzM0Mzc1IC0wLjc5Njg3NSBDIDEgLTAuNzgxMjUgMS4xNDA2MjUgLTAuOTUzMTI1IDEuMTQw NjI1IC0xLjE0MDYyNSBDIDEuMTQwNjI1IC0xLjQzNzUgMC44NzUgLTEuNDg0Mzc1IDAuNzgxMjUg LTEuNDg0Mzc1IEMgMC43ODEyNSAtMS40ODQzNzUgMC40Mzc1IC0xLjQ4NDM3NSAwLjQzNzUgLTEu MTA5Mzc1IEMgMC40Mzc1IC0wLjQ4NDM3NSAxLjAxNTYyNSAwLjE0MDYyNSAxLjg0Mzc1IDAuMTQw NjI1IEMgMi43MzQzNzUgMC4xNDA2MjUgMy41MTU2MjUgLTAuNTE1NjI1IDMuNTE1NjI1IC0xLjQw NjI1IEMgMy41MTU2MjUgLTIuMTg3NSAyLjkyMTg3NSAtMi45MDYyNSAyLjA2MjUgLTIuOTA2MjUg QyAxLjc1IC0yLjkwNjI1IDEuMzkwNjI1IC0yLjg0Mzc1IDEuMDc4MTI1IC0yLjU3ODEyNSBaIE0g MS4wNzgxMjUgLTMuODkwNjI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0xLTMiPgo8cGF0aCBkPSJN IDEuMDQ2ODc1IC0yLjI4MTI1IEMgMS4wNDY4NzUgLTIuODQzNzUgMS4wOTM3NSAtMy4zNTkzNzUg MS4zNTkzNzUgLTMuNzk2ODc1IEMgMS41OTM3NSAtNC4xNzE4NzUgMS45Njg3NSAtNC40MjE4NzUg Mi40MjE4NzUgLTQuNDIxODc1IEMgMi42MjUgLTQuNDIxODc1IDIuOTA2MjUgLTQuMzc1IDMuMDQ2 ODc1IC00LjE4NzUgQyAyLjg3NSAtNC4xNzE4NzUgMi43MTg3NSAtNC4wNDY4NzUgMi43MTg3NSAt My44NDM3NSBDIDIuNzE4NzUgLTMuNjcxODc1IDIuODQzNzUgLTMuNTE1NjI1IDMuMDQ2ODc1IC0z LjUxNTYyNSBDIDMuMjY1NjI1IC0zLjUxNTYyNSAzLjM5MDYyNSAtMy42NTYyNSAzLjM5MDYyNSAt My44NTkzNzUgQyAzLjM5MDYyNSAtNC4yNjU2MjUgMy4wOTM3NSAtNC42MjUgMi40MDYyNSAtNC42 MjUgQyAxLjQwNjI1IC00LjYyNSAwLjM3NSAtMy43MDMxMjUgMC4zNzUgLTIuMjAzMTI1IEMgMC4z NzUgLTAuNDA2MjUgMS4yMTg3NSAwLjE0MDYyNSAyIDAuMTQwNjI1IEMgMi44NDM3NSAwLjE0MDYy NSAzLjU3ODEyNSAtMC41MTU2MjUgMy41NzgxMjUgLTEuNDIxODc1IEMgMy41NzgxMjUgLTIuMzEy NSAyLjg3NSAtMi45Njg3NSAyLjA2MjUgLTIuOTY4NzUgQyAxLjUgLTIuOTY4NzUgMS4yMDMxMjUg LTIuNTkzNzUgMS4wNDY4NzUgLTIuMjgxMjUgWiBNIDIgLTAuMDc4MTI1IEMgMS42NDA2MjUgLTAu MDc4MTI1IDEuMzc1IC0wLjI4MTI1IDEuMjE4NzUgLTAuNTkzNzUgQyAxLjEyNSAtMC43OTY4NzUg MS4wNjI1IC0xLjE1NjI1IDEuMDYyNSAtMS41NjI1IEMgMS4wNjI1IC0yLjI1IDEuNDY4NzUgLTIu NzY1NjI1IDIuMDMxMjUgLTIuNzY1NjI1IEMgMi4zNDM3NSAtMi43NjU2MjUgMi41NjI1IC0yLjY0 MDYyNSAyLjczNDM3NSAtMi4zOTA2MjUgQyAyLjkwNjI1IC0yLjEyNSAyLjkwNjI1IC0xLjgyODEy NSAyLjkwNjI1IC0xLjQyMTg3NSBDIDIuOTA2MjUgLTEuMDMxMjUgMi45MDYyNSAtMC43MzQzNzUg Mi43MTg3NSAtMC40NTMxMjUgQyAyLjU2MjUgLTAuMjE4NzUgMi4zMjgxMjUgLTAuMDc4MTI1IDIg LTAuMDc4MTI1IFogTSAyIC0wLjA3ODEyNSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtMS00Ij4KPHBh dGggZD0iTSAzLjczNDM3NSAtNC4yMDMxMjUgQyAzLjc5Njg3NSAtNC4yOTY4NzUgMy43OTY4NzUg LTQuMzEyNSAzLjc5Njg3NSAtNC40ODQzNzUgTCAxLjk2ODc1IC00LjQ4NDM3NSBDIDEuNjg3NSAt NC40ODQzNzUgMS42MDkzNzUgLTQuNSAxLjM1OTM3NSAtNC41MTU2MjUgQyAxIC00LjU0Njg3NSAw Ljk4NDM3NSAtNC41OTM3NSAwLjk2ODc1IC00LjcwMzEyNSBMIDAuNzM0Mzc1IC00LjcwMzEyNSBM IDAuNDg0Mzc1IC0zLjIxODc1IEwgMC43MTg3NSAtMy4yMTg3NSBDIDAuNzM0Mzc1IC0zLjMyODEy NSAwLjgxMjUgLTMuNzgxMjUgMC45MjE4NzUgLTMuODU5Mzc1IEMgMC45Njg3NSAtMy44OTA2MjUg MS41NDY4NzUgLTMuODkwNjI1IDEuNjQwNjI1IC0zLjg5MDYyNSBMIDMuMTU2MjUgLTMuODkwNjI1 IEMgMi45Mzc1IC0zLjYwOTM3NSAyLjU3ODEyNSAtMy4xNzE4NzUgMi40Mzc1IC0yLjk2ODc1IEMg MS41MzEyNSAtMS43ODEyNSAxLjQzNzUgLTAuNjcxODc1IDEuNDM3NSAtMC4yNjU2MjUgQyAxLjQz NzUgLTAuMTg3NSAxLjQzNzUgMC4xNDA2MjUgMS43NjU2MjUgMC4xNDA2MjUgQyAyLjEwOTM3NSAw LjE0MDYyNSAyLjEwOTM3NSAtMC4xNzE4NzUgMi4xMDkzNzUgLTAuMjY1NjI1IEwgMi4xMDkzNzUg LTAuNTQ2ODc1IEMgMi4xMDkzNzUgLTEuODkwNjI1IDIuMzkwNjI1IC0yLjUxNTYyNSAyLjY4NzUg LTIuODkwNjI1IFogTSAzLjczNDM3NSAtNC4yMDMxMjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTEt NSI+CjxwYXRoIGQ9Ik0gMi40Njg3NSAtMi41MTU2MjUgQyAzLjAxNTYyNSAtMi43ODEyNSAzLjM1 OTM3NSAtMy4xMDkzNzUgMy4zNTkzNzUgLTMuNTkzNzUgQyAzLjM1OTM3NSAtNC4yNjU2MjUgMi42 NTYyNSAtNC42MjUgMS45ODQzNzUgLTQuNjI1IEMgMS4yMTg3NSAtNC42MjUgMC41OTM3NSAtNC4x MjUgMC41OTM3NSAtMy40Njg3NSBDIDAuNTkzNzUgLTMuMTQwNjI1IDAuNzUgLTIuOTA2MjUgMC44 NzUgLTIuNzY1NjI1IEMgMSAtMi42MDkzNzUgMS4wNDY4NzUgLTIuNTc4MTI1IDEuNDUzMTI1IC0y LjM0Mzc1IEMgMS4wNjI1IC0yLjE3MTg3NSAwLjM3NSAtMS43OTY4NzUgMC4zNzUgLTEuMDYyNSBD IDAuMzc1IC0wLjI5Njg3NSAxLjE3MTg3NSAwLjE0MDYyNSAxLjk2ODc1IDAuMTQwNjI1IEMgMi44 NTkzNzUgMC4xNDA2MjUgMy41NzgxMjUgLTAuNDIxODc1IDMuNTc4MTI1IC0xLjE3MTg3NSBDIDMu NTc4MTI1IC0xLjY0MDYyNSAzLjMxMjUgLTIuMDMxMjUgMi45MDYyNSAtMi4yNjU2MjUgQyAyLjgx MjUgLTIuMzI4MTI1IDIuNTc4MTI1IC0yLjQ1MzEyNSAyLjQ2ODc1IC0yLjUxNTYyNSBaIE0gMS4z NDM3NSAtMy4xNzE4NzUgQyAxLjE1NjI1IC0zLjI4MTI1IDAuOTY4NzUgLTMuNDY4NzUgMC45Njg3 NSAtMy43MzQzNzUgQyAwLjk2ODc1IC00LjE3MTg3NSAxLjQ2ODc1IC00LjQyMTg3NSAxLjk2ODc1 IC00LjQyMTg3NSBDIDIuNTE1NjI1IC00LjQyMTg3NSAzIC00LjA3ODEyNSAzIC0zLjU5Mzc1IEMg MyAtMi45Njg3NSAyLjI2NTYyNSAtMi42NTYyNSAyLjI2NTYyNSAtMi42NTYyNSBDIDIuMjUgLTIu NjU2MjUgMi4yMzQzNzUgLTIuNjU2MjUgMi4xODc1IC0yLjY4NzUgWiBNIDEuNjcxODc1IC0yLjIw MzEyNSBMIDIuNjQwNjI1IC0xLjY1NjI1IEMgMi44MTI1IC0xLjU0Njg3NSAzLjE1NjI1IC0xLjM0 Mzc1IDMuMTU2MjUgLTAuOTM3NSBDIDMuMTU2MjUgLTAuNDA2MjUgMi41NzgxMjUgLTAuMDc4MTI1 IDEuOTg0Mzc1IC0wLjA3ODEyNSBDIDEuMzQzNzUgLTAuMDc4MTI1IDAuNzk2ODc1IC0wLjUgMC43 OTY4NzUgLTEuMDYyNSBDIDAuNzk2ODc1IC0xLjU3ODEyNSAxLjE3MTg3NSAtMS45ODQzNzUgMS42 NzE4NzUgLTIuMjAzMTI1IFogTSAxLjY3MTg3NSAtMi4yMDMxMjUgIi8+CjwvZz4KPGcgaWQ9Imds eXBoLTItMCI+CjwvZz4KPGcgaWQ9ImdseXBoLTItMSI+CjxwYXRoIGQ9Ik0gMS45MDYyNSAtMC41 MzEyNSBDIDEuOTA2MjUgLTAuODEyNSAxLjY3MTg3NSAtMS4wNjI1IDEuMzkwNjI1IC0xLjA2MjUg QyAxLjA5Mzc1IC0xLjA2MjUgMC44NTkzNzUgLTAuODEyNSAwLjg1OTM3NSAtMC41MzEyNSBDIDAu ODU5Mzc1IC0wLjIzNDM3NSAxLjA5Mzc1IDAgMS4zOTA2MjUgMCBDIDEuNjcxODc1IDAgMS45MDYy NSAtMC4yMzQzNzUgMS45MDYyNSAtMC41MzEyNSBaIE0gMS45MDYyNSAtMC41MzEyNSAiLz4KPC9n Pgo8ZyBpZD0iZ2x5cGgtMi0yIj4KPHBhdGggZD0iTSA5LjIzNDM3NSAtNi4wNDY4NzUgQyA5LjMy ODEyNSAtNi40MDYyNSA5LjM0Mzc1IC02LjUgMTAuMDkzNzUgLTYuNSBDIDEwLjMxMjUgLTYuNSAx MC40MDYyNSAtNi41IDEwLjQwNjI1IC02LjcwMzEyNSBDIDEwLjQwNjI1IC02LjgxMjUgMTAuMzEy NSAtNi44MTI1IDEwLjE0MDYyNSAtNi44MTI1IEwgOC44MjgxMjUgLTYuODEyNSBDIDguNTYyNSAt Ni44MTI1IDguNTQ2ODc1IC02LjgxMjUgOC40Mzc1IC02LjYyNSBMIDQuNzk2ODc1IC0wLjkzNzUg TCA0LjAxNTYyNSAtNi41NzgxMjUgQyAzLjk4NDM3NSAtNi44MTI1IDMuOTY4NzUgLTYuODEyNSAz LjcwMzEyNSAtNi44MTI1IEwgMi4zNDM3NSAtNi44MTI1IEMgMi4xNTYyNSAtNi44MTI1IDIuMDQ2 ODc1IC02LjgxMjUgMi4wNDY4NzUgLTYuNjI1IEMgMi4wNDY4NzUgLTYuNSAyLjE0MDYyNSAtNi41 IDIuMzI4MTI1IC02LjUgQyAyLjQ2ODc1IC02LjUgMi42NDA2MjUgLTYuNDg0Mzc1IDIuNzY1NjI1 IC02LjQ4NDM3NSBDIDIuOTIxODc1IC02LjQ1MzEyNSAyLjk4NDM3NSAtNi40Mzc1IDIuOTg0Mzc1 IC02LjMxMjUgQyAyLjk4NDM3NSAtNi4yODEyNSAyLjk2ODc1IC02LjI1IDIuOTM3NSAtNi4xMjUg TCAxLjY3MTg3NSAtMS4wNjI1IEMgMS41NzgxMjUgLTAuNjU2MjUgMS40MDYyNSAtMC4zNDM3NSAw LjU5Mzc1IC0wLjMxMjUgQyAwLjU0Njg3NSAtMC4zMTI1IDAuNDIxODc1IC0wLjI5Njg3NSAwLjQy MTg3NSAtMC4xMjUgQyAwLjQyMTg3NSAtMC4wMzEyNSAwLjQ4NDM3NSAwIDAuNTYyNSAwIEMgMC44 NzUgMCAxLjIxODc1IC0wLjAzMTI1IDEuNTYyNSAtMC4wMzEyNSBDIDEuODkwNjI1IC0wLjAzMTI1 IDIuMjUgMCAyLjU3ODEyNSAwIEMgMi42MjUgMCAyLjc2NTYyNSAwIDIuNzY1NjI1IC0wLjIwMzEy NSBDIDIuNzY1NjI1IC0wLjMxMjUgMi42NTYyNSAtMC4zMTI1IDIuNTc4MTI1IC0wLjMxMjUgQyAy LjAxNTYyNSAtMC4zMTI1IDEuOTA2MjUgLTAuNTE1NjI1IDEuOTA2MjUgLTAuNzUgQyAxLjkwNjI1 IC0wLjgxMjUgMS45MDYyNSAtMC44NzUgMS45Mzc1IC0wLjk4NDM3NSBMIDMuMjk2ODc1IC02LjQw NjI1IEwgMy4zMTI1IC02LjQwNjI1IEwgNC4xNzE4NzUgLTAuMjM0Mzc1IEMgNC4xODc1IC0wLjEw OTM3NSA0LjIwMzEyNSAwIDQuMzEyNSAwIEMgNC40MjE4NzUgMCA0LjQ4NDM3NSAtMC4xMDkzNzUg NC41MzEyNSAtMC4xNzE4NzUgTCA4LjU2MjUgLTYuNDg0Mzc1IEwgOC41NzgxMjUgLTYuNDg0Mzc1 IEwgNy4xNDA2MjUgLTAuNzgxMjUgQyA3LjA0Njg3NSAtMC4zOTA2MjUgNy4wMzEyNSAtMC4zMTI1 IDYuMjM0Mzc1IC0wLjMxMjUgQyA2LjA3ODEyNSAtMC4zMTI1IDUuOTY4NzUgLTAuMzEyNSA1Ljk2 ODc1IC0wLjEyNSBDIDUuOTY4NzUgMCA2LjA3ODEyNSAwIDYuMTA5Mzc1IDAgQyA2LjM5MDYyNSAw IDcuMDYyNSAtMC4wMzEyNSA3LjM0Mzc1IC0wLjAzMTI1IEMgNy43NSAtMC4wMzEyNSA4LjE4NzUg MCA4LjU5Mzc1IDAgQyA4LjY1NjI1IDAgOC43ODEyNSAwIDguNzgxMjUgLTAuMjAzMTI1IEMgOC43 ODEyNSAtMC4zMTI1IDguNjg3NSAtMC4zMTI1IDguNSAtMC4zMTI1IEMgOC4xNDA2MjUgLTAuMzEy NSA3Ljg1OTM3NSAtMC4zMTI1IDcuODU5Mzc1IC0wLjQ4NDM3NSBDIDcuODU5Mzc1IC0wLjUzMTI1 IDcuODU5Mzc1IC0wLjU0Njg3NSA3LjkwNjI1IC0wLjczNDM3NSBaIE0gOS4yMzQzNzUgLTYuMDQ2 ODc1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0yLTMiPgo8cGF0aCBkPSJNIDcuNTMxMjUgLTUuNzY1 NjI1IEMgNy42NDA2MjUgLTYuMTU2MjUgNy44MTI1IC02LjQ2ODc1IDguNjA5Mzc1IC02LjUgQyA4 LjY1NjI1IC02LjUgOC43ODEyNSAtNi41MTU2MjUgOC43ODEyNSAtNi43MDMxMjUgQyA4Ljc4MTI1 IC02LjcwMzEyNSA4Ljc4MTI1IC02LjgxMjUgOC42NTYyNSAtNi44MTI1IEMgOC4zMjgxMjUgLTYu ODEyNSA3Ljk2ODc1IC02Ljc4MTI1IDcuNjQwNjI1IC02Ljc4MTI1IEMgNy4zMTI1IC02Ljc4MTI1 IDYuOTUzMTI1IC02LjgxMjUgNi42MjUgLTYuODEyNSBDIDYuNTYyNSAtNi44MTI1IDYuNDUzMTI1 IC02LjgxMjUgNi40NTMxMjUgLTYuNjA5Mzc1IEMgNi40NTMxMjUgLTYuNSA2LjU0Njg3NSAtNi41 IDYuNjI1IC02LjUgQyA3LjIwMzEyNSAtNi40ODQzNzUgNy4zMTI1IC02LjI4MTI1IDcuMzEyNSAt Ni4wNjI1IEMgNy4zMTI1IC02LjAzMTI1IDcuMjgxMjUgLTUuODc1IDcuMjgxMjUgLTUuODU5Mzc1 IEwgNi4xNTYyNSAtMS40MjE4NzUgTCAzLjk1MzEyNSAtNi42MjUgQyAzLjg3NSAtNi43OTY4NzUg My44NzUgLTYuODEyNSAzLjY0MDYyNSAtNi44MTI1IEwgMi4yOTY4NzUgLTYuODEyNSBDIDIuMTA5 Mzc1IC02LjgxMjUgMi4wMTU2MjUgLTYuODEyNSAyLjAxNTYyNSAtNi42MDkzNzUgQyAyLjAxNTYy NSAtNi41IDIuMTA5Mzc1IC02LjUgMi4yOTY4NzUgLTYuNSBDIDIuMzQzNzUgLTYuNSAyLjk2ODc1 IC02LjUgMi45Njg3NSAtNi40MDYyNSBMIDEuNjQwNjI1IC0xLjA2MjUgQyAxLjUzMTI1IC0wLjY1 NjI1IDEuMzU5Mzc1IC0wLjM0Mzc1IDAuNTYyNSAtMC4zMTI1IEMgMC41IC0wLjMxMjUgMC4zOTA2 MjUgLTAuMjk2ODc1IDAuMzkwNjI1IC0wLjEwOTM3NSBDIDAuMzkwNjI1IC0wLjA0Njg3NSAwLjQz NzUgMCAwLjUxNTYyNSAwIEMgMC44NDM3NSAwIDEuMTg3NSAtMC4wMzEyNSAxLjUxNTYyNSAtMC4w MzEyNSBDIDEuODU5Mzc1IC0wLjAzMTI1IDIuMjE4NzUgMCAyLjU0Njg3NSAwIEMgMi41OTM3NSAw IDIuNzE4NzUgMCAyLjcxODc1IC0wLjIwMzEyNSBDIDIuNzE4NzUgLTAuMjk2ODc1IDIuNjI1IC0w LjMxMjUgMi41MTU2MjUgLTAuMzEyNSBDIDEuOTM3NSAtMC4zMjgxMjUgMS44NTkzNzUgLTAuNTQ2 ODc1IDEuODU5Mzc1IC0wLjc1IEMgMS44NTkzNzUgLTAuODEyNSAxLjg3NSAtMC44NzUgMS45MDYy NSAtMC45ODQzNzUgTCAzLjIxODc1IC02LjIzNDM3NSBDIDMuMjY1NjI1IC02LjE4NzUgMy4yNjU2 MjUgLTYuMTU2MjUgMy4zMTI1IC02LjA2MjUgTCA1Ljc5Njg3NSAtMC4xODc1IEMgNS44NTkzNzUg LTAuMDE1NjI1IDUuODkwNjI1IDAgNS45ODQzNzUgMCBDIDYuMDkzNzUgMCA2LjA5Mzc1IC0wLjAz MTI1IDYuMTQwNjI1IC0wLjIwMzEyNSBaIE0gNy41MzEyNSAtNS43NjU2MjUgIi8+CjwvZz4KPGcg aWQ9ImdseXBoLTItNCI+CjxwYXRoIGQ9Ik0gMS41NzgxMjUgLTAuNzgxMjUgQyAxLjQ4NDM3NSAt MC4zOTA2MjUgMS40Njg3NSAtMC4zMTI1IDAuNjcxODc1IC0wLjMxMjUgQyAwLjUxNTYyNSAtMC4z MTI1IDAuNDA2MjUgLTAuMzEyNSAwLjQwNjI1IC0wLjEyNSBDIDAuNDA2MjUgMCAwLjQ4NDM3NSAw IDAuNjcxODc1IDAgTCAzLjk4NDM3NSAwIEMgNi4wNDY4NzUgMCA4LjAxNTYyNSAtMi4xMDkzNzUg OC4wMTU2MjUgLTQuMjgxMjUgQyA4LjAxNTYyNSAtNS42ODc1IDcuMTcxODc1IC02LjgxMjUgNS42 NzE4NzUgLTYuODEyNSBMIDIuMzI4MTI1IC02LjgxMjUgQyAyLjE0MDYyNSAtNi44MTI1IDIuMDMx MjUgLTYuODEyNSAyLjAzMTI1IC02LjYyNSBDIDIuMDMxMjUgLTYuNSAyLjEwOTM3NSAtNi41IDIu MzEyNSAtNi41IEMgMi40Mzc1IC02LjUgMi42MjUgLTYuNDg0Mzc1IDIuNzM0Mzc1IC02LjQ4NDM3 NSBDIDIuOTA2MjUgLTYuNDUzMTI1IDIuOTUzMTI1IC02LjQzNzUgMi45NTMxMjUgLTYuMzEyNSBD IDIuOTUzMTI1IC02LjI4MTI1IDIuOTUzMTI1IC02LjI1IDIuOTIxODc1IC02LjEyNSBaIE0gMy43 MzQzNzUgLTYuMTI1IEMgMy44MjgxMjUgLTYuNDY4NzUgMy44NDM3NSAtNi41IDQuMjgxMjUgLTYu NSBMIDUuMzQzNzUgLTYuNSBDIDYuMzEyNSAtNi41IDcuMTQwNjI1IC01Ljk2ODc1IDcuMTQwNjI1 IC00LjY1NjI1IEMgNy4xNDA2MjUgLTQuMTcxODc1IDYuOTUzMTI1IC0yLjUzMTI1IDYuMDkzNzUg LTEuNDM3NSBDIDUuODEyNSAtMS4wNjI1IDUuMDMxMjUgLTAuMzEyNSAzLjc5Njg3NSAtMC4zMTI1 IEwgMi42NzE4NzUgLTAuMzEyNSBDIDIuNTMxMjUgLTAuMzEyNSAyLjUxNTYyNSAtMC4zMTI1IDIu NDUzMTI1IC0wLjMxMjUgQyAyLjM1OTM3NSAtMC4zMjgxMjUgMi4zMjgxMjUgLTAuMzQzNzUgMi4z MjgxMjUgLTAuNDIxODc1IEMgMi4zMjgxMjUgLTAuNDUzMTI1IDIuMzI4MTI1IC0wLjQ2ODc1IDIu Mzc1IC0wLjY0MDYyNSBaIE0gMy43MzQzNzUgLTYuMTI1ICIvPgo8L2c+CjxnIGlkPSJnbHlwaC0z LTAiPgo8L2c+CjxnIGlkPSJnbHlwaC0zLTEiPgo8cGF0aCBkPSJNIC00LjIxODc1IC0zLjM5MDYy NSBDIC00LjQyMTg3NSAtMy40Mzc1IC00LjQzNzUgLTMuNDUzMTI1IC00LjQ1MzEyNSAtMy42MDkz NzUgQyAtNC40NTMxMjUgLTMuNjQwNjI1IC00LjQ1MzEyNSAtMy44NzUgLTQuNDUzMTI1IC00LjAx NTYyNSBDIC00LjQ1MzEyNSAtNC40NTMxMjUgLTQuNDUzMTI1IC00LjYyNSAtNC40MDYyNSAtNC43 OTY4NzUgQyAtNC4zMTI1IC01LjEwOTM3NSAtNC4xMDkzNzUgLTUuMTI1IC0zLjg1OTM3NSAtNS4x MjUgQyAtMy43NSAtNS4xMjUgLTMuNjU2MjUgLTUuMTI1IC0zLjI5Njg3NSAtNS4wNzgxMjUgTCAt My4yMTg3NSAtNS4wNjI1IEMgLTMuMTQwNjI1IC01LjA2MjUgLTMuMTA5Mzc1IC01LjEwOTM3NSAt My4xMDkzNzUgLTUuMTg3NSBDIC0zLjEwOTM3NSAtNS4yOTY4NzUgLTMuMTcxODc1IC01LjI5Njg3 NSAtMy4yODEyNSAtNS4zMTI1IEwgLTQuNjA5Mzc1IC01LjUgQyAtNC43MDMxMjUgLTUuNSAtNC43 MDMxMjUgLTUuNDIxODc1IC00LjcwMzEyNSAtNS4yOTY4NzUgTCAtNC43MDMxMjUgLTEuMDE1NjI1 IEMgLTQuNzAzMTI1IC0wLjg0Mzc1IC00LjcwMzEyNSAtMC44MjgxMjUgLTQuNTYyNSAtMC43ODEy NSBMIC0zLjMyODEyNSAtMC4zMjgxMjUgQyAtMy4yOTY4NzUgLTAuMzI4MTI1IC0zLjIzNDM3NSAt MC4yOTY4NzUgLTMuMjAzMTI1IC0wLjI5Njg3NSBDIC0zLjE3MTg3NSAtMC4yOTY4NzUgLTMuMTA5 Mzc1IC0wLjMxMjUgLTMuMTA5Mzc1IC0wLjQyMTg3NSBDIC0zLjEwOTM3NSAtMC41MTU2MjUgLTMu MTQwNjI1IC0wLjUxNTYyNSAtMy4yODEyNSAtMC41NjI1IEMgLTQuMzkwNjI1IC0wLjk2ODc1IC00 LjQ1MzEyNSAtMS4yMDMxMjUgLTQuNDUzMTI1IC0yLjI2NTYyNSBMIC00LjQ1MzEyNSAtMi41NDY4 NzUgQyAtNC40NTMxMjUgLTIuNzY1NjI1IC00LjQ1MzEyNSAtMi43NjU2MjUgLTQuMzkwNjI1IC0y Ljc2NTYyNSBDIC00LjM5MDYyNSAtMi43NjU2MjUgLTQuMzQzNzUgLTIuNzY1NjI1IC00LjI1IC0y LjczNDM3NSBMIC0wLjU3ODEyNSAtMS44MTI1IEMgLTAuMzI4MTI1IC0xLjc1IC0wLjI1IC0xLjcz NDM3NSAtMC4yNSAtMSBDIC0wLjI1IC0wLjc1IC0wLjI1IC0wLjY4NzUgLTAuMDkzNzUgLTAuNjg3 NSBDIC0wLjA3ODEyNSAtMC42ODc1IDAgLTAuNzAzMTI1IDAgLTAuODEyNSBDIDAgLTEgLTAuMDE1 NjI1IC0xLjIxODc1IC0wLjAxNTYyNSAtMS40MDYyNSBDIC0wLjAxNTYyNSAtMS42MDkzNzUgLTAu MDMxMjUgLTEuODEyNSAtMC4wMzEyNSAtMiBDIC0wLjAzMTI1IC0yLjIwMzEyNSAtMC4wMzEyNSAt Mi40Mzc1IC0wLjAxNTYyNSAtMi42NDA2MjUgQyAtMC4wMTU2MjUgLTIuODI4MTI1IDAgLTMuMDMx MjUgMCAtMy4yMTg3NSBDIDAgLTMuMjgxMjUgMCAtMy4zNzUgLTAuMTU2MjUgLTMuMzc1IEMgLTAu MjUgLTMuMzc1IC0wLjI1IC0zLjMxMjUgLTAuMjUgLTMuMDkzNzUgQyAtMC4yNSAtMi45Njg3NSAt MC4yNjU2MjUgLTIuODI4MTI1IC0wLjI2NTYyNSAtMi42ODc1IEMgLTAuMjgxMjUgLTIuNDUzMTI1 IC0wLjMxMjUgLTIuNDM3NSAtMC4zOTA2MjUgLTIuNDM3NSBDIC0wLjQ1MzEyNSAtMi40Mzc1IC0w LjQ1MzEyNSAtMi40Mzc1IC0wLjU2MjUgLTIuNDY4NzUgWiBNIC00LjIxODc1IC0zLjM5MDYyNSAi Lz4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC0wIj4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC0xIj4KPHBhdGgg ZD0iTSAtMS41IC00LjcxODc1IEMgLTIuMTI1IC00LjcxODc1IC0yLjIwMzEyNSAtNC4yNSAtMi4y MDMxMjUgLTMuODkwNjI1IEMgLTIuMjAzMTI1IC0zLjM5MDYyNSAtMS45NTMxMjUgLTMuMTA5Mzc1 IC0xLjczNDM3NSAtMi45Njg3NSBDIC0yLjIwMzEyNSAtMi44NDM3NSAtMi4yMDMxMjUgLTIuMzQz NzUgLTIuMjAzMTI1IC0yLjE1NjI1IEMgLTIuMjAzMTI1IC0xLjY0MDYyNSAtMS45MjE4NzUgLTEu MzQzNzUgLTEuNzE4NzUgLTEuMjE4NzUgTCAtMi4yMDMxMjUgLTEuMjE4NzUgTCAtMi4xNDA2MjUg LTAuNDA2MjUgTCAtMS45MjE4NzUgLTAuNDA2MjUgQyAtMS45MjE4NzUgLTAuNzgxMjUgLTEuODkw NjI1IC0wLjgyODEyNSAtMS42NTYyNSAtMC44MjgxMjUgTCAtMC40MjE4NzUgLTAuODI4MTI1IEMg LTAuMjY1NjI1IC0wLjgyODEyNSAtMC4yMTg3NSAtMC44MjgxMjUgLTAuMjE4NzUgLTAuNSBMIC0w LjIxODc1IC0wLjQwNjI1IEwgMCAtMC40MDYyNSBDIC0wLjAxNTYyNSAtMC42MjUgLTAuMDE1NjI1 IC0wLjgyODEyNSAtMC4wMTU2MjUgLTEuMDQ2ODc1IEMgLTAuMDE1NjI1IC0xLjI1IC0wLjAxNTYy NSAtMS40Njg3NSAwIC0xLjY4NzUgTCAtMC4yMTg3NSAtMS42ODc1IEwgLTAuMjE4NzUgLTEuNTkz NzUgQyAtMC4yMTg3NSAtMS4yNjU2MjUgLTAuMjY1NjI1IC0xLjI2NTYyNSAtMC40MjE4NzUgLTEu MjY1NjI1IEwgLTEuMjgxMjUgLTEuMjY1NjI1IEMgLTEuODQzNzUgLTEuMjY1NjI1IC0yLjAzMTI1 IC0xLjc4MTI1IC0yLjAzMTI1IC0yLjA5Mzc1IEMgLTIuMDMxMjUgLTIuNDY4NzUgLTEuODI4MTI1 IC0yLjU0Njg3NSAtMS41MTU2MjUgLTIuNTQ2ODc1IEwgLTAuNDIxODc1IC0yLjU0Njg3NSBDIC0w LjI2NTYyNSAtMi41NDY4NzUgLTAuMjE4NzUgLTIuNTQ2ODc1IC0wLjIxODc1IC0yLjIzNDM3NSBM IC0wLjIxODc1IC0yLjE0MDYyNSBMIDAgLTIuMTQwNjI1IEMgLTAuMDE1NjI1IC0yLjM1OTM3NSAt MC4wMTU2MjUgLTIuNTYyNSAtMC4wMTU2MjUgLTIuNzgxMjUgQyAtMC4wMTU2MjUgLTIuOTg0Mzc1 IC0wLjAxNTYyNSAtMy4yMDMxMjUgMCAtMy40MDYyNSBMIC0wLjIxODc1IC0zLjQwNjI1IEwgLTAu MjE4NzUgLTMuMzEyNSBDIC0wLjIxODc1IC0zIC0wLjI2NTYyNSAtMyAtMC40MjE4NzUgLTMgTCAt MS4yODEyNSAtMyBDIC0xLjg0Mzc1IC0zIC0yLjAzMTI1IC0zLjUgLTIuMDMxMjUgLTMuODI4MTI1 IEMgLTIuMDMxMjUgLTQuMTg3NSAtMS44MjgxMjUgLTQuMjgxMjUgLTEuNTE1NjI1IC00LjI4MTI1 IEwgLTAuNDIxODc1IC00LjI4MTI1IEMgLTAuMjY1NjI1IC00LjI4MTI1IC0wLjIxODc1IC00LjI4 MTI1IC0wLjIxODc1IC0zLjk1MzEyNSBMIC0wLjIxODc1IC0zLjg3NSBMIDAgLTMuODc1IEMgLTAu MDE1NjI1IC00LjA3ODEyNSAtMC4wMTU2MjUgLTQuMjk2ODc1IC0wLjAxNTYyNSAtNC41IEMgLTAu MDE1NjI1IC00LjcxODc1IC0wLjAxNTYyNSAtNC45MjE4NzUgMCAtNS4xNDA2MjUgTCAtMC4yMTg3 NSAtNS4xNDA2MjUgTCAtMC4yMTg3NSAtNS4wNDY4NzUgQyAtMC4yMTg3NSAtNC43MTg3NSAtMC4y NjU2MjUgLTQuNzE4NzUgLTAuNDIxODc1IC00LjcxODc1IFogTSAtMS41IC00LjcxODc1ICIvPgo8 L2c+CjxnIGlkPSJnbHlwaC00LTIiPgo8cGF0aCBkPSJNIC0xLjYyNSAtMi43NSBDIC0xLjczNDM3 NSAtMi44MTI1IC0xLjkyMTg3NSAtMi45MDYyNSAtMS45MjE4NzUgLTMuMjgxMjUgTCAtMi4xNDA2 MjUgLTMuMjgxMjUgQyAtMi4xNDA2MjUgLTMuMTcxODc1IC0yLjEyNSAtMy4wMzEyNSAtMi4xMjUg LTIuODQzNzUgQyAtMi4xMjUgLTIuNjg3NSAtMi4xNDA2MjUgLTIuNSAtMi4xNDA2MjUgLTIuMzQz NzUgTCAtMS45MjE4NzUgLTIuMzQzNzUgQyAtMS45MjE4NzUgLTIuNDY4NzUgLTEuODU5Mzc1IC0y LjU0Njg3NSAtMS43NSAtMi41NDY4NzUgQyAtMS43MTg3NSAtMi41NDY4NzUgLTEuNjg3NSAtMi41 MzEyNSAtMS42NDA2MjUgLTIuNTE1NjI1IEwgLTAuNDUzMTI1IC0xLjkwNjI1IEwgLTEuNzUgLTEu MjE4NzUgQyAtMS43OTY4NzUgLTEuMjAzMTI1IC0xLjgxMjUgLTEuMjAzMTI1IC0xLjgyODEyNSAt MS4yMDMxMjUgQyAtMS45MjE4NzUgLTEuMjAzMTI1IC0xLjkyMTg3NSAtMS4zMjgxMjUgLTEuOTIx ODc1IC0xLjQ2ODc1IEwgLTIuMTQwNjI1IC0xLjQ2ODc1IEMgLTIuMTQwNjI1IC0xLjI1IC0yLjEy NSAtMS4wNDY4NzUgLTIuMTI1IC0wLjg0Mzc1IEMgLTIuMTI1IC0wLjYyNSAtMi4xMjUgLTAuNSAt Mi4xNDA2MjUgLTAuMjgxMjUgTCAtMS45MjE4NzUgLTAuMjgxMjUgQyAtMS45MjE4NzUgLTAuNjQw NjI1IC0xLjkwNjI1IC0wLjY1NjI1IC0xLjc2NTYyNSAtMC43MzQzNzUgTCAwIC0xLjY1NjI1IEMg MC40Mzc1IC0xLjQ1MzEyNSAwLjg1OTM3NSAtMS4yNSAwLjg1OTM3NSAtMC44MjgxMjUgQyAwLjg1 OTM3NSAtMC43MDMxMjUgMC44NDM3NSAtMC42NTYyNSAwLjc5Njg3NSAtMC42MDkzNzUgQyAwLjc4 MTI1IC0wLjY0MDYyNSAwLjczNDM3NSAtMC43NSAwLjU3ODEyNSAtMC43NSBDIDAuNDIxODc1IC0w Ljc1IDAuMzI4MTI1IC0wLjY0MDYyNSAwLjMyODEyNSAtMC41IEMgMC4zMjgxMjUgLTAuMzkwNjI1 IDAuNDA2MjUgLTAuMjY1NjI1IDAuNTc4MTI1IC0wLjI2NTYyNSBDIDAuODI4MTI1IC0wLjI2NTYy NSAxLjAxNTYyNSAtMC41MTU2MjUgMS4wMTU2MjUgLTAuODI4MTI1IEMgMS4wMTU2MjUgLTEuMTI1 IDAuODQzNzUgLTEuNDUzMTI1IDAuNDA2MjUgLTEuNjg3NSBaIE0gLTEuNjI1IC0yLjc1ICIvPgo8 L2c+CjxnIGlkPSJnbHlwaC00LTMiPgo8cGF0aCBkPSJNIC0xLjEyNSAtMi41NzgxMjUgQyAtMS4x MjUgLTIuNjg3NSAtMS4xMjUgLTIuNzE4NzUgLTEuMjM0Mzc1IC0yLjcxODc1IEMgLTEuNTc4MTI1 IC0yLjcxODc1IC0yLjIzNDM3NSAtMi41NDY4NzUgLTIuMjM0Mzc1IC0xLjYwOTM3NSBDIC0yLjIz NDM3NSAtMC44NTkzNzUgLTEuNjg3NSAtMC4zMjgxMjUgLTEuMDkzNzUgLTAuMzI4MTI1IEMgLTAu NDY4NzUgLTAuMzI4MTI1IDAuMDYyNSAtMC45Mzc1IDAuMDYyNSAtMS42ODc1IEMgMC4wNjI1IC0y LjQ4NDM3NSAtMC41IC0yLjcxODc1IC0wLjU5Mzc1IC0yLjcxODc1IEMgLTAuNjcxODc1IC0yLjcx ODc1IC0wLjY3MTg3NSAtMi42NDA2MjUgLTAuNjcxODc1IC0yLjYyNSBDIC0wLjY3MTg3NSAtMi41 NDY4NzUgLTAuNjU2MjUgLTIuNTMxMjUgLTAuNTkzNzUgLTIuNSBDIC0wLjI1IC0yLjM3NSAtMC4x MjUgLTIgLTAuMTI1IC0xLjcxODc1IEMgLTAuMTI1IC0xLjMxMjUgLTAuMzQzNzUgLTEuMDkzNzUg LTAuNDM3NSAtMS4wMTU2MjUgQyAtMC42NzE4NzUgLTAuODI4MTI1IC0wLjk4NDM3NSAtMC44Mjgx MjUgLTEuMTI1IC0wLjgyODEyNSBaIE0gLTEuMjgxMjUgLTAuODI4MTI1IEMgLTEuOTM3NSAtMC44 OTA2MjUgLTIuMDYyNSAtMS4zNzUgLTIuMDYyNSAtMS42MDkzNzUgQyAtMi4wNjI1IC0yLjI5Njg3 NSAtMS40MjE4NzUgLTIuMzQzNzUgLTEuMjgxMjUgLTIuMzQzNzUgWiBNIC0xLjI4MTI1IC0wLjgy ODEyNSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC00Ij4KPHBhdGggZD0iTSAtMS4xMDkzNzUgLTEu MjE4NzUgQyAtMS41NzgxMjUgLTEuMjE4NzUgLTIuMDMxMjUgLTEuNDg0Mzc1IC0yLjAzMTI1IC0x Ljk1MzEyNSBDIC0yLjAzMTI1IC0xLjk1MzEyNSAtMS45Njg3NSAtMS44OTA2MjUgLTEuODU5Mzc1 IC0xLjg5MDYyNSBDIC0xLjY4NzUgLTEuODkwNjI1IC0xLjYwOTM3NSAtMi4wMzEyNSAtMS42MDkz NzUgLTIuMTQwNjI1IEMgLTEuNjA5Mzc1IC0yLjI2NTYyNSAtMS42ODc1IC0yLjM5MDYyNSAtMS44 NTkzNzUgLTIuMzkwNjI1IEMgLTIuMDQ2ODc1IC0yLjM5MDYyNSAtMi4yMDMxMjUgLTIuMjAzMTI1 IC0yLjIwMzEyNSAtMS45Mzc1IEMgLTIuMjAzMTI1IC0xLjY4NzUgLTIuMDc4MTI1IC0xLjM3NSAt MS42NTYyNSAtMS4xODc1IEwgLTEuNjU2MjUgLTEuMTcxODc1IEwgLTIuMjAzMTI1IC0xLjE3MTg3 NSBMIC0yLjE0MDYyNSAtMC4zNzUgTCAtMS45MjE4NzUgLTAuMzc1IEMgLTEuOTIxODc1IC0wLjc1 IC0xLjg5MDYyNSAtMC43OTY4NzUgLTEuNjU2MjUgLTAuNzk2ODc1IEwgLTAuNDIxODc1IC0wLjc5 Njg3NSBDIC0wLjI2NTYyNSAtMC43OTY4NzUgLTAuMjE4NzUgLTAuNzk2ODc1IC0wLjIxODc1IC0w LjQ2ODc1IEwgLTAuMjE4NzUgLTAuMzc1IEwgMCAtMC4zNzUgQyAtMC4wMTU2MjUgLTAuNTkzNzUg LTAuMDE1NjI1IC0wLjgxMjUgLTAuMDE1NjI1IC0xLjAxNTYyNSBDIC0wLjAxNTYyNSAtMS4yODEy NSAtMC4wMTU2MjUgLTEuNTMxMjUgMCAtMS43MzQzNzUgTCAtMC4yMTg3NSAtMS43MzQzNzUgTCAt MC4yMTg3NSAtMS41OTM3NSBDIC0wLjIxODc1IC0xLjIxODc1IC0wLjI2NTYyNSAtMS4yMTg3NSAt MC40MjE4NzUgLTEuMjE4NzUgWiBNIC0xLjEwOTM3NSAtMS4yMTg3NSAiLz4KPC9nPgo8ZyBpZD0i Z2x5cGgtNC01Ij4KPHBhdGggZD0iTSAtMi4wOTM3NSAtMi4yMzQzNzUgQyAtMi4xNzE4NzUgLTIu MjM0Mzc1IC0yLjIzNDM3NSAtMi4yMzQzNzUgLTIuMjM0Mzc1IC0yLjE0MDYyNSBDIC0yLjIzNDM3 NSAtMi4xMjUgLTIuMjM0Mzc1IC0yLjEwOTM3NSAtMi4yMDMxMjUgLTIuMDYyNSBDIC0yLjE3MTg3 NSAtMi4wNDY4NzUgLTIuMDkzNzUgLTEuOTUzMTI1IC0yLjA5Mzc1IC0xLjkzNzUgQyAtMi4wOTM3 NSAtMS45MjE4NzUgLTIuMDkzNzUgLTEuOTIxODc1IC0yLjEyNSAtMS44OTA2MjUgQyAtMi4xODc1 IC0xLjc4MTI1IC0yLjIzNDM3NSAtMS41OTM3NSAtMi4yMzQzNzUgLTEuMzQzNzUgQyAtMi4yMzQz NzUgLTAuNTE1NjI1IC0xLjg1OTM3NSAtMC4zNDM3NSAtMS42MjUgLTAuMzQzNzUgQyAtMS4xNTYy NSAtMC4zNDM3NSAtMS4wNjI1IC0wLjkyMTg3NSAtMSAtMS4zOTA2MjUgQyAtMC45NTMxMjUgLTEu NjcxODc1IC0wLjg3NSAtMi4xNDA2MjUgLTAuNTQ2ODc1IC0yLjE0MDYyNSBDIC0wLjM3NSAtMi4x NDA2MjUgLTAuMTA5Mzc1IC0xLjk4NDM3NSAtMC4xMDkzNzUgLTEuMzkwNjI1IEMgLTAuMTA5Mzc1 IC0xLjA0Njg3NSAtMC4yMzQzNzUgLTAuNzE4NzUgLTAuNzY1NjI1IC0wLjU2MjUgQyAtMC44NTkz NzUgLTAuNTQ2ODc1IC0wLjg3NSAtMC41MzEyNSAtMC44NzUgLTAuNDUzMTI1IEMgLTAuODc1IC0w LjM0Mzc1IC0wLjgyODEyNSAtMC4zNDM3NSAtMC43MTg3NSAtMC4zNDM3NSBMIC0wLjA3ODEyNSAt MC4zNDM3NSBDIDAgLTAuMzQzNzUgMC4wNjI1IC0wLjM0Mzc1IDAuMDYyNSAtMC40MjE4NzUgQyAw LjA2MjUgLTAuNDY4NzUgMC4wNDY4NzUgLTAuNDY4NzUgLTAuMDQ2ODc1IC0wLjU2MjUgTCAtMC4x NzE4NzUgLTAuNzAzMTI1IEMgMC4wNDY4NzUgLTAuOTUzMTI1IDAuMDYyNSAtMS4yNjU2MjUgMC4w NjI1IC0xLjM5MDYyNSBDIDAuMDYyNSAtMi4yMTg3NSAtMC4zNzUgLTIuMzc1IC0wLjYyNSAtMi4z NzUgQyAtMC44NTkzNzUgLTIuMzc1IC0xLjAxNTYyNSAtMi4yNjU2MjUgLTEuMTQwNjI1IC0yLjA2 MjUgQyAtMS4yNjU2MjUgLTEuODc1IC0xLjI4MTI1IC0xLjcxODc1IC0xLjM0Mzc1IC0xLjI5Njg3 NSBDIC0xLjM5MDYyNSAtMC45ODQzNzUgLTEuNDUzMTI1IC0wLjU5Mzc1IC0xLjcxODc1IC0wLjU5 Mzc1IEMgLTEuODkwNjI1IC0wLjU5Mzc1IC0yLjA3ODEyNSAtMC43OTY4NzUgLTIuMDc4MTI1IC0x LjMyODEyNSBDIC0yLjA3ODEyNSAtMS43NSAtMS45MjE4NzUgLTEuOTg0Mzc1IC0xLjU3ODEyNSAt Mi4wMTU2MjUgQyAtMS41IC0yLjAzMTI1IC0xLjQ2ODc1IC0yLjAzMTI1IC0xLjQ2ODc1IC0yLjEy NSBDIC0xLjQ2ODc1IC0yLjIzNDM3NSAtMS41IC0yLjIzNDM3NSAtMS42MDkzNzUgLTIuMjM0Mzc1 IFogTSAtMi4wOTM3NSAtMi4yMzQzNzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTQtNiI+CjxwYXRo IGQ9Ik0gLTEuNSAtMi45ODQzNzUgQyAtMi4wNDY4NzUgLTIuOTg0Mzc1IC0yLjIwMzEyNSAtMi42 MDkzNzUgLTIuMjAzMTI1IC0yLjE1NjI1IEMgLTIuMjAzMTI1IC0xLjU3ODEyNSAtMS44NTkzNzUg LTEuMzI4MTI1IC0xLjc1IC0xLjI1IEwgLTMuNDUzMTI1IC0xLjI1IEwgLTMuNDA2MjUgLTAuNDA2 MjUgTCAtMy4xODc1IC0wLjQwNjI1IEMgLTMuMTg3NSAtMC43ODEyNSAtMy4xNTYyNSAtMC44Mjgx MjUgLTIuOTA2MjUgLTAuODI4MTI1IEwgLTAuNDIxODc1IC0wLjgyODEyNSBDIC0wLjI2NTYyNSAt MC44MjgxMjUgLTAuMjE4NzUgLTAuODI4MTI1IC0wLjIxODc1IC0wLjUgTCAtMC4yMTg3NSAtMC40 MDYyNSBMIDAgLTAuNDA2MjUgQyAtMC4wMTU2MjUgLTAuNjI1IC0wLjAxNTYyNSAtMC44MjgxMjUg LTAuMDE1NjI1IC0xLjA0Njg3NSBDIC0wLjAxNTYyNSAtMS4yNSAtMC4wMTU2MjUgLTEuNDY4NzUg MCAtMS42ODc1IEwgLTAuMjE4NzUgLTEuNjg3NSBMIC0wLjIxODc1IC0xLjU5Mzc1IEMgLTAuMjE4 NzUgLTEuMjY1NjI1IC0wLjI2NTYyNSAtMS4yNjU2MjUgLTAuNDIxODc1IC0xLjI2NTYyNSBMIC0x LjI4MTI1IC0xLjI2NTYyNSBDIC0xLjg0Mzc1IC0xLjI2NTYyNSAtMi4wMzEyNSAtMS43ODEyNSAt Mi4wMzEyNSAtMi4wOTM3NSBDIC0yLjAzMTI1IC0yLjQ2ODc1IC0xLjgyODEyNSAtMi41NDY4NzUg LTEuNTE1NjI1IC0yLjU0Njg3NSBMIC0wLjQyMTg3NSAtMi41NDY4NzUgQyAtMC4yNjU2MjUgLTIu NTQ2ODc1IC0wLjIxODc1IC0yLjU0Njg3NSAtMC4yMTg3NSAtMi4yMTg3NSBMIC0wLjIxODc1IC0y LjE0MDYyNSBMIDAgLTIuMTQwNjI1IEMgLTAuMDE1NjI1IC0yLjM0Mzc1IC0wLjAxNTYyNSAtMi41 NjI1IC0wLjAxNTYyNSAtMi43NjU2MjUgQyAtMC4wMTU2MjUgLTIuOTg0Mzc1IC0wLjAxNTYyNSAt My4xODc1IDAgLTMuNDA2MjUgTCAtMC4yMTg3NSAtMy40MDYyNSBMIC0wLjIxODc1IC0zLjMxMjUg QyAtMC4yMTg3NSAtMi45ODQzNzUgLTAuMjY1NjI1IC0yLjk4NDM3NSAtMC40MjE4NzUgLTIuOTg0 Mzc1IFogTSAtMS41IC0yLjk4NDM3NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5cGgtNC03Ij4KPHBhdGgg ZD0iTSAtMy4wNzgxMjUgLTEuMjY1NjI1IEMgLTMuMjM0Mzc1IC0xLjI2NTYyNSAtMy4zNzUgLTEu MTI1IC0zLjM3NSAtMC45NTMxMjUgQyAtMy4zNzUgLTAuNzk2ODc1IC0zLjI1IC0wLjY1NjI1IC0z LjA3ODEyNSAtMC42NTYyNSBDIC0yLjg5MDYyNSAtMC42NTYyNSAtMi43NjU2MjUgLTAuNzk2ODc1 IC0yLjc2NTYyNSAtMC45NTMxMjUgQyAtMi43NjU2MjUgLTEuMTI1IC0yLjkwNjI1IC0xLjI2NTYy NSAtMy4wNzgxMjUgLTEuMjY1NjI1IFogTSAtMi4xNDA2MjUgLTAuNDM3NSBMIC0xLjkyMTg3NSAt MC40Mzc1IEMgLTEuOTIxODc1IC0wLjc4MTI1IC0xLjg5MDYyNSAtMC44MjgxMjUgLTEuNjU2MjUg LTAuODI4MTI1IEwgLTAuNDIxODc1IC0wLjgyODEyNSBDIC0wLjI2NTYyNSAtMC44MjgxMjUgLTAu MjE4NzUgLTAuODI4MTI1IC0wLjIxODc1IC0wLjUgTCAtMC4yMTg3NSAtMC40MDYyNSBMIDAgLTAu NDA2MjUgQyAtMC4wMTU2MjUgLTAuNjI1IC0wLjAxNTYyNSAtMC44MjgxMjUgLTAuMDE1NjI1IC0x LjAzMTI1IEMgLTAuMDE1NjI1IC0xLjIxODc1IC0wLjAxNTYyNSAtMS40Mzc1IDAgLTEuNjI1IEwg LTAuMjE4NzUgLTEuNjI1IEMgLTAuMjE4NzUgLTEuMjk2ODc1IC0wLjIxODc1IC0xLjI1IC0wLjQy MTg3NSAtMS4yNSBMIC0yLjIwMzEyNSAtMS4yNSBaIE0gLTIuMTQwNjI1IC0wLjQzNzUgIi8+Cjwv Zz4KPGcgaWQ9ImdseXBoLTQtOCI+CjxwYXRoIGQ9Ik0gLTEuOTIxODc1IC0xLjIxODc1IEwgLTEu OTIxODc1IC0yLjEwOTM3NSBMIC0yLjE0MDYyNSAtMi4xMDkzNzUgTCAtMi4xNDA2MjUgLTEuMjE4 NzUgTCAtMy4wNjI1IC0xLjIxODc1IEwgLTMuMDYyNSAtMS4wMTU2MjUgQyAtMi41OTM3NSAtMS4w MTU2MjUgLTIuMTA5Mzc1IC0wLjc2NTYyNSAtMi4wOTM3NSAtMC4yNSBMIC0xLjkyMTg3NSAtMC4y NSBMIC0xLjkyMTg3NSAtMC43ODEyNSBMIC0wLjYyNSAtMC43ODEyNSBDIC0wLjA2MjUgLTAuNzgx MjUgMC4wNjI1IC0xLjI1IDAuMDYyNSAtMS41NjI1IEMgMC4wNjI1IC0xLjkzNzUgLTAuMjE4NzUg LTIuMjE4NzUgLTAuNjI1IC0yLjIxODc1IEwgLTAuOTA2MjUgLTIuMjE4NzUgTCAtMC45MDYyNSAt MiBMIC0wLjY0MDYyNSAtMiBDIC0wLjI2NTYyNSAtMiAtMC4xMjUgLTEuNzgxMjUgLTAuMTI1IC0x LjYwOTM3NSBDIC0wLjEyNSAtMS4yMTg3NSAtMC41MTU2MjUgLTEuMjE4NzUgLTAuNjI1IC0xLjIx ODc1IFogTSAtMS45MjE4NzUgLTEuMjE4NzUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTQtOSI+Cjxw YXRoIGQ9Ik0gLTEuMDYyNSAtMy4wNjI1IEMgLTEuNjg3NSAtMy4wNjI1IC0yLjIzNDM3NSAtMi40 ODQzNzUgLTIuMjM0Mzc1IC0xLjY4NzUgQyAtMi4yMzQzNzUgLTAuOTA2MjUgLTEuNjg3NSAtMC4z MjgxMjUgLTEuMDYyNSAtMC4zMjgxMjUgQyAtMC40Njg3NSAtMC4zMjgxMjUgMC4wNjI1IC0wLjky MTg3NSAwLjA2MjUgLTEuNjg3NSBDIDAuMDYyNSAtMi40ODQzNzUgLTAuNDY4NzUgLTMuMDYyNSAt MS4wNjI1IC0zLjA2MjUgWiBNIC0wLjEyNSAtMS42ODc1IEMgLTAuMTI1IC0wLjgyODEyNSAtMC44 NzUgLTAuODI4MTI1IC0xLjEwOTM3NSAtMC44MjgxMjUgQyAtMS4zMjgxMjUgLTAuODI4MTI1IC0y LjA2MjUgLTAuODI4MTI1IC0yLjA2MjUgLTEuNjg3NSBDIC0yLjA2MjUgLTIuNTYyNSAtMS4zMjgx MjUgLTIuNTYyNSAtMS4xMDkzNzUgLTIuNTYyNSBDIC0wLjg3NSAtMi41NjI1IC0wLjEyNSAtMi41 NjI1IC0wLjEyNSAtMS42ODc1IFogTSAtMC4xMjUgLTEuNjg3NSAiLz4KPC9nPgo8ZyBpZD0iZ2x5 cGgtNC0xMCI+CjxwYXRoIGQ9Ik0gLTEuOTM3NSAtMi4yOTY4NzUgQyAtMi4wNzgxMjUgLTIuNTMx MjUgLTIuMDkzNzUgLTIuNzUgLTIuMDkzNzUgLTIuODQzNzUgQyAtMi4wNzgxMjUgLTIuODI4MTI1 IC0yLjA0Njg3NSAtMi43OTY4NzUgLTEuOTY4NzUgLTIuNzk2ODc1IEMgLTEuODc1IC0yLjc5Njg3 NSAtMS43OTY4NzUgLTIuODU5Mzc1IC0xLjc5Njg3NSAtMi45ODQzNzUgQyAtMS43OTY4NzUgLTMu MDkzNzUgLTEuODc1IC0zLjE3MTg3NSAtMS45Njg3NSAtMy4xNzE4NzUgQyAtMi4xMDkzNzUgLTMu MTcxODc1IC0yLjI2NTYyNSAtMy4wNjI1IC0yLjI2NTYyNSAtMi44MjgxMjUgQyAtMi4yNjU2MjUg LTIuNzAzMTI1IC0yLjIzNDM3NSAtMi40Mzc1IC0yLjAzMTI1IC0yLjE3MTg3NSBDIC0yLjA5Mzc1 IC0yLjA2MjUgLTIuMjAzMTI1IC0xLjgyODEyNSAtMi4yMDMxMjUgLTEuNTMxMjUgQyAtMi4yMDMx MjUgLTAuOTM3NSAtMS44NTkzNzUgLTAuNTMxMjUgLTEuNDY4NzUgLTAuNTMxMjUgQyAtMS4yMTg3 NSAtMC41MzEyNSAtMS4wMzEyNSAtMC43MTg3NSAtMC45Njg3NSAtMC43ODEyNSBDIC0wLjgyODEy NSAtMC42NzE4NzUgLTAuNjcxODc1IC0wLjY0MDYyNSAtMC41NjI1IC0wLjY0MDYyNSBDIC0wLjI5 Njg3NSAtMC42NDA2MjUgLTAuMTQwNjI1IC0wLjgxMjUgLTAuMTA5Mzc1IC0wLjg1OTM3NSBDIC0w LjA0Njg3NSAtMC42MDkzNzUgMC4xMjUgLTAuMzEyNSAwLjM5MDYyNSAtMC4zMTI1IEMgMC43ODEy NSAtMC4zMTI1IDEuMDMxMjUgLTAuOTY4NzUgMS4wMzEyNSAtMS42ODc1IEMgMS4wMzEyNSAtMi4z NTkzNzUgMC44MTI1IC0zLjA3ODEyNSAwLjM3NSAtMy4wNzgxMjUgQyAwLjE1NjI1IC0zLjA3ODEy NSAtMC4wOTM3NSAtMi45NTMxMjUgLTAuMjAzMTI1IC0yLjcwMzEyNSBDIC0wLjM3NSAtMi4zNzUg LTAuMzc1IC0yLjA0Njg3NSAtMC4zNzUgLTEuNTE1NjI1IEMgLTAuMzc1IC0xLjM5MDYyNSAtMC4z NzUgLTEuMTcxODc1IC0wLjM3NSAtMS4xNDA2MjUgQyAtMC40MDYyNSAtMC45MDYyNSAtMC42MDkz NzUgLTAuODU5Mzc1IC0wLjcwMzEyNSAtMC44NTkzNzUgQyAtMC43OTY4NzUgLTAuODU5Mzc1IC0w Ljg3NSAtMC45MDYyNSAtMC44NzUgLTAuOTIxODc1IEMgLTAuODc1IC0wLjkyMTg3NSAtMC44NzUg LTAuOTM3NSAtMC44NzUgLTAuOTUzMTI1IEMgLTAuNzY1NjI1IC0xLjE1NjI1IC0wLjczNDM3NSAt MS4zNDM3NSAtMC43MzQzNzUgLTEuNTE1NjI1IEMgLTAuNzM0Mzc1IC0yLjEwOTM3NSAtMS4wOTM3 NSAtMi41MTU2MjUgLTEuNDY4NzUgLTIuNTE1NjI1IEMgLTEuNzAzMTI1IC0yLjUxNTYyNSAtMS44 OTA2MjUgLTIuMzU5Mzc1IC0xLjkzNzUgLTIuMjk2ODc1IFogTSAtMC45MDYyNSAtMS41MzEyNSBD IC0wLjkwNjI1IC0xLjA5Mzc1IC0xLjE4NzUgLTAuOTY4NzUgLTEuNDY4NzUgLTAuOTY4NzUgQyAt MS43NSAtMC45Njg3NSAtMi4wMzEyNSAtMS4wOTM3NSAtMi4wMzEyNSAtMS41MTU2MjUgQyAtMi4w MzEyNSAtMS45NTMxMjUgLTEuNzUgLTIuMDc4MTI1IC0xLjQ2ODc1IC0yLjA3ODEyNSBDIC0xLjIw MzEyNSAtMi4wNzgxMjUgLTAuOTA2MjUgLTEuOTUzMTI1IC0wLjkwNjI1IC0xLjUzMTI1IFogTSAw LjAxNTYyNSAtMS41MzEyNSBDIDAuMDE1NjI1IC0yLjAzMTI1IDAuMDE1NjI1IC0yLjczNDM3NSAw LjM5MDYyNSAtMi43MzQzNzUgQyAwLjYyNSAtMi43MzQzNzUgMC44NTkzNzUgLTIuMjgxMjUgMC44 NTkzNzUgLTEuNjg3NSBDIDAuODU5Mzc1IC0xLjEyNSAwLjY0MDYyNSAtMC42NTYyNSAwLjM3NSAt MC42NTYyNSBDIDAuMjE4NzUgLTAuNjU2MjUgMC4wMTU2MjUgLTAuODI4MTI1IDAuMDE1NjI1IC0x LjIwMzEyNSBaIE0gMC4wMTU2MjUgLTEuNTMxMjUgIi8+CjwvZz4KPGcgaWQ9ImdseXBoLTQtMTEi Pgo8cGF0aCBkPSJNIC0xLjQ4NDM3NSAtMi42MDkzNzUgQyAtMS45NTMxMjUgLTIuNjA5Mzc1IC0y LjIzNDM3NSAtMi4xMDkzNzUgLTIuMjM0Mzc1IC0xLjQ4NDM3NSBDIC0yLjIzNDM3NSAtMS4xODc1 IC0yLjIxODc1IC0wLjYwOTM3NSAtMS43OTY4NzUgLTAuNjA5Mzc1IEMgLTEuNjA5Mzc1IC0wLjYw OTM3NSAtMS41MzEyNSAtMC43NSAtMS41MzEyNSAtMC44NzUgQyAtMS41MzEyNSAtMSAtMS42MjUg LTEuMTI1IC0xLjc5Njg3NSAtMS4xMjUgQyAtMS45MDYyNSAtMS4xMjUgLTEuOTg0Mzc1IC0xLjA2 MjUgLTIuMDE1NjI1IC0xLjAxNTYyNSBDIC0yLjA2MjUgLTEuMTg3NSAtMi4wNjI1IC0xLjQyMTg3 NSAtMi4wNjI1IC0xLjQ2ODc1IEMgLTIuMDYyNSAtMS45MDYyNSAtMS44MjgxMjUgLTIuMTU2MjUg LTEuNDY4NzUgLTIuMTU2MjUgTCAtMS4zNDM3NSAtMi4xNTYyNSBDIC0xLjMyODEyNSAtMS42ODc1 IC0xLjMxMjUgLTEuNDA2MjUgLTEuMTcxODc1IC0xLjAzMTI1IEMgLTEuMDYyNSAtMC43MDMxMjUg LTAuODQzNzUgLTAuNDA2MjUgLTAuNTE1NjI1IC0wLjQwNjI1IEMgLTAuMDYyNSAtMC40MDYyNSAw LjA2MjUgLTAuOTg0Mzc1IDAuMDYyNSAtMS4zOTA2MjUgQyAwLjA2MjUgLTEuNzY1NjI1IC0wLjA5 Mzc1IC0yLjA2MjUgLTAuMzU5Mzc1IC0yLjIxODc1IEMgLTAuMTcxODc1IC0yLjI1IDAuMDMxMjUg LTIuMzU5Mzc1IDAuMDMxMjUgLTIuNjA5Mzc1IEMgMC4wMzEyNSAtMi42NDA2MjUgMC4wMzEyNSAt My4yMTg3NSAtMC40NTMxMjUgLTMuMjE4NzUgTCAtMC43MTg3NSAtMy4yMTg3NSBMIC0wLjcxODc1 IC0zIEwgLTAuNDUzMTI1IC0zIEMgLTAuNDA2MjUgLTMgLTAuMTg3NSAtMyAtMC4xODc1IC0yLjgx MjUgQyAtMC4xODc1IC0yLjYwOTM3NSAtMC40MDYyNSAtMi42MDkzNzUgLTAuNDUzMTI1IC0yLjYw OTM3NSBaIE0gLTAuNzAzMTI1IC0yLjE1NjI1IEMgLTAuMTU2MjUgLTIuMTU2MjUgLTAuMTA5Mzc1 IC0xLjU2MjUgLTAuMTA5Mzc1IC0xLjQzNzUgQyAtMC4xMDkzNzUgLTEuMTQwNjI1IC0wLjI2NTYy NSAtMC44NzUgLTAuNTE1NjI1IC0wLjg3NSBDIC0wLjY4NzUgLTAuODc1IC0xLjE0MDYyNSAtMC45 Njg3NSAtMS4yMDMxMjUgLTIuMTU2MjUgWiBNIC0wLjcwMzEyNSAtMi4xNTYyNSAiLz4KPC9nPgo8 L2c+CjxjbGlwUGF0aCBpZD0iY2xpcC0wIj4KPHBhdGggY2xpcC1ydWxlPSJub256ZXJvIiBkPSJN IDAgMCBMIDM0NCAwIEwgMzQ0IDI4OS45OTYwOTQgTCAwIDI4OS45OTYwOTQgWiBNIDAgMCAiLz4K PC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwLTEiPgo8cGF0aCBjbGlwLXJ1bGU9Im5vbnpl cm8iIGQ9Ik0gNTIuNjYwMTU2IDYuMTk1MzEyIEwgMzM3Ljk0NTMxMiA2LjE5NTMxMiBMIDMzNy45 NDUzMTIgMjUyLjI1NzgxMiBMIDUyLjY2MDE1NiAyNTIuMjU3ODEyIFogTSA1Mi42NjAxNTYgNi4x OTUzMTIgIi8+CjwvY2xpcFBhdGg+CjxjbGlwUGF0aCBpZD0iY2xpcC0yIj4KPHBhdGggY2xpcC1y dWxlPSJub256ZXJvIiBkPSJNIDMxMyAwIEwgMzQ0LjEzNjcxOSAwIEwgMzQ0LjEzNjcxOSAzMSBM IDMxMyAzMSBaIE0gMzEzIDAgIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPGcgY2xpcC1wYXRoPSJ1 cmwoI2NsaXAtMCkiPgo8cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9InJnYigxMDAlLCAx MDAlLCAxMDAlKSIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNIDAuNSAyODkuNDk2MDk0IEwgMC41IDAu NDk2MDk0IEwgMzQzLjY0MDYyNSAwLjQ5NjA5NCBMIDM0My42NDA2MjUgMjg5LjQ5NjA5NCBaIE0g MC41IDI4OS40OTYwOTQgIi8+CjwvZz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIw LjM5ODUiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJv a2U9InJnYig2OS4wMTg1NTUlLCA2OS4wMTg1NTUlLCA2OS4wMTg1NTUlKSIgc3Ryb2tlLW9wYWNp dHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMzMuMTEgLTAuMDAwODEyNSBMIDIz My4xMSAyNDYuMDYxNjg3IE0gMjkxLjM4NzM0NCAtMC4wMDA4MTI1IEwgMjkxLjM4NzM0NCAyNDYu MDYxNjg3IE0gMzQ5LjY2NDY4OCAtMC4wMDA4MTI1IEwgMzQ5LjY2NDY4OCAyNDYuMDYxNjg3IE0g NDA3Ljk0MjAzMSAtMC4wMDA4MTI1IEwgNDA3Ljk0MjAzMSAyNDYuMDYxNjg3IE0gNDY2LjIxOTM3 NSAtMC4wMDA4MTI1IEwgNDY2LjIxOTM3NSAyNDYuMDYxNjg3ICIgdHJhbnNmb3JtPSJtYXRyaXgo MSwgMCwgMCwgLTEsIC0xNTEuMjM1LCAyNTIuMjU3KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJv a2Utd2lkdGg9IjAuMzk4NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0i bWl0ZXIiIHN0cm9rZT0icmdiKDY5LjAxODU1NSUsIDY5LjAxODU1NSUsIDY5LjAxODU1NSUpIiBz dHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDIwMy44OTUxNTYg MS4wMjY1MzEgTCA0ODkuMTgwMzEzIDEuMDI2NTMxIE0gMjAzLjg5NTE1NiAyOC40NDA1OTQgTCA0 ODkuMTgwMzEzIDI4LjQ0MDU5NCBNIDIwMy44OTUxNTYgNTUuODU0NjU2IEwgNDg5LjE4MDMxMyA1 NS44NTQ2NTYgTSAyMDMuODk1MTU2IDgzLjI2ODcxOSBMIDQ4OS4xODAzMTMgODMuMjY4NzE5IE0g MjAzLjg5NTE1NiAxMTAuNjgyNzgxIEwgNDg5LjE4MDMxMyAxMTAuNjgyNzgxIE0gMjAzLjg5NTE1 NiAxMzguMDk2ODQ0IEwgNDg5LjE4MDMxMyAxMzguMDk2ODQ0IE0gMjAzLjg5NTE1NiAxNjUuNTEw OTA2IEwgNDg5LjE4MDMxMyAxNjUuNTEwOTA2IE0gMjAzLjg5NTE1NiAxOTIuOTI4ODc1IEwgNDg5 LjE4MDMxMyAxOTIuOTI4ODc1IE0gMjAzLjg5NTE1NiAyMjAuMzQyOTM3IEwgNDg5LjE4MDMxMyAy MjAuMzQyOTM3ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTEuMjM1LCAyNTIu MjU3KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjAuMTk5MjUiIHN0cm9rZS1s aW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUs IDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDku OTE4NTk0IC0wLjAwMDgxMjUgTCAyMDkuOTE4NTk0IDIuODM1MTI1IE0gMjE1LjU2NzAzMSAtMC4w MDA4MTI1IEwgMjE1LjU2NzAzMSAyLjgzNTEyNSBNIDIyMC4xODAzMTMgLTAuMDAwODEyNSBMIDIy MC4xODAzMTMgMi44MzUxMjUgTSAyMjQuMDgyNjU2IC0wLjAwMDgxMjUgTCAyMjQuMDgyNjU2IDIu ODM1MTI1IE0gMjI3LjQ2MTU2MyAtMC4wMDA4MTI1IEwgMjI3LjQ2MTU2MyAyLjgzNTEyNSBNIDIz MC40NDIwMzEgLTAuMDAwODEyNSBMIDIzMC40NDIwMzEgMi44MzUxMjUgTSAyMzMuMTEgLTAuMDAw ODEyNSBMIDIzMy4xMSAyLjgzNTEyNSBNIDI1MC42NTI5NjkgLTAuMDAwODEyNSBMIDI1MC42NTI5 NjkgMi44MzUxMjUgTSAyNjAuOTE0Njg4IC0wLjAwMDgxMjUgTCAyNjAuOTE0Njg4IDIuODM1MTI1 IE0gMjY4LjE5NTkzOCAtMC4wMDA4MTI1IEwgMjY4LjE5NTkzOCAyLjgzNTEyNSBNIDI3My44NDQz NzUgLTAuMDAwODEyNSBMIDI3My44NDQzNzUgMi44MzUxMjUgTSAyNzguNDU3NjU2IC0wLjAwMDgx MjUgTCAyNzguNDU3NjU2IDIuODM1MTI1IE0gMjgyLjM2IC0wLjAwMDgxMjUgTCAyODIuMzYgMi44 MzUxMjUgTSAyODUuNzM4OTA2IC0wLjAwMDgxMjUgTCAyODUuNzM4OTA2IDIuODM1MTI1IE0gMjg4 LjcxOTM3NSAtMC4wMDA4MTI1IEwgMjg4LjcxOTM3NSAyLjgzNTEyNSBNIDI5MS4zODczNDQgLTAu MDAwODEyNSBMIDI5MS4zODczNDQgMi44MzUxMjUgTSAzMDguOTMwMzEzIC0wLjAwMDgxMjUgTCAz MDguOTMwMzEzIDIuODM1MTI1IE0gMzE5LjE5MjAzMSAtMC4wMDA4MTI1IEwgMzE5LjE5MjAzMSAy LjgzNTEyNSBNIDMyNi40NzMyODEgLTAuMDAwODEyNSBMIDMyNi40NzMyODEgMi44MzUxMjUgTSAz MzIuMTIxNzE5IC0wLjAwMDgxMjUgTCAzMzIuMTIxNzE5IDIuODM1MTI1IE0gMzM2LjczNSAtMC4w MDA4MTI1IEwgMzM2LjczNSAyLjgzNTEyNSBNIDM0MC42MzczNDQgLTAuMDAwODEyNSBMIDM0MC42 MzczNDQgMi44MzUxMjUgTSAzNDQuMDE2MjUgLTAuMDAwODEyNSBMIDM0NC4wMTYyNSAyLjgzNTEy NSBNIDM0Ni45OTY3MTkgLTAuMDAwODEyNSBMIDM0Ni45OTY3MTkgMi44MzUxMjUgTSAzNDkuNjY0 Njg4IC0wLjAwMDgxMjUgTCAzNDkuNjY0Njg4IDIuODM1MTI1IE0gMzY3LjIwNzY1NiAtMC4wMDA4 MTI1IEwgMzY3LjIwNzY1NiAyLjgzNTEyNSBNIDM3Ny40NjkzNzUgLTAuMDAwODEyNSBMIDM3Ny40 NjkzNzUgMi44MzUxMjUgTSAzODQuNzUwNjI1IC0wLjAwMDgxMjUgTCAzODQuNzUwNjI1IDIuODM1 MTI1IE0gMzkwLjM5OTA2MyAtMC4wMDA4MTI1IEwgMzkwLjM5OTA2MyAyLjgzNTEyNSBNIDM5NS4w MTIzNDQgLTAuMDAwODEyNSBMIDM5NS4wMTIzNDQgMi44MzUxMjUgTSAzOTguOTE0Njg4IC0wLjAw MDgxMjUgTCAzOTguOTE0Njg4IDIuODM1MTI1IE0gNDAyLjI5MzU5NCAtMC4wMDA4MTI1IEwgNDAy LjI5MzU5NCAyLjgzNTEyNSBNIDQwNS4yNzQwNjMgLTAuMDAwODEyNSBMIDQwNS4yNzQwNjMgMi44 MzUxMjUgTSA0MDcuOTQyMDMxIC0wLjAwMDgxMjUgTCA0MDcuOTQyMDMxIDIuODM1MTI1IE0gNDI1 LjQ4NSAtMC4wMDA4MTI1IEwgNDI1LjQ4NSAyLjgzNTEyNSBNIDQzNS43NDY3MTkgLTAuMDAwODEy NSBMIDQzNS43NDY3MTkgMi44MzUxMjUgTSA0NDMuMDI3OTY5IC0wLjAwMDgxMjUgTCA0NDMuMDI3 OTY5IDIuODM1MTI1IE0gNDQ4LjY3NjQwNiAtMC4wMDA4MTI1IEwgNDQ4LjY3NjQwNiAyLjgzNTEy NSBNIDQ1My4yODk2ODggLTAuMDAwODEyNSBMIDQ1My4yODk2ODggMi44MzUxMjUgTSA0NTcuMTky MDMxIC0wLjAwMDgxMjUgTCA0NTcuMTkyMDMxIDIuODM1MTI1IE0gNDYwLjU3MDkzOCAtMC4wMDA4 MTI1IEwgNDYwLjU3MDkzOCAyLjgzNTEyNSBNIDQ2My41NTE0MDYgLTAuMDAwODEyNSBMIDQ2My41 NTE0MDYgMi44MzUxMjUgTSAyMDkuOTE4NTk0IDI0Ni4wNjE2ODcgTCAyMDkuOTE4NTk0IDI0My4y MjU3NSBNIDIxNS41NjcwMzEgMjQ2LjA2MTY4NyBMIDIxNS41NjcwMzEgMjQzLjIyNTc1IE0gMjIw LjE4MDMxMyAyNDYuMDYxNjg3IEwgMjIwLjE4MDMxMyAyNDMuMjI1NzUgTSAyMjQuMDgyNjU2IDI0 Ni4wNjE2ODcgTCAyMjQuMDgyNjU2IDI0My4yMjU3NSBNIDIyNy40NjE1NjMgMjQ2LjA2MTY4NyBM IDIyNy40NjE1NjMgMjQzLjIyNTc1IE0gMjMwLjQ0MjAzMSAyNDYuMDYxNjg3IEwgMjMwLjQ0MjAz MSAyNDMuMjI1NzUgTSAyMzMuMTEgMjQ2LjA2MTY4NyBMIDIzMy4xMSAyNDMuMjI1NzUgTSAyNTAu NjUyOTY5IDI0Ni4wNjE2ODcgTCAyNTAuNjUyOTY5IDI0My4yMjU3NSBNIDI2MC45MTQ2ODggMjQ2 LjA2MTY4NyBMIDI2MC45MTQ2ODggMjQzLjIyNTc1IE0gMjY4LjE5NTkzOCAyNDYuMDYxNjg3IEwg MjY4LjE5NTkzOCAyNDMuMjI1NzUgTSAyNzMuODQ0Mzc1IDI0Ni4wNjE2ODcgTCAyNzMuODQ0Mzc1 IDI0My4yMjU3NSBNIDI3OC40NTc2NTYgMjQ2LjA2MTY4NyBMIDI3OC40NTc2NTYgMjQzLjIyNTc1 IE0gMjgyLjM2IDI0Ni4wNjE2ODcgTCAyODIuMzYgMjQzLjIyNTc1IE0gMjg1LjczODkwNiAyNDYu MDYxNjg3IEwgMjg1LjczODkwNiAyNDMuMjI1NzUgTSAyODguNzE5Mzc1IDI0Ni4wNjE2ODcgTCAy ODguNzE5Mzc1IDI0My4yMjU3NSBNIDI5MS4zODczNDQgMjQ2LjA2MTY4NyBMIDI5MS4zODczNDQg MjQzLjIyNTc1IE0gMzA4LjkzMDMxMyAyNDYuMDYxNjg3IEwgMzA4LjkzMDMxMyAyNDMuMjI1NzUg TSAzMTkuMTkyMDMxIDI0Ni4wNjE2ODcgTCAzMTkuMTkyMDMxIDI0My4yMjU3NSBNIDMyNi40NzMy ODEgMjQ2LjA2MTY4NyBMIDMyNi40NzMyODEgMjQzLjIyNTc1IE0gMzMyLjEyMTcxOSAyNDYuMDYx Njg3IEwgMzMyLjEyMTcxOSAyNDMuMjI1NzUgTSAzMzYuNzM1IDI0Ni4wNjE2ODcgTCAzMzYuNzM1 IDI0My4yMjU3NSBNIDM0MC42MzczNDQgMjQ2LjA2MTY4NyBMIDM0MC42MzczNDQgMjQzLjIyNTc1 IE0gMzQ0LjAxNjI1IDI0Ni4wNjE2ODcgTCAzNDQuMDE2MjUgMjQzLjIyNTc1IE0gMzQ2Ljk5Njcx OSAyNDYuMDYxNjg3IEwgMzQ2Ljk5NjcxOSAyNDMuMjI1NzUgTSAzNDkuNjY0Njg4IDI0Ni4wNjE2 ODcgTCAzNDkuNjY0Njg4IDI0My4yMjU3NSBNIDM2Ny4yMDc2NTYgMjQ2LjA2MTY4NyBMIDM2Ny4y MDc2NTYgMjQzLjIyNTc1IE0gMzc3LjQ2OTM3NSAyNDYuMDYxNjg3IEwgMzc3LjQ2OTM3NSAyNDMu MjI1NzUgTSAzODQuNzUwNjI1IDI0Ni4wNjE2ODcgTCAzODQuNzUwNjI1IDI0My4yMjU3NSBNIDM5 MC4zOTkwNjMgMjQ2LjA2MTY4NyBMIDM5MC4zOTkwNjMgMjQzLjIyNTc1IE0gMzk1LjAxMjM0NCAy NDYuMDYxNjg3IEwgMzk1LjAxMjM0NCAyNDMuMjI1NzUgTSAzOTguOTE0Njg4IDI0Ni4wNjE2ODcg TCAzOTguOTE0Njg4IDI0My4yMjU3NSBNIDQwMi4yOTM1OTQgMjQ2LjA2MTY4NyBMIDQwMi4yOTM1 OTQgMjQzLjIyNTc1IE0gNDA1LjI3NDA2MyAyNDYuMDYxNjg3IEwgNDA1LjI3NDA2MyAyNDMuMjI1 NzUgTSA0MDcuOTQyMDMxIDI0Ni4wNjE2ODcgTCA0MDcuOTQyMDMxIDI0My4yMjU3NSBNIDQyNS40 ODUgMjQ2LjA2MTY4NyBMIDQyNS40ODUgMjQzLjIyNTc1IE0gNDM1Ljc0NjcxOSAyNDYuMDYxNjg3 IEwgNDM1Ljc0NjcxOSAyNDMuMjI1NzUgTSA0NDMuMDI3OTY5IDI0Ni4wNjE2ODcgTCA0NDMuMDI3 OTY5IDI0My4yMjU3NSBNIDQ0OC42NzY0MDYgMjQ2LjA2MTY4NyBMIDQ0OC42NzY0MDYgMjQzLjIy NTc1IE0gNDUzLjI4OTY4OCAyNDYuMDYxNjg3IEwgNDUzLjI4OTY4OCAyNDMuMjI1NzUgTSA0NTcu MTkyMDMxIDI0Ni4wNjE2ODcgTCA0NTcuMTkyMDMxIDI0My4yMjU3NSBNIDQ2MC41NzA5MzggMjQ2 LjA2MTY4NyBMIDQ2MC41NzA5MzggMjQzLjIyNTc1IE0gNDYzLjU1MTQwNiAyNDYuMDYxNjg3IEwg NDYzLjU1MTQwNiAyNDMuMjI1NzUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1 MS4yMzUsIDI1Mi4yNTcpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMC4xOTky NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0i cmdiKDAlLCAwJSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEw IiBkPSJNIDIzMy4xMSAtMC4wMDA4MTI1IEwgMjMzLjExIDQuMjUzMDk0IE0gMjkxLjM4NzM0NCAt MC4wMDA4MTI1IEwgMjkxLjM4NzM0NCA0LjI1MzA5NCBNIDM0OS42NjQ2ODggLTAuMDAwODEyNSBM IDM0OS42NjQ2ODggNC4yNTMwOTQgTSA0MDcuOTQyMDMxIC0wLjAwMDgxMjUgTCA0MDcuOTQyMDMx IDQuMjUzMDk0IE0gNDY2LjIxOTM3NSAtMC4wMDA4MTI1IEwgNDY2LjIxOTM3NSA0LjI1MzA5NCBN IDIzMy4xMSAyNDYuMDYxNjg3IEwgMjMzLjExIDI0MS44MTE2ODcgTSAyOTEuMzg3MzQ0IDI0Ni4w NjE2ODcgTCAyOTEuMzg3MzQ0IDI0MS44MTE2ODcgTSAzNDkuNjY0Njg4IDI0Ni4wNjE2ODcgTCAz NDkuNjY0Njg4IDI0MS44MTE2ODcgTSA0MDcuOTQyMDMxIDI0Ni4wNjE2ODcgTCA0MDcuOTQyMDMx IDI0MS44MTE2ODcgTSA0NjYuMjE5Mzc1IDI0Ni4wNjE2ODcgTCA0NjYuMjE5Mzc1IDI0MS44MTE2 ODcgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+ CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMC4xOTkyNSIgc3Ryb2tlLWxpbmVjYXA9 ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgMCUpIiBz dHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDIwMy44OTUxNTYg MS4wMjY1MzEgTCAyMDguMTIxNzE5IDEuMDI2NTMxIE0gMjAzLjg5NTE1NiAyOC40NDA1OTQgTCAy MDguMTIxNzE5IDI4LjQ0MDU5NCBNIDIwMy44OTUxNTYgNTUuODU0NjU2IEwgMjA4LjEyMTcxOSA1 NS44NTQ2NTYgTSAyMDMuODk1MTU2IDgzLjI2ODcxOSBMIDIwOC4xMjE3MTkgODMuMjY4NzE5IE0g MjAzLjg5NTE1NiAxMTAuNjgyNzgxIEwgMjA4LjEyMTcxOSAxMTAuNjgyNzgxIE0gMjAzLjg5NTE1 NiAxMzguMDk2ODQ0IEwgMjA4LjEyMTcxOSAxMzguMDk2ODQ0IE0gMjAzLjg5NTE1NiAxNjUuNTEw OTA2IEwgMjA4LjEyMTcxOSAxNjUuNTEwOTA2IE0gMjAzLjg5NTE1NiAxOTIuOTI4ODc1IEwgMjA4 LjEyMTcxOSAxOTIuOTI4ODc1IE0gMjAzLjg5NTE1NiAyMjAuMzQyOTM3IEwgMjA4LjEyMTcxOSAy MjAuMzQyOTM3ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTEuMjM1LCAyNTIu MjU3KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1s aW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMCUs IDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDMu ODk1MTU2IC0wLjAwMDgxMjUgTCAyMDMuODk1MTU2IDI0Ni4wNjE2ODcgTCA0ODkuMTgwMzEzIDI0 Ni4wNjE2ODcgTCA0ODkuMTgwMzEzIC0wLjAwMDgxMjUgWiBNIDIwMy44OTUxNTYgLTAuMDAwODEy NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUyLjI1NykiLz4K PGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhy ZWY9IiNnbHlwaC0wLTEiIHg9Ijc0LjY1NiIgeT0iMjY0LjQ4NCIvPgo8dXNlIHhsaW5rOmhyZWY9 IiNnbHlwaC0wLTIiIHg9Ijc5LjYzNzMiIHk9IjI2NC40ODQiLz4KPC9nPgo8ZyBmaWxsPSJyZ2Io MCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTEt MSIgeD0iODQuNjE4IiB5PSIyNjAuODY5Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUp IiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjEzMi45 MzMiIHk9IjI2NC40ODQiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0yIiB4PSIxMzcuOTE0 MyIgeT0iMjY0LjQ4NCIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFj aXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMS0yIiB4PSIxNDIuODk1IiB5PSIyNjAu ODY5Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8 dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjE5MS4yMDkiIHk9IjI2NC40ODQiLz4KPHVz ZSB4bGluazpocmVmPSIjZ2x5cGgtMC0yIiB4PSIxOTYuMTkwMyIgeT0iMjY0LjQ4NCIvPgo8L2c+ CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpo cmVmPSIjZ2x5cGgtMS0zIiB4PSIyMDEuMTcyIiB5PSIyNjAuODY5Ii8+CjwvZz4KPGcgZmlsbD0i cmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlw aC0wLTEiIHg9IjI0OS40ODYiIHk9IjI2NC40ODQiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgt MC0yIiB4PSIyNTQuNDY3MyIgeT0iMjY0LjQ4NCIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUs IDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMS00IiB4PSIy NTkuNDQ5IiB5PSIyNjAuODY5Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxs LW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjMwNy43NjMiIHk9 IjI2NC40ODQiLz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0yIiB4PSIzMTIuNzQ0MyIgeT0i MjY0LjQ4NCIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIx Ij4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMS01IiB4PSIzMTcuNzI1IiB5PSIyNjAuODY5Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjMwLjgyOCIgeT0iMjU0LjQ0MiIvPgo8L2c+CjxnIGZp bGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIj Z2x5cGgtMi0xIiB4PSIzNS44MDkiIHk9IjI1NC40NDIiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUs IDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMiIg eD0iMzguNTc3IiB5PSIyNTQuNDQyIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMyIgeD0i NDMuNTU4MyIgeT0iMjU0LjQ0MiIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmls bC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0xIiB4PSIzNS44MDkiIHk9 IjIyNy4wMjciLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0i MSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTItMSIgeD0iNDAuNzkxIiB5PSIyMjcuMDI3Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjQzLjU1OCIgeT0iMjI3LjAyNyIvPgo8L2c+CjxnIGZp bGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIj Z2x5cGgtMC0xIiB4PSIzMC44MjgiIHk9IjE5OS42MTMiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUs IDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTItMSIg eD0iMzUuODA5IiB5PSIxOTkuNjEzIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBm aWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjM4LjU3NyIg eT0iMTk5LjYxMyIvPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTMiIHg9IjQzLjU1ODMiIHk9 IjE5OS42MTMiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0i MSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMSIgeD0iMzUuODA5IiB5PSIxNzIuMTk5Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0yLTEiIHg9IjQwLjc5MSIgeT0iMTcyLjE5OSIvPgo8L2c+CjxnIGZp bGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIj Z2x5cGgtMC00IiB4PSI0My41NTgiIHk9IjE3Mi4xOTkiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUs IDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMSIg eD0iMzAuODI4IiB5PSIxNDQuNzg1Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBm aWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0yLTEiIHg9IjM1LjgwOSIg eT0iMTQ0Ljc4NSIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5 PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC00IiB4PSIzOC41NzciIHk9IjE0NC43ODUi Lz4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC0zIiB4PSI0My41NTgzIiB5PSIxNDQuNzg1Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjM1LjgwOSIgeT0iMTE3LjM3MSIvPgo8L2c+CjxnIGZp bGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVmPSIj Z2x5cGgtMi0xIiB4PSI0MC43OTEiIHk9IjExNy4zNzEiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUs IDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtNSIg eD0iNDMuNTU4IiB5PSIxMTcuMzcxIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBm aWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjMwLjgyOCIg eT0iODkuOTU3Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9 IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0yLTEiIHg9IjM1LjgwOSIgeT0iODkuOTU3Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC0wLTUiIHg9IjM4LjU3NyIgeT0iODkuOTU3Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTAtMyIgeD0iNDMuNTU4MyIgeT0iODkuOTU3Ii8+CjwvZz4KPGcgZmlsbD0i cmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlw aC0wLTEiIHg9IjM1LjgwOSIgeT0iNjIuNTQzIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwg MCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0yLTEiIHg9IjQw Ljc5MSIgeT0iNjIuNTQzIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9w YWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTYiIHg9IjQzLjU1OCIgeT0iNjIu NTQzIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8 dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTEiIHg9IjMwLjgyOCIgeT0iMzUuMTI5Ii8+CjwvZz4K PGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhy ZWY9IiNnbHlwaC0yLTEiIHg9IjM1LjgwOSIgeT0iMzUuMTI5Ii8+CjwvZz4KPGcgZmlsbD0icmdi KDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0w LTYiIHg9IjM4LjU3NyIgeT0iMzUuMTI5Ii8+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTAtMyIg eD0iNDMuNTU4MyIgeT0iMzUuMTI5Ii8+CjwvZz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAtMSki Pgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1saW5lY2Fw PSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMzkuMjE1MDg4 JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIDIw My44OTUxNTYgNDcuNDI4ODc1IEwgMjM3LjEyNTYyNSA0NS43ODgyNSBMIDI1Ny45NTc2NTYgMjcu NDk5MTg3IEwgMjc1LjMyNDg0NCAyOC4zOTc2MjUgTCAyOTIuMjMxMDk0IDM0LjYzOTgxMiBMIDMw OC4wNzQ4NDQgMjIuMDI2NTMxIEwgMzI0LjM0NDM3NSAyNS42ODI3ODEgTCAzNDEuMTE3ODEzIDku MzM5MDMxIEwgMzU5LjQxMDc4MSAtMC4wMDA4MTI1IEwgMzgwLjg3NTYyNSA0LjA1Nzc4MSBMIDQw OC41NTkyMTkgOC4xNzQ5NjkgTCA0ODkuMTgwMzEzIDI0Ni4wNjE2ODcgIiB0cmFuc2Zvcm09Im1h dHJpeCgxLCAwLCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+CjwvZz4KPHBhdGggZmlsbD0i bm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tl LWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tl LW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyMDIuNDg1IDQ2LjAxODcx OSBMIDIwNS4zMDUzMTMgNDguODM1MTI1IE0gMjAyLjQ4NSA0OC44MzUxMjUgTCAyMDUuMzA1MzEz IDQ2LjAxODcxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUy LjI1NykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2Ut bGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5 LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg ZD0iTSAyMzUuNzE1NDY5IDQ0LjM3ODA5NCBMIDIzOC41MzU3ODEgNDcuMTk4NDA2IE0gMjM1Ljcx NTQ2OSA0Ny4xOTg0MDYgTCAyMzguNTM1NzgxIDQ0LjM3ODA5NCAiIHRyYW5zZm9ybT0ibWF0cml4 KDEsIDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUyLjI1NykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry b2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2lu PSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9 IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyNTYuNTUxNDA2IDI2LjA4OTAzMSBMIDI1 OS4zNjc4MTMgMjguOTA1NDM3IE0gMjU2LjU1MTQwNiAyOC45MDU0MzcgTCAyNTkuMzY3ODEzIDI2 LjA4OTAzMSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUyLjI1 NykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGlu ZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIx NTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0i TSAyNzMuOTE0Njg4IDI2Ljk4NzQ2OSBMIDI3Ni43MzEwOTQgMjkuODAzODc1IE0gMjczLjkxNDY4 OCAyOS44MDM4NzUgTCAyNzYuNzMxMDk0IDI2Ljk4NzQ2OSAiIHRyYW5zZm9ybT0ibWF0cml4KDEs IDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUyLjI1NykiLz4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tl LXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJt aXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEi IHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAyOTAuODI0ODQ0IDMzLjIzMzU2MiBMIDI5My42 NDEyNSAzNi4wNDk5NjkgTSAyOTAuODI0ODQ0IDM2LjA0OTk2OSBMIDI5My42NDEyNSAzMy4yMzM1 NjIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+ CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9 ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUwODgl LCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMzA2 LjY2ODU5NCAyMC42MTYzNzUgTCAzMDkuNDg1IDIzLjQzMjc4MSBNIDMwNi42Njg1OTQgMjMuNDMy NzgxIEwgMzA5LjQ4NSAyMC42MTYzNzUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwg LTE1MS4yMzUsIDI1Mi4yNTcpIi8+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41 OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9r ZT0icmdiKDAlLCAzOS4yMTUwODglLCAwJSkiIHN0cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0 ZXJsaW1pdD0iMTAiIGQ9Ik0gMzIyLjkzNDIxOSAyNC4yNzI2MjUgTCAzMjUuNzUwNjI1IDI3LjA5 MjkzNyBNIDMyMi45MzQyMTkgMjcuMDkyOTM3IEwgMzI1Ljc1MDYyNSAyNC4yNzI2MjUgIiB0cmFu c2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+CjxwYXRoIGZp bGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41OTQwNCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0 cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAzOS4yMTUwODglLCAwJSkiIHN0 cm9rZS1vcGFjaXR5PSIxIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0gMzM5LjcwNzY1NiA3 LjkyODg3NSBMIDM0Mi41Mjc5NjkgMTAuNzQ1MjgxIE0gMzM5LjcwNzY1NiAxMC43NDUyODEgTCAz NDIuNTI3OTY5IDcuOTI4ODc1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTEu MjM1LCAyNTIuMjU3KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQi IHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJn YigwJSwgMzkuMjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGlt aXQ9IjEwIiBkPSJNIDM1OC4wMDA2MjUgLTEuNDA3MDYzIEwgMzYwLjgxNzAzMSAxLjQwOTM0NCBN IDM1OC4wMDA2MjUgMS40MDkzNDQgTCAzNjAuODE3MDMxIC0xLjQwNzA2MyAiIHRyYW5zZm9ybT0i bWF0cml4KDEsIDAsIDAsIC0xLCAtMTUxLjIzNSwgMjUyLjI1NykiLz4KPHBhdGggZmlsbD0ibm9u ZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxp bmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4OCUsIDAlKSIgc3Ryb2tlLW9w YWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSAzNzkuNDY5Mzc1IDIuNjQ3NjI1 IEwgMzgyLjI4NTc4MSA1LjQ2NzkzNyBNIDM3OS40NjkzNzUgNS40Njc5MzcgTCAzODIuMjg1Nzgx IDIuNjQ3NjI1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgLTEsIC0xNTEuMjM1LCAyNTIu MjU3KSIvPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjEuNTk0MDQiIHN0cm9rZS1s aW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2U9InJnYigwJSwgMzku MjE1MDg4JSwgMCUpIiBzdHJva2Utb3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBk PSJNIDQwNy4xNDkwNjMgNi43NjQ4MTIgTCA0MDkuOTY5Mzc1IDkuNTg1MTI1IE0gNDA3LjE0OTA2 MyA5LjU4NTEyNSBMIDQwOS45NjkzNzUgNi43NjQ4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAw LCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwLTIp Ij4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjU5NDA0IiBzdHJva2UtbGluZWNh cD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIgc3Ryb2tlPSJyZ2IoMCUsIDM5LjIxNTA4 OCUsIDAlKSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTSA0 ODcuNzcwMTU2IDI0NC42NTE1MzEgTCA0OTAuNTg2NTYzIDI0Ny40NzE4NDQgTSA0ODcuNzcwMTU2 IDI0Ny40NzE4NDQgTCA0OTAuNTg2NTYzIDI0NC42NTE1MzEgIiB0cmFuc2Zvcm09Im1hdHJpeCgx LCAwLCAwLCAtMSwgLTE1MS4yMzUsIDI1Mi4yNTcpIi8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAw JSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0wLTciIHg9 IjE3MS4xNTEiIHk9IjI3OS4zOTQiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZp bGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTItMiIgeD0iMTc1LjAyNSIg eT0iMjc5LjM5NCIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5 PSIxIj4KPHVzZSB4bGluazpocmVmPSIjZ2x5cGgtMC04IiB4PSIxODcuOTkiIHk9IjI3OS4zOTQi Lz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2Ug eGxpbms6aHJlZj0iI2dseXBoLTItMyIgeD0iMTk3Ljk1MyIgeT0iMjc5LjM5NCIvPgo8L2c+Cjxn IGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4KPHVzZSB4bGluazpocmVm PSIjZ2x5cGgtMC05IiB4PSIyMDcuMDQ0IiB5PSIyNzkuMzk0Ii8+CjwvZz4KPGcgZmlsbD0icmdi KDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC0y LTQiIHg9IjIxMC45MTgiIHk9IjI3OS4zOTQiLz4KPC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAw JSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTMtMSIgeD0iMTIu ODc2IiB5PSIxNDAuNDA5Ii8+CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9w YWNpdHk9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaC00LTEiIHg9IjEzLjg3MiIgeT0iMTM1 LjcwMyIvPgo8L2c+CjxnIGZpbGw9InJnYigwJSwgMCUsIDAlKSIgZmlsbC1vcGFjaXR5PSIxIj4K PHVzZSB4bGluazpocmVmPSIjZ2x5cGgtNC0yIiB4PSIxMy44NzIiIHk9IjEzMC40MTE4NjMiLz4K PC9nPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0iMSI+Cjx1c2UgeGxp bms6aHJlZj0iI2dseXBoLTQtMyIgeD0iMTMuODcyIiB5PSIxMjcuMDE4MTAzIi8+Cjx1c2UgeGxp bms6aHJlZj0iI2dseXBoLTQtNCIgeD0iMTMuODcyIiB5PSIxMjMuOTc0MDMxIi8+Cjx1c2UgeGxp bms6aHJlZj0iI2dseXBoLTQtNSIgeD0iMTMuODcyIiB5PSIxMjEuMjc1NjYxIi8+CjwvZz4KPHBh dGggZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjM5OCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQi IHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZT0icmdiKDAlLCAwJSwgMCUpIiBzdHJva2Ut b3BhY2l0eT0iMSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNIC0wLjAwMTkzNzUgMC4wMDA1 IEwgMzQuNzEyOTA2IDAuMDAwNSAiIHRyYW5zZm9ybT0ibWF0cml4KDAsIC0xLCAtMSwgMCwgMTUu NDM4LCAxNDYuNTg0KSIvPgo8ZyBmaWxsPSJyZ2IoMCUsIDAlLCAwJSkiIGZpbGwtb3BhY2l0eT0i MSI+Cjx1c2UgeGxpbms6aHJlZj0iI2dseXBoLTMtMSIgeD0iMjEuMzY1IiB5PSIxNDYuNTg0Ii8+ CjwvZz4KPGcgZmlsbD0icmdiKDAlLCAwJSwgMCUpIiBmaWxsLW9wYWNpdHk9IjEiPgo8dXNlIHhs aW5rOmhyZWY9IiNnbHlwaC00LTYiIHg9IjIyLjQyMiIgeT0iMTQxLjg3OCIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC00LTciIHg9IjIyLjQyMiIgeT0iMTM4LjE0MjAyNSIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC00LTUiIHg9IjIyLjQyMiIgeT0iMTM2LjEzNTU1NyIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC00LTgiIHg9IjIyLjQyMiIgeT0iMTMzLjQwMjgxNiIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC00LTkiIHg9IjIyLjQyMiIgeT0iMTMwLjcwNDQ0NiIvPgo8dXNlIHhsaW5r OmhyZWY9IiNnbHlwaC00LTEwIiB4PSIyMi40MjIiIHk9IjEyNy4zMTQxNzMiLz4KPHVzZSB4bGlu azpocmVmPSIjZ2x5cGgtNC00IiB4PSIyMi40MjIiIHk9IjEyMy45MjM5Ii8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTQtMTEiIHg9IjIyLjQyMiIgeT0iMTIxLjIyNTUzIi8+Cjx1c2UgeGxpbms6 aHJlZj0iI2dseXBoLTQtMSIgeD0iMjIuNDIyIiB5PSIxMTcuODM1MjU3Ii8+CjwvZz4KPC9zdmc+ Cg== imara-diff-0.1.5/plots/rust_comparison.svg000064400000000000000000002047631046102023000167530ustar 00000000000000 imara-diff-0.1.5/plots/rust_speedup.svg000064400000000000000000001446271046102023000162500ustar 00000000000000 imara-diff-0.1.5/plots/vscode_comparison.svg000064400000000000000000002044371046102023000172370ustar 00000000000000 imara-diff-0.1.5/plots/vscode_speedup.svg000064400000000000000000001327641046102023000165350ustar 00000000000000 imara-diff-0.1.5/rustfmt.toml000064400000000000000000000002721046102023000142300ustar 00000000000000use_small_heuristics = "Max" newline_style = "Unix" use_field_init_shorthand = true imports_granularity = "Module" group_imports = "StdExternalCrate" format_code_in_doc_comments = true imara-diff-0.1.5/src/histogram/lcs.rs000064400000000000000000000075521046102023000155520ustar 00000000000000use crate::histogram::{Histogram, MAX_CHAIN_LEN}; use crate::intern::Token; pub(super) fn find_lcs( before: &[Token], after: &[Token], histogram: &mut Histogram, ) -> Option { let mut search = LcsSearch { lcs: Lcs::default(), min_occurances: MAX_CHAIN_LEN + 1, found_cs: false }; search.run(before, after, histogram); if search.success() { Some(search.lcs) } else { None } } #[derive(Default, Debug)] pub struct Lcs { pub before_start: u32, pub after_start: u32, pub len: u32, } pub struct LcsSearch { lcs: Lcs, min_occurances: u32, found_cs: bool, } impl LcsSearch { fn run(&mut self, before: &[Token], after: &[Token], histogram: &mut Histogram) { let mut pos = 0; while let Some(&token) = after.get(pos as usize) { if histogram.num_token_occurances(token) != 0 { self.found_cs = true; if histogram.num_token_occurances(token) <= self.min_occurances { pos = self.update_lcs(pos, token, histogram, before, after); continue; } } pos += 1; } histogram.clear(); } fn success(&mut self) -> bool { !self.found_cs || self.min_occurances <= MAX_CHAIN_LEN } fn update_lcs( &mut self, after_pos: u32, token: Token, histogram: &Histogram, before: &[Token], after: &[Token], ) -> u32 { let mut next_token_idx2 = after_pos + 1; let mut occurances_iter = histogram.token_occurances(token).iter().copied(); let mut token_idx1 = occurances_iter.next().unwrap(); 'occurances_iter: loop { let mut occurances = histogram.num_token_occurances(token); let mut start1 = token_idx1; let mut start2 = after_pos; loop { if start1 == 0 || start2 == 0 { break; } let token1 = before.get(start1 as usize - 1); let token2 = after.get(start2 as usize - 1); if matches!((token1, token2), (Some(token1), Some(token2)) if token1 == token2) { start1 -= 1; start2 -= 1; let new_occurances = histogram.num_token_occurances(before[start1 as usize]); occurances = occurances.min(new_occurances); } else { break; } } let mut end1 = token_idx1 + 1; let mut end2 = after_pos + 1; loop { let token1 = before.get(end1 as usize); let token2 = after.get(end2 as usize); if matches!((token1, token2), (Some(token1), Some(token2)) if token1 == token2) { let new_occurances = histogram.num_token_occurances(before[end1 as usize]); occurances = occurances.min(new_occurances); end1 += 1; end2 += 1; } else { break; } } if next_token_idx2 < end2 { next_token_idx2 = end2; } let len = end2 - start2; debug_assert_eq!(len, end1 - start1); if self.lcs.len < len || self.min_occurances > occurances { self.min_occurances = occurances; self.lcs = Lcs { before_start: start1, after_start: start2, len }; } loop { if let Some(next_token_idx) = occurances_iter.next() { if next_token_idx > end2 { token_idx1 = next_token_idx; break; } } else { break 'occurances_iter; } } } next_token_idx2 } } imara-diff-0.1.5/src/histogram/list_pool.rs000064400000000000000000000225501046102023000167700ustar 00000000000000use crate::histogram::MAX_CHAIN_LEN; /// A small list of entity references allocated from a pool. /// /// An `ListHandle` type provides similar functionality to `Vec`, but with some important /// differences in the implementation: /// /// 1. Memory is allocated from a `ListPool` instead of the global heap. /// 2. The footprint of an entity list is 4 bytes, compared with the 24 bytes for `Vec`. /// 3. An entity list doesn't implement `Drop`, leaving it to the pool to manage memory. /// /// The list pool is intended to be used as a LIFO allocator. After building up a larger data /// structure with many list references, the whole thing can be discarded quickly by clearing the /// pool. /// /// # Safety /// /// Entity lists are not as safe to use as `Vec`, but they never jeopardize Rust's memory safety /// guarantees. These are the problems to be aware of: /// /// - If you lose track of an entity list, its memory won't be recycled until the pool is cleared. /// This can cause the pool to grow very large with leaked lists. /// - If entity lists are used after their pool is cleared, they may contain garbage data, and /// modifying them may corrupt other lists in the pool. /// - If an entity list is used with two different pool instances, both pools are likely to become /// corrupted. /// /// Entity lists can be cloned, but that operation should only be used as part of cloning the whole /// function they belong to. *Cloning an entity list does not allocate new memory for the clone*. /// It creates an alias of the same memory. /// /// Entity lists cannot be hashed and compared for equality because it's not possible to compare the /// contents of the list without the pool reference. /// /// # Implementation /// /// The `ListHandle` itself is designed to have the smallest possible footprint. This is important /// because it is used inside very compact data structures like `InstructionData`. The list /// contains only a 32-bit index into the pool's memory vector, pointing to the first element of /// the list. /// /// The pool is just a single `Vec` containing all of the allocated lists. Each list is /// represented as three contiguous parts: /// /// 1. The number of elements in the list. /// 2. The list elements. /// 3. Excess capacity elements. /// /// The total size of the three parts is always a power of two, and the excess capacity is always /// as small as possible. This means that shrinking a list may cause the excess capacity to shrink /// if a smaller power-of-two size becomes available. /// /// Both growing and shrinking a list may cause it to be reallocated in the pool vector. /// /// The index stored in an `ListHandle` points to part 2, the list elements. The value 0 is /// reserved for the empty list which isn't allocated in the vector. #[derive(Clone, Debug, PartialEq, Eq)] pub struct ListHandle { index: u32, generation: u32, len: u32, } /// Create an empty list. impl Default for ListHandle { fn default() -> Self { Self { index: 0, generation: 0, len: 0 } } } const MAX_SIZE_CLAS: SizeClass = sclass_for_length(super::MAX_CHAIN_LEN - 1); const NUM_SIZE_CLASS: usize = MAX_SIZE_CLAS as usize + 1; /// A memory pool for storing lists of `T`. #[derive(Clone, Debug)] pub struct ListPool { // The main array containing the lists. data: Vec, // Heads of the free lists, one for each size class. free: [u32; NUM_SIZE_CLASS], generation: u32, } /// Lists are allocated in sizes that are powers of two, starting from 4. /// Each power of two is assigned a size class number, so the size is `4 << SizeClass`. type SizeClass = u8; /// Get the size of a given size class. The size includes the length field, so the maximum list /// length is one less than the class size. #[inline] const fn sclass_size(sclass: SizeClass) -> usize { 4 << sclass } /// Get the size class to use for a given list length. /// This always leaves room for the length element in addition to the list elements. #[inline] const fn sclass_for_length(len: u32) -> SizeClass { 30 - (len | 3).leading_zeros() as SizeClass } /// Is `len` the minimum length in its size class? #[inline] fn is_sclass_max_length(len: u32) -> bool { len > 3 && len.is_power_of_two() } impl ListPool { /// Create a new list pool. pub fn new(capacity: u32) -> Self { Self { data: Vec::with_capacity(capacity as usize), free: [u32::MAX; NUM_SIZE_CLASS], generation: 1, } } /// Clear the pool, forgetting about all lists that use it. /// /// This invalidates any existing entity lists that used this pool to allocate memory. /// /// The pool's memory is not released to the operating system, but kept around for faster /// allocation in the future. pub fn clear(&mut self) { self.data.clear(); self.free.fill(u32::MAX); self.generation += 1; } /// Allocate a storage block with a size given by `sclass`. /// /// Returns the first index of an available segment of `self.data` containing /// `sclass_size(sclass)` elements. The allocated memory is filled with reserved /// values. fn alloc(&mut self, sclass: SizeClass) -> usize { let freelist_head = self.free[sclass as usize]; // First try the free list for this size class. if freelist_head == u32::MAX { // Nothing on the free list. Allocate more memory. let offset = self.data.len(); self.data.resize(offset + sclass_size(sclass), u32::MAX); offset } else { // take allocation of the free list (linked list) self.free[sclass as usize] = self.data[freelist_head as usize]; freelist_head as usize } } /// Free a storage block with a size given by `sclass`. /// /// This must be a block that was previously allocated by `alloc()` with the same size class. fn free(&mut self, block: usize, sclass: SizeClass) { let sclass = sclass as usize; // Insert the block on the free list which is a single linked list. self.data[block] = self.free[sclass] as u32; self.free[sclass] = block as u32 } /// Returns two mutable slices representing the two requested blocks. /// /// The two returned slices can be longer than the blocks. Each block is located at the front /// of the respective slice. fn mut_slices(&mut self, block0: usize, block1: usize) -> (&mut [u32], &mut [u32]) { if block0 < block1 { let (s0, s1) = self.data.split_at_mut(block1); (&mut s0[block0..], s1) } else { let (s1, s0) = self.data.split_at_mut(block0); (s0, &mut s1[block1..]) } } /// Reallocate a block to a different size class. /// /// Copy `elems_to_copy` elements from the old to the new block. fn realloc( &mut self, block: usize, from_sclass: SizeClass, to_sclass: SizeClass, elems_to_copy: usize, ) -> usize { debug_assert!(elems_to_copy <= sclass_size(from_sclass)); debug_assert!(elems_to_copy <= sclass_size(to_sclass)); let new_block = self.alloc(to_sclass); let (old, new) = self.mut_slices(block, new_block); new[0..elems_to_copy].copy_from_slice(&old[0..elems_to_copy]); self.free(block, from_sclass); new_block } } impl ListHandle { /// Get the number of elements in the list. #[allow(clippy::len_without_is_empty)] pub fn len(&self, pool: &ListPool) -> u32 { if self.generation == pool.generation { self.len } else { 0 } } /// Get the list as a slice. pub fn as_slice<'a>(&'a self, pool: &'a ListPool) -> &'a [u32] { let idx = self.index as usize; match self.len(pool) { 0 => &[], 1 => std::slice::from_ref(&self.index), len => &pool.data[idx..idx + len as usize], } } /// Appends an element to the back of the list. /// Returns the index where the element was inserted. pub fn push(&mut self, element: u32, pool: &mut ListPool) { let len = self.len(pool); match len { 0 => { self.generation = pool.generation; self.index = element; self.len = 1; } 1 => { // This is an empty list. Allocate a block and set length=1. let block = pool.alloc(0); pool.data[block] = self.index; pool.data[block + 1] = element; self.index = block as u32; self.len = 2; } 2..=MAX_CHAIN_LEN => { // Do we need to reallocate? let block; let idx = self.index as usize; if is_sclass_max_length(len) { // Reallocate, preserving length + all old elements. let sclass = sclass_for_length(len); block = pool.realloc(idx, sclass - 1, sclass, len as usize); self.index = block as u32; } else { block = idx; } pool.data[block + len as usize] = element; self.len += 1; } // ignore elements longer then MAX_CHAIN_LEN // these are rarely relevant and if they are we fall back to myers _ => (), } } } imara-diff-0.1.5/src/histogram.rs000064400000000000000000000104611046102023000147620ustar 00000000000000use std::ops::Range; use crate::histogram::lcs::find_lcs; use crate::histogram::list_pool::{ListHandle, ListPool}; use crate::intern::Token; use crate::util::{strip_common_postfix, strip_common_prefix}; use crate::{myers, Sink}; mod lcs; mod list_pool; const MAX_CHAIN_LEN: u32 = 63; struct Histogram { token_occurances: Vec, pool: ListPool, } pub fn diff( mut before: &[Token], mut after: &[Token], num_tokens: u32, mut sink: S, ) -> S::Out { let mut histogram = Histogram::new(num_tokens); let prefix = strip_common_prefix(&mut before, &mut after); strip_common_postfix(&mut before, &mut after); histogram.run(before, prefix, after, prefix, &mut sink); sink.finish() } impl Histogram { fn new(num_buckets: u32) -> Histogram { Histogram { token_occurances: vec![ListHandle::default(); num_buckets as usize], pool: ListPool::new(2 * num_buckets), } } fn clear(&mut self) { self.pool.clear(); } fn token_occurances(&self, token: Token) -> &[u32] { self.token_occurances[token.0 as usize].as_slice(&self.pool) } fn num_token_occurances(&self, token: Token) -> u32 { self.token_occurances[token.0 as usize].len(&self.pool) as u32 } fn populate(&mut self, file: &[Token]) { for (i, &token) in file.iter().enumerate() { self.token_occurances[token.0 as usize].push(i as u32, &mut self.pool); } } fn run( &mut self, mut before: &[Token], mut before_off: u32, mut after: &[Token], mut after_off: u32, sink: &mut impl Sink, ) { loop { if before.is_empty() { if !after.is_empty() { sink.process_change( before_off..before_off, after_off..after_off + after.len() as u32, ); } return; } else if after.is_empty() { sink.process_change( before_off..before_off + before.len() as u32, after_off..after_off, ); return; } self.populate(before); match find_lcs(before, after, self) { // no lcs was found, that means that file1 and file2 two have nothing in common Some(lcs) if lcs.len == 0 => { sink.process_change( before_off..before_off + before.len() as u32, after_off..after_off + after.len() as u32, ); return; } Some(lcs) => { self.run( &before[..lcs.before_start as usize], before_off, &after[..lcs.after_start as usize], after_off, sink, ); // this is equivalent to (tail) recursion but implement as a loop for efficeny reasons let before_end = lcs.before_start + lcs.len; before = &before[before_end as usize..]; before_off += before_end; let after_end = lcs.after_start + lcs.len; after = &after[after_end as usize..]; after_off += after_end; } None => { // we are diffing two extremly large repetitive file // this is a worst case for histogram diff with O(N^2) performance // fallback to myers to maintain linear time complxity myers::diff( before, after, 0, // not used by myers |mut before: Range, mut after: Range| { before.start += before_off; before.end += before_off; after.start += after_off; after.end += after_off; sink.process_change(before, after) }, false, ); return; } } } } } imara-diff-0.1.5/src/intern.rs000064400000000000000000000147441046102023000142740ustar 00000000000000use std::hash::Hash; use std::ops::Index; use ahash::RandomState; use hashbrown::raw::RawTable; /// A token represented as an interned integer. /// /// A token represents the smallest possible unit of change during a diff. /// For text this is usually a line, a word or a single character. /// All [algorithms](crate::Algorithm) operate on interned tokens instead /// of using the token data directly. /// This allows for much better performance by amortizing the cost hashing/equality. /// /// While you can intern tokens yourself it is strongly recommended to use [`InternedInput`](crate::intern::InternedInput) module. #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] #[repr(transparent)] pub struct Token(pub u32); impl From for Token { fn from(token: u32) -> Self { Token(token) } } impl From for u32 { fn from(token: Token) -> Self { token.0 } } pub trait TokenSource { type Token: Hash + Eq; type Tokenizer: Iterator; fn tokenize(&self) -> Self::Tokenizer; fn estimate_tokens(&self) -> u32; } /// Two lists of interned [tokens](crate::intern::Token) that can be compared with the [`diff`](crate::diff) function. /// /// A token represents the smallest possible unit of change during a diff. /// For text this is usually a line, a word or a single character. /// All [algorithms](crate::Algorithm) operate on interned tokens instead /// of using the token data directly. /// This allows for much better performance by amortizing the cost hashing/equality. /// /// While you can intern tokens yourself it is strongly recommended to use [`InternedInput`](crate::intern::InternedInput) module. #[derive(Default)] pub struct InternedInput { pub before: Vec, pub after: Vec, pub interner: Interner, } impl InternedInput { pub fn new>(before: I, after: I) -> Self { let token_estimate_before = before.estimate_tokens() as usize; let token_estimate_after = after.estimate_tokens() as usize; let mut res = Self { before: Vec::with_capacity(token_estimate_before), after: Vec::with_capacity(token_estimate_after), interner: Interner::new(token_estimate_before + token_estimate_after), }; res.update_before(before.tokenize()); res.update_after(after.tokenize()); res } /// replaces `self.before` wtih the iterned Tokens yielded by `input` /// Note that this does not erase any tokens from the interner and might therefore be considered /// a memory leak. If this function is called often over a long_running process /// consider clearing the interner with [`clear`](crate::intern::Interner::clear). pub fn update_before(&mut self, input: impl Iterator) { self.before.clear(); self.before.extend(input.map(|token| self.interner.intern(token))); } /// replaces `self.before` wtih the iterned Tokens yielded by `input` /// Note that this does not erase any tokens from the interner and might therefore be considered /// a memory leak. If this function is called often over a long_running process /// consider clearing the interner with [`clear`](crate::intern::Interner::clear) or /// [`erase_tokens_after`](crate::intern::Interner::erase_tokens_after). pub fn update_after(&mut self, input: impl Iterator) { self.after.clear(); self.after.extend(input.map(|token| self.interner.intern(token))); } pub fn clear(&mut self) { self.before.clear(); self.after.clear(); self.interner.clear(); } } /// A hastable based interner that allows #[derive(Default)] pub struct Interner { tokens: Vec, table: RawTable, hasher: RandomState, } impl Interner { /// Create an Interner with an intial capacity calculated by calling /// [`estimate_tokens`](crate::intern::TokenSource::estimate_tokens) methods of `before` and `after` pub fn new_for_token_source>(before: &S, after: &S) -> Self { Self::new(before.estimate_tokens() as usize + after.estimate_tokens() as usize) } /// Create an Interner with inital capacity `capacity`. pub fn new(capacity: usize) -> Interner { Interner { tokens: Vec::with_capacity(capacity), table: RawTable::with_capacity(capacity), hasher: RandomState::new(), } } /// Remove all interned tokens pub fn clear(&mut self) { self.table.clear_no_drop(); self.tokens.clear(); } /// Intern `token` and return a the interned integer pub fn intern(&mut self, token: T) -> Token { let hash = self.hasher.hash_one(&token); if let Some(&token) = self.table.get(hash, |&it| self.tokens[it.0 as usize] == token) { token } else { let interned = Token(self.tokens.len() as u32); self.table.insert(hash, interned, |&token| { self.hasher.hash_one(&self.tokens[token.0 as usize]) }); self.tokens.push(token); interned } } /// Returns to total number of **distinct** tokens currently interned. pub fn num_tokens(&self) -> u32 { self.tokens.len() as u32 } /// Erases `first_erased_token` and any tokens interned afterwards from the interner. pub fn erase_tokens_after(&mut self, first_erased_token: Token) { assert!(first_erased_token.0 <= self.tokens.len() as u32); let retained = first_erased_token.0 as usize; let erased = self.tokens.len() - retained; if retained <= erased { self.table.clear_no_drop(); // safety, we assert that retained is smaller then the table size so the table will never have to grow unsafe { for (i, token) in self.tokens[0..retained].iter().enumerate() { self.table.insert_no_grow(self.hasher.hash_one(token), Token(i as u32)); } } } else { for (i, token) in self.tokens[retained..].iter().enumerate() { self.table.erase_entry(self.hasher.hash_one(token), |token| token.0 == (retained + i) as u32); } } self.tokens.truncate(first_erased_token.0 as usize); } } impl Index for Interner { type Output = T; fn index(&self, index: Token) -> &Self::Output { &self.tokens[index.0 as usize] } } imara-diff-0.1.5/src/lib.rs000064400000000000000000000256321046102023000135410ustar 00000000000000//! Imara-diff is a solid (imara in swahili) diff library for rust. //! Solid refers to the fact that imara-diff provides very good runtime performance even //! in pathologic cases so that your application never appears to freeze while waiting on a diff. //! The performance improvements are achieved using battle tested heuristics used in gnu-diff and git //! that are known to yield fast runtime and performance. //! //! Imara-diff is also designed to be flexible so that it can be used with arbitrary collections and //! not just lists and strings and even allows reusing large parts of the computation when //! comparing the same file to multiple different files. //! //! Imara-diff provides two diff algorithms: //! //! * The linear-space variant of the well known [**myer** algorithm](http://www.xmailserver.org/diff2.pdf) //! * The **Histogram** algorithm which variant of the patience diff algorithm. //! //! Myers algorithm has been enhanced with preprocessing and multiple heuristics to ensure fast runtime in pathological //! cases to avoid quadratic time complexity and closely matches the behaviour of gnu-diff and git. //! The Histogram algorithm was originally ported from git but has been heavily optimized. //! The **Histogram algorithm outperforms Myers diff** by 10% - 100% across a **wide variety of workloads**. //! //! Imara-diffs algorithms have been benchmarked over a wide variety of real-world code. //! For example while comparing multiple different linux kernel it performs up to 30 times better than the `similar` crate: #![cfg_attr(doc, doc=concat!(""))] //! //! # Api Overview //! //! Imara-diff provides the [`UnifiedDiffBuilder`](crate::UnifiedDiffBuilder) for building //! a human-redable diff similar to the output of `git diff` or `diff -u`. //! This makes building a tool similar to gnu diff easy: //! //! ``` //! use imara_diff::intern::InternedInput; //! use imara_diff::{diff, Algorithm, UnifiedDiffBuilder}; //! //! let before = r#"fn foo() -> Bar { //! let mut foo = 2; //! foo *= 50; //! println!("hello world") //! }"#; //! //! let after = r#"// lorem ipsum //! fn foo() -> Bar { //! let mut foo = 2; //! foo *= 50; //! println!("hello world"); //! println!("{foo}"); //! } //! // foo //! "#; //! //! let input = InternedInput::new(before, after); //! let diff = diff(Algorithm::Histogram, &input, UnifiedDiffBuilder::new(&input)); //! assert_eq!( //! diff, //! r#"@@ -1,5 +1,8 @@ //! +// lorem ipsum //! fn foo() -> Bar { //! let mut foo = 2; //! foo *= 50; //! - println!("hello world") //! + println!("hello world"); //! + println!("{foo}"); //! } //! +// foo //! "# //! ); //! ``` //! //! If you want to process the diff in some way you can provide your own implementation of [`Sink`](crate::sink::Sink). //! For closures [`Sink`](crate::sink::Sink) is already implemented, so simple [`Sink`]s can be easily added: //! //! ``` //! use std::ops::Range; //! //! use imara_diff::intern::InternedInput; //! use imara_diff::{diff, Algorithm, UnifiedDiffBuilder}; //! //! let before = r#"fn foo() -> Bar { //! let mut foo = 2; //! foo *= 50; //! println!("hello world") //! }"#; //! //! let after = r#"// lorem ipsum //! fn foo() -> Bar { //! let mut foo = 2; //! foo *= 50; //! println!("hello world"); //! println!("{foo}"); //! } //! // foo //! "#; //! //! let mut insertions = Vec::new(); //! let mut removals = Vec::new(); //! let mut replacements = Vec::new(); //! //! let input = InternedInput::new(before, after); //! let sink = |before: Range, after: Range| { //! let hunk_before: Vec<_> = input.before[before.start as usize..before.end as usize] //! .iter() //! .map(|&line| input.interner[line]) //! .collect(); //! let hunk_after: Vec<_> = input.after[after.start as usize..after.end as usize] //! .iter() //! .map(|&line| input.interner[line]) //! .collect(); //! if hunk_after.is_empty() { //! removals.push(hunk_before) //! } else if hunk_before.is_empty() { //! insertions.push(hunk_after) //! } else { //! replacements.push((hunk_before, hunk_after)) //! } //! }; //! let diff = diff(Algorithm::Histogram, &input, sink); //! assert_eq!(&insertions, &[vec!["// lorem ipsum"], vec!["// foo"]]); //! assert!(removals.is_empty()); //! assert_eq!( //! &replacements, //! &[( //! vec![" println!(\"hello world\")"], //! vec![" println!(\"hello world\");", " println!(\"{foo}\");"] //! )] //! ); //! ``` //! //! For `&str` and `&[u8]` imara-diff will compute a line diff by default. //! To perform diffs of different tokenizations and collections you can implement the [`TokenSource`](crate::intern::TokenSource) trait. //! For example the imara-diff provides an alternative tokenziser for line-diffs that includes the line terminator in the line: //! //! ``` //! use imara_diff::intern::InternedInput; //! use imara_diff::sink::Counter; //! use imara_diff::sources::lines_with_terminator; //! use imara_diff::{diff, Algorithm, UnifiedDiffBuilder}; //! //! let before = "foo"; //! let after = "foo\n"; //! //! let input = InternedInput::new(before, after); //! let changes = diff(Algorithm::Histogram, &input, Counter::default()); //! assert_eq!(changes.insertions, 0); //! assert_eq!(changes.removals, 0); //! //! let input = InternedInput::new(lines_with_terminator(before), lines_with_terminator(after)); //! let changes = diff(Algorithm::Histogram, &input, Counter::default()); //! assert_eq!(changes.insertions, 1); //! assert_eq!(changes.removals, 1); //! ``` use std::hash::Hash; #[cfg(feature = "unified_diff")] pub use unified_diff::UnifiedDiffBuilder; use crate::intern::{InternedInput, Token, TokenSource}; pub use crate::sink::Sink; mod histogram; pub mod intern; mod myers; pub mod sink; pub mod sources; #[cfg(feature = "unified_diff")] mod unified_diff; mod util; #[cfg(test)] mod tests; /// `imara-diff` supports multiple different algorithms /// for computing an edit sequence. /// These algorithms have different performance and all produce different output. #[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum Algorithm { /// A variation of the [`patience` diff algorithm described by Bram Cohen's blog post](https://bramcohen.livejournal.com/73318.html) /// that uses a histogram to find the least common LCS. /// Just like the `patience` diff algorithm, this algorithm usually produces /// more human readable output then myers algorithm. /// However compared to the `patience` diff algorithm (which is slower then myers algorithm), /// the Histogram algorithm performs much better. /// /// The implementation here was originally ported from `git` but has been significantly /// modified to improve performance. /// As a result it consistently **performs better then myers algorithm** (5%-100%) over /// a wide variety of test data. For example a benchmark of diffing linux kernel commits is shown below: #[cfg_attr(doc, doc=concat!(""))] /// /// For pathological subsequences that only contain highly repeating tokens (64+ occurrences) /// the algorithm falls back on Myers algorithm (with heuristics) to avoid quadratic behavior. /// /// Compared to Myers algorithm, the Histogram diff algorithm is more focused on providing /// human readable diffs instead of minimal diffs. In practice this means that the edit-sequences /// produced by the histogram diff are often longer then those produced by Myers algorithm. /// /// The heuristic used by the histogram diff does not work well for inputs with small (often repeated) /// tokens. For example **character diffs do not work well** as most (english) text is madeup of /// a fairly small set of characters. The `Histogram` algorithm will automatically these cases and /// fallback to Myers algorithm. However this detection has a nontrivial overhead, so /// if its known upfront that the sort of tokens is very small `Myers` algorithm should /// be used instead. Histogram, /// An implementation of the linear space variant of /// [Myers `O((N+M)D)` algorithm](http://www.xmailserver.org/diff2.pdf). /// The algorithm is enhanced with preprocessing that removes /// tokens that don't occur in the other file at all. /// Furthermore two heuristics to the middle snake search are implemented /// that ensure reasonable runtime (mostly linear time complexity) even for large files. /// /// Due to the divide and conquer nature of the algorithm /// the edit sequenced produced are still fairly small even when the middle snake /// search is aborted by a heuristic. /// However, the produced edit sequences are not guaranteed to be fully minimal. /// If that property is vital to you, use the `MyersMinimal` algorithm instead. /// /// The implementation (including the preprocessing) are mostly /// ported from `git` and `gnu-diff` where Myers algorithm is used /// as the default diff algorithm. /// Therefore the used heuristics have been heavily battle tested and /// are known to behave well over a large variety of inputs Myers, /// Same as `Myers` but the early abort heuristics are disabled to guarantee /// a minimal edit sequence. /// This can mean significant slowdown in pathological cases. MyersMinimal, } impl Algorithm { #[cfg(test)] const ALL: [Self; 2] = [Algorithm::Histogram, Algorithm::Myers]; } impl Default for Algorithm { fn default() -> Self { Algorithm::Histogram } } /// Computes an edit-script that transforms `input.before` into `input.after` using /// the specified `algorithm` /// The edit-script is passed to `sink.process_change` while it is produced. pub fn diff( algorithm: Algorithm, input: &InternedInput, sink: S, ) -> S::Out { diff_with_tokens(algorithm, &input.before, &input.after, input.interner.num_tokens(), sink) } /// Computes an edit-script that transforms `before` into `after` using /// the specified `algorithm` /// The edit-script is passed to `sink.process_change` while it is produced. pub fn diff_with_tokens( algorithm: Algorithm, before: &[Token], after: &[Token], num_tokens: u32, sink: S, ) -> S::Out { assert!(before.len() < i32::MAX as usize, "imara-diff only supports up to {} tokens", i32::MAX); assert!(after.len() < i32::MAX as usize, "imara-diff only supports up to {} tokens", i32::MAX); match algorithm { Algorithm::Histogram => histogram::diff(before, after, num_tokens, sink), Algorithm::Myers => myers::diff(before, after, num_tokens, sink, false), Algorithm::MyersMinimal => myers::diff(before, after, num_tokens, sink, true), } } imara-diff-0.1.5/src/myers/middle_snake.rs000064400000000000000000000205031046102023000165410ustar 00000000000000use std::ptr::NonNull; use crate::myers::slice::FileSlice; use crate::util::{common_postfix, common_prefix}; const SNAKE_CNT: u32 = 20; const K_HEUR: u32 = 4; pub struct MiddleSnakeSearch { kvec: NonNull, kmin: i32, kmax: i32, dmin: i32, dmax: i32, } impl MiddleSnakeSearch { /// # Safety /// `data` must be valid for reads between `-file1.len()` and `file2.len()` pub unsafe fn new(data: NonNull, file1: &FileSlice, file2: &FileSlice) -> Self { let dmin = -(file2.len() as i32); let dmax = file1.len() as i32; let kmid = if BACK { dmin + dmax } else { 0 }; let mut res = Self { kvec: data, kmin: kmid, kmax: kmid, dmin, dmax }; let init = if BACK { file1.len() as i32 } else { 0 }; res.write_xpos_at_diagonal(kmid, init); res } pub fn contains(&self, k: i32) -> bool { (self.kmin..=self.kmax).contains(&k) } pub fn bounds_check(&self, k: i32) { debug_assert!((self.dmin - 1..=self.dmax + 1).contains(&k)); } fn write_xpos_at_diagonal(&mut self, k: i32, token_idx1: i32) { self.bounds_check(k); unsafe { self.kvec.as_ptr().offset(k as isize).write(token_idx1) } } pub fn x_pos_at_diagonal(&self, diagonal: i32) -> i32 { self.bounds_check(diagonal); unsafe { self.kvec.as_ptr().offset(diagonal as isize).read() } } pub fn pos_at_diagonal(&self, diagonal: i32) -> (i32, i32) { self.bounds_check(diagonal); let token_idx1 = unsafe { self.kvec.as_ptr().offset(diagonal as isize).read() }; let token_idx2 = (token_idx1 as i32 - diagonal) as i32; (token_idx1, token_idx2) } /// We need to extend the diagonal "domain" by one. If the next /// values exits the box boundaries we need to change it in the /// opposite direction because (max - min) must be a power of /// two. /// /// Also we initialize the external K value to -1 so that we can /// avoid extra conditions in the check inside the core loop. pub fn next_d(&mut self) { let init_val = if BACK { // value should always be larger then bounds i32::MAX } else { // value should always be smaller then bounds i32::MIN }; if self.kmin > self.dmin { self.kmin -= 1; self.write_xpos_at_diagonal(self.kmin - 1, init_val); } else { self.kmin += 1; } if self.kmax < self.dmax { self.kmax += 1; self.write_xpos_at_diagonal(self.kmax + 1, init_val); } else { self.kmax -= 1; } } pub fn run( &mut self, file1: &FileSlice, file2: &FileSlice, mut f: impl FnMut(i32, i32) -> bool, ) -> Option { let mut res = None; let mut k = self.kmax; while k >= self.kmin { let mut token_idx1 = if BACK { if self.x_pos_at_diagonal(k - 1) < self.x_pos_at_diagonal(k + 1) { self.x_pos_at_diagonal(k - 1) } else { self.x_pos_at_diagonal(k + 1) - 1 } } else if self.x_pos_at_diagonal(k - 1) >= self.x_pos_at_diagonal(k + 1) { self.x_pos_at_diagonal(k - 1) + 1 } else { self.x_pos_at_diagonal(k + 1) }; let mut token_idx2 = (token_idx1 as i32 - k) as i32; let off = if BACK { if token_idx1 > 0 && token_idx2 > 0 { let tokens1 = &file1.tokens[..token_idx1 as usize]; let tokens2 = &file2.tokens[..token_idx2 as usize]; common_postfix(tokens1, tokens2) } else { 0 } } else if token_idx1 < file1.len() as i32 && token_idx2 < file2.len() as i32 { let tokens1 = &file1.tokens[token_idx1 as usize..]; let tokens2 = &file2.tokens[token_idx2 as usize..]; common_prefix(tokens1, tokens2) } else { 0 }; if off > SNAKE_CNT { res = Some(SearchResult::Snake) } if BACK { token_idx1 -= off as i32; token_idx2 -= off as i32; } else { token_idx1 += off as i32; token_idx2 += off as i32; } self.write_xpos_at_diagonal(k, token_idx1); if f(k, token_idx1) { return Some(SearchResult::Found { token_idx1, token_idx2 }); } k -= 2; } res } pub fn best_position(&self, file1: &FileSlice, file2: &FileSlice) -> (isize, i32) { let mut best_distance: isize = if BACK { isize::MAX } else { -1 }; let mut best_token_idx1 = if BACK { i32::MAX } else { -1 }; let mut k = self.kmax; while k >= self.kmin { let mut token_idx1 = self.x_pos_at_diagonal(k); if BACK { token_idx1 = token_idx1.max(0); } else { token_idx1 = token_idx1.min(file1.len() as i32); } let mut token_idx2 = token_idx1 - k; if BACK { if token_idx2 < 0 { token_idx1 = k; token_idx2 = 0; } } else if token_idx2 > file2.len() as i32 { token_idx1 = file2.len() as i32 + k; token_idx2 = file2.len() as i32; } let distance = token_idx1 as isize + token_idx2 as isize; if BACK && distance < best_distance || !BACK && distance > best_distance { best_distance = distance; best_token_idx1 = token_idx1; } k -= 2; } (best_distance, best_token_idx1) } pub fn found_snake(&self, ec: u32, file1: &FileSlice, file2: &FileSlice) -> Option<(i32, i32)> { let mut best_score = 0; let mut best_token_idx1 = 0; let mut best_token_idx2 = 0; let mut k = self.kmax; while k >= self.kmin { let (token_idx1, token_idx2) = self.pos_at_diagonal(k); if BACK { if !(0..file1.len() as i32 - SNAKE_CNT as i32).contains(&token_idx1) { k -= 2; continue; } if !(0..file2.len() as i32 - SNAKE_CNT as i32).contains(&token_idx2) { k -= 2; continue; } } else { if !(SNAKE_CNT as i32..file1.len() as i32).contains(&token_idx1) { k -= 2; continue; } if !(SNAKE_CNT as i32..file2.len() as i32).contains(&token_idx2) { k -= 2; continue; } } let main_diagonal_distance = k.unsigned_abs() as usize; let distance = if BACK { (file1.len() - token_idx1 as u32) + (file2.len() - token_idx2 as u32) } else { token_idx1 as u32 + token_idx2 as u32 }; let score = distance as usize + main_diagonal_distance; if score > (K_HEUR * ec) as usize && score > best_score { let is_snake = if BACK { file1.tokens[token_idx1 as usize..] .iter() .zip(&file2.tokens[token_idx2 as usize..]) .take(SNAKE_CNT as usize) .all(|(token1, token2)| token1 == token2) } else { file1.tokens[..token_idx1 as usize] .iter() .zip(&file2.tokens[..token_idx2 as usize]) .rev() .take(SNAKE_CNT as usize) .all(|(token1, token2)| token1 == token2) }; if is_snake { best_token_idx1 = token_idx1; best_token_idx2 = token_idx2; best_score = score } } k -= 2; } (best_score > 0).then(|| (best_token_idx1, best_token_idx2)) } } pub enum SearchResult { Snake, Found { token_idx1: i32, token_idx2: i32 }, } imara-diff-0.1.5/src/myers/preprocess.rs000064400000000000000000000120161046102023000163070ustar 00000000000000use crate::intern::Token; use crate::myers::sqrt; use crate::util::{strip_common_postfix, strip_common_prefix}; pub fn preprocess( mut file1: &[Token], mut file2: &[Token], ) -> (PreprocessedFile, PreprocessedFile) { let common_prefix = strip_common_prefix(&mut file1, &mut file2); strip_common_postfix(&mut file1, &mut file2); let (hdiff1, hdiff2) = token_occurrences(file1, file2); let file1 = PreprocessedFile::new(common_prefix, &hdiff1, file1); let file2 = PreprocessedFile::new(common_prefix, &hdiff2, file2); (file1, file2) } /// computes how fn token_occurrences(file1: &[Token], file2: &[Token]) -> (Vec, Vec) { const MAX_EQLIMIT: u32 = 1024; // compute the limit after which tokens are treated as `Occurances::COMMON` let eqlimit1 = sqrt(file1.len()).min(MAX_EQLIMIT); let eqlimit2 = sqrt(file2.len()).min(MAX_EQLIMIT); // first collect how often each token occurs in a file let mut occurances1 = Vec::new(); for token in file1 { let bucket = token.0 as usize; if bucket >= occurances1.len() { occurances1.resize(bucket + 1, 0u32); } occurances1[bucket] += 1; } // do the same thing for let mut occurances2 = Vec::new(); let token_occurances2: Vec<_> = file2 .iter() .map(|token| { let bucket = token.0 as usize; if bucket >= occurances2.len() { occurances2.resize(bucket + 1, 0); } occurances2[bucket] += 1; let occurances1 = *occurances1.get(bucket).unwrap_or(&0); Occurances::from_occurances(occurances1, eqlimit2) }) .collect(); let token_occurances1: Vec<_> = file1 .iter() .map(|token| { let bucket = token.0 as usize; let occurances2 = *occurances2.get(bucket).unwrap_or(&0); Occurances::from_occurances(occurances2, eqlimit1) }) .collect(); (token_occurances1, token_occurances2) } #[derive(Clone, Copy, Debug)] enum Occurances { /// Token does not occur in this file None, /// Token occurs at least once Some, /// Token occurs very frequently (exact number depends on file size). /// Such a tokens are usually empty lines or braces and are often not meaningful to a diff Common, } impl Occurances { pub fn from_occurances(occurances: u32, eqlimit: u32) -> Occurances { if occurances == 0 { Occurances::None } else if occurances >= eqlimit { Occurances::Common } else { Occurances::Some } } } #[derive(Debug)] pub struct PreprocessedFile { pub offset: u32, pub is_changed: Vec, pub indices: Vec, pub tokens: Vec, } impl PreprocessedFile { fn new(offset: u32, token_diff: &[Occurances], tokens: &[Token]) -> PreprocessedFile { let mut changed = vec![false; tokens.len()]; let (tokens, indices) = prune_unmatched_tokens(tokens, token_diff, &mut changed); PreprocessedFile { offset, is_changed: changed, indices, tokens } } } fn prune_unmatched_tokens( file: &[Token], token_status: &[Occurances], changed: &mut [bool], ) -> (Vec, Vec) { assert_eq!(token_status.len(), file.len()); file.iter() .zip(token_status) .enumerate() .filter_map(|(i, (&token, &status))| { let prune = match status { Occurances::None => true, Occurances::Some => false, Occurances::Common => should_prune_common_line(token_status, i), }; if prune { changed[i] = true; None } else { Some((token, i as u32)) } }) .unzip() } // TODO do not unnecessarily rescan lines fn should_prune_common_line(token_status: &[Occurances], pos: usize) -> bool { const WINDOW_SIZE: usize = 100; let mut unmatched_before = 0; let mut common_before = 0; let start = if pos > WINDOW_SIZE { WINDOW_SIZE } else { 0 }; for status in token_status[start..pos].iter().rev() { match status { Occurances::None => { unmatched_before += 1; } Occurances::Common => { common_before += 1; } Occurances::Some => break, } } if unmatched_before == 0 { return false; } let end = token_status.len().min(pos + WINDOW_SIZE); let mut unmatched_after = 0; let mut common_after = 0; for status in token_status[pos..end].iter() { match status { Occurances::None => { unmatched_after += 1; } Occurances::Common => { common_after += 1; } Occurances::Some => break, } } if unmatched_after == 0 { return false; } let common = common_before + common_after; let unmatched = unmatched_before + unmatched_after; unmatched > 3 * common } imara-diff-0.1.5/src/myers/slice.rs000064400000000000000000000035721046102023000152300ustar 00000000000000use std::mem::take; use std::ops::RangeBounds; use crate::intern::Token; use crate::myers::preprocess::PreprocessedFile; use crate::util::common_edges; #[derive(Default)] pub struct FileSlice<'a> { pub tokens: &'a [Token], indices: &'a [u32], changed: &'a mut [bool], } impl<'a> FileSlice<'a> { pub fn new(file: &'a mut PreprocessedFile) -> Self { Self { tokens: &file.tokens, indices: &file.indices, changed: &mut file.is_changed } } pub fn mark_changed(&mut self) { for &i in self.indices { self.changed[i as usize] = true; } } pub fn borrow(&mut self) -> FileSlice { FileSlice { tokens: self.tokens, changed: self.changed, indices: self.indices } } pub fn slice>(self, range: R) -> Self { let start = match range.start_bound() { std::ops::Bound::Included(&start) => start, std::ops::Bound::Excluded(&start) => start + 1, std::ops::Bound::Unbounded => 0, }; let end = match range.end_bound() { std::ops::Bound::Included(&end) => end + 1, std::ops::Bound::Excluded(&end) => end, std::ops::Bound::Unbounded => self.len(), }; Self { tokens: &self.tokens[start as usize..end as usize], changed: self.changed, indices: &self.indices[start as usize..end as usize], } } pub fn strip_common(&mut self, other: &mut Self) { let (start, common_postfix) = common_edges(self.tokens, other.tokens); let end = self.len() - common_postfix; *self = take(self).slice(start..end); let end = other.len() - common_postfix; *other = take(other).slice(start..end) } pub fn len(&self) -> u32 { self.tokens.len() as u32 } pub fn is_empty(&self) -> bool { self.tokens.is_empty() } } imara-diff-0.1.5/src/myers.rs000064400000000000000000000230311046102023000141210ustar 00000000000000use std::ptr::NonNull; use crate::intern::Token; use crate::myers::middle_snake::{MiddleSnakeSearch, SearchResult}; use crate::myers::preprocess::PreprocessedFile; use crate::myers::slice::FileSlice; use crate::util::sqrt; use crate::Sink; mod middle_snake; mod preprocess; mod slice; pub struct Myers { kvec: NonNull<[i32]>, kforward: NonNull, kbackward: NonNull, max_cost: u32, } pub fn diff( before: &[Token], after: &[Token], _num_tokens: u32, mut sink: S, minimal: bool, ) -> S::Out { // preprocess the files by removing parts of the file that are not contained in the other file at all // this process remaps the token indices and therefore requires us to track changed files in a char array // PERF use a bitset? let (mut before, mut after) = preprocess::preprocess(before, after); // Perform the actual diff Myers::new(before.tokens.len(), after.tokens.len()).run( FileSlice::new(&mut before), FileSlice::new(&mut after), minimal, ); process_changes_with_sink(&before, &after, &mut sink); sink.finish() } const HEUR_MIN_COST: u32 = 256; const MAX_COST_MIN: u32 = 256; impl Drop for Myers { fn drop(&mut self) { unsafe { drop(Box::from_raw(self.kvec.as_ptr())) } } } impl Myers { fn new(len1: usize, len2: usize) -> Self { let ndiags = len1 + len2 as usize + 3; let kvec = Box::leak(vec![0; 2 * ndiags + 2].into_boxed_slice()); let kforward = NonNull::from(&mut kvec[len2 + 1]); let kbackward = NonNull::from(&mut kvec[ndiags + len2 + 1]); Self { kvec: kvec.into(), kforward, kbackward, max_cost: sqrt(ndiags).max(MAX_COST_MIN) } } fn run<'f>(&mut self, mut file1: FileSlice<'f>, mut file2: FileSlice<'f>, mut need_min: bool) { loop { file1.strip_common(&mut file2); if file1.is_empty() { file2.mark_changed(); return; } else if file2.is_empty() { file1.mark_changed(); return; } let split = self.split(&file1, &file2, need_min); self.run( file1.borrow().slice(..split.token_idx1 as u32), file2.borrow().slice(..split.token_idx2 as u32), split.minimized_lo, ); file1 = file1.slice(split.token_idx1 as u32..); file2 = file2.slice(split.token_idx2 as u32..); need_min = split.minimized_hi } } /// See "An O(ND) Difference Algorithm and its Variations", by Eugene Myers. /// Basically considers a "box" (off1, off2, lim1, lim2) and scan from both /// the forward diagonal starting from (off1, off2) and the backward diagonal /// starting from (lim1, lim2). If the K values on the same diagonal crosses /// returns the furthest point of reach. We might encounter expensive edge cases /// using this algorithm, so a little bit of heuristic is needed to cut the /// search and to return a suboptimal point. fn split(&mut self, file1: &FileSlice, file2: &FileSlice, need_min: bool) -> Split { let mut forward_search = unsafe { MiddleSnakeSearch::::new(self.kforward, file1, file2) }; let mut backwards_search = unsafe { MiddleSnakeSearch::::new(self.kbackward, file1, file2) }; let is_odd = (file2.len() - file2.len()) & 1 != 0; let mut ec = 0; while ec <= self.max_cost { let mut found_snake = false; forward_search.next_d(); if is_odd { if let Some(res) = forward_search.run(file1, file2, |k, token_idx1| { backwards_search.contains(k) && backwards_search.x_pos_at_diagonal(k) <= token_idx1 }) { match res { SearchResult::Snake => found_snake = true, SearchResult::Found { token_idx1, token_idx2 } => { return Split { token_idx1, token_idx2, minimized_lo: true, minimized_hi: true, }; } } } } else { found_snake |= forward_search.run(file1, file2, |_, _| false).is_some() }; backwards_search.next_d(); if !is_odd { if let Some(res) = backwards_search.run(file1, file2, |k, token_idx1| { forward_search.contains(k) && token_idx1 <= forward_search.x_pos_at_diagonal(k) }) { match res { SearchResult::Snake => found_snake = true, SearchResult::Found { token_idx1, token_idx2 } => { return Split { token_idx1, token_idx2, minimized_lo: true, minimized_hi: true, }; } } } } else { found_snake |= backwards_search.run(file1, file2, |_, _| false).is_some() }; if need_min { continue; } // If the edit cost is above the heuristic trigger and if // we got a good snake, we sample current diagonals to see // if some of them have reached an "interesting" path. Our // measure is a function of the distance from the diagonal // corner (i1 + i2) penalized with the distance from the // mid diagonal itself. If this value is above the current // edit cost times a magic factor (XDL_K_HEUR) we consider // it interesting. if found_snake && ec > HEUR_MIN_COST { if let Some((token_idx1, token_idx2)) = forward_search.found_snake(ec, file1, file2) { return Split { token_idx1, token_idx2, minimized_lo: true, minimized_hi: false, }; } if let Some((token_idx1, token_idx2)) = backwards_search.found_snake(ec, file1, file2) { return Split { token_idx1, token_idx2, minimized_lo: false, minimized_hi: true, }; } } ec += 1; } let (distance_forward, token_idx1_forward) = forward_search.best_position(file1, file2); let (distance_backwards, token_idx1_backwards) = backwards_search.best_position(file1, file2); if distance_forward > file1.len() as isize + file2.len() as isize - distance_backwards { Split { token_idx1: token_idx1_forward, token_idx2: (distance_forward - token_idx1_forward as isize) as i32, minimized_lo: true, minimized_hi: false, } } else { Split { token_idx1: token_idx1_backwards, token_idx2: (distance_backwards - token_idx1_backwards as isize) as i32, minimized_lo: false, minimized_hi: true, } } } } #[derive(Debug)] struct Split { token_idx1: i32, token_idx2: i32, minimized_lo: bool, minimized_hi: bool, } /// the mapping performed during preprocessing makes it impossible to directly call /// the `sink` during the diff itself. Instead `file.changed` is set to true for all /// tokens that are changed /// below these arrays are used to call the sink function fn process_changes_with_sink( before: &PreprocessedFile, after: &PreprocessedFile, sink: &mut impl Sink, ) { let before_end = before.is_changed.len() as u32 + before.offset; let after_end = after.is_changed.len() as u32 + after.offset; let mut before = before .is_changed .iter() .enumerate() .map(|(i, removed)| (i as u32 + before.offset, *removed)); let mut after = after .is_changed .iter() .enumerate() .map(|(i, inserted)| (i as u32 + after.offset, *inserted)); let mut next1 = before.next(); let mut next2 = after.next(); while let (Some((before_pos, removed)), Some((after_pos, inserted))) = (next1, next2) { if !(removed | inserted) { next1 = before.next(); next2 = after.next(); continue; } let mut hunk_before = before_pos..before_pos; let mut hunk_after = after_pos..after_pos; if removed { let end = before.find(|(_, changed)| !changed); next1 = end.map(|(end, _)| (end, false)); hunk_before.end = end.map_or(before_end, |(end, _)| end); }; if inserted { let end = after.find(|(_, changed)| !changed); next2 = end.map(|(end, _)| (end, false)); hunk_after.end = end.map_or(after_end, |(end, _)| end); } sink.process_change(hunk_before, hunk_after); } if let Some((before_pos, _)) = next1 { sink.process_change(before_pos..before_end, after_end..after_end); } else if let Some((after_pos, _)) = next2 { sink.process_change(before_end..before_end, after_pos..after_end); } } imara-diff-0.1.5/src/sink.rs000064400000000000000000000103631046102023000137320ustar 00000000000000use std::ops::Range; /// Trait for processing the edit-scripts computed with [`diff`](crate::diff) pub trait Sink: Sized { type Out; /// This method is called whenever a diff [`algorithm`](crate::Algorithm) /// finds a change between the two processed input file. /// A change is a continous subsequence of [tokens](crate::intern::Token) `before` that needs /// to be replaced by a different contious subsequence of tokens `after` to construct the seconds file from the first. /// /// These token subsequences are passed to this function in in ** strictly montonically increasing order**. /// That means that for two subsequenct calls `process_change(before1, after1)` and `process_change(before2, after2)` /// the following always holds: /// /// ``` no_compile /// assert!(before1.end < before2.start); /// assert!(after1.end < after2.start); /// ``` /// /// # Paramters /// - **`before`** - the **position** of the removed token subsequence in the orignal file. /// - **`after`** - the **position** of the inserted token subsequence in the destination file. /// /// # Notes //// /// A `Sink` has no function to indicate that a section of a file remains unchanged. /// However due to the montonically increasing calls, implementations can easily determine /// which subsequences remain unchanged by saving `before.end`/`after.end`. /// The range between `before.start`/`after.end` and the previous `before.end`/`after.end` /// is always unchanged. fn process_change(&mut self, before: Range, after: Range); /// This function is called after all calls to `process_change` are complete /// to obtain the final diff result fn finish(self) -> Self::Out; /// Utility method that constructs a [`Counter`](crate::sink::Counter) that tracks the total number /// of inserted and removed tokens in the changes passed to [`process_change`](crate::Sink::process_change). fn with_counter(self) -> Counter { Counter::new(self) } } impl, Range)> Sink for T { type Out = (); fn process_change(&mut self, before: Range, after: Range) { self(before, after) } fn finish(self) -> Self::Out {} } impl Sink for () { type Out = (); fn process_change(&mut self, _before: Range, _after: Range) {} fn finish(self) -> Self::Out {} } /// A [`Sink`](crate::Sink) which wraps a different sink /// and counts the number of `removed` and `inserted` [tokens](crate::intern::Token). pub struct Counter { /// Total number of recorded inserted [`tokens`](crate::intern::Token). /// Computed by summing the lengths of the `after` subsequences pass to [`process_change`](crate::Sink::process_change). pub removals: u32, /// Total number of recorded inserted [`tokens`](crate::intern::Token). /// Computed by summing the lengths of the `after` subsequences pass to [`process_change`](crate::Sink::process_change). pub insertions: u32, /// The [`Sink`](crate::Sink) for which the counter records [`tokens`](crate::intern::Token). /// All calls to [`process_change`](crate::Sink::process_change) are forwarded to the `sink` by the counter. /// After [`finish`](crate::Sink::finish) is called, this field contains the output returned by the [`finish`](crate::Sink::finish) /// method of the wrapped [`Sink`](crate::Sink) pub wrapped: T, } impl Counter { pub fn new(sink: S) -> Self { Self { insertions: 0, removals: 0, wrapped: sink } } } impl Sink for Counter { type Out = Counter; fn process_change(&mut self, before: Range, after: Range) { self.removals += before.end - before.start; self.insertions += after.end - after.start; self.wrapped.process_change(before, after) } fn finish(self) -> Self::Out { Counter { removals: self.removals, insertions: self.insertions, wrapped: self.wrapped.finish(), } } } impl Counter { pub fn total(&self) -> usize { self.insertions as usize + self.removals as usize } } impl Default for Counter<()> { fn default() -> Self { Counter::new(()) } } imara-diff-0.1.5/src/sources.rs000064400000000000000000000123071046102023000144510ustar 00000000000000use std::mem::take; use std::str::from_utf8_unchecked; use crate::TokenSource; /// Returns a [`TokenSource`](crate::intern::TokenSource) that uses /// the lines in `data` as Tokens. The newline seperator (`\r\n` or `\n`) is /// not included in the emitted tokens. /// This means that changing the newline seperator from `\r\n` to `\n` /// (or omitting it fully on the last line) is not detected by [`diff`](crate::diff). pub fn lines(data: &str) -> Lines<'_, false> { Lines(ByteLines(data.as_bytes())) } /// Returns a [`TokenSource`](crate::intern::TokenSource) that uses /// the lines in `data` as Tokens. The newline seperator (`\r\n` or `\n`) is /// included in the emitted tokens. /// This means that changing the newline seperator from `\r\n` to `\n` /// (or omitting it fully on the last line) is detected by [`diff`](crate::diff). pub fn lines_with_terminator(data: &str) -> Lines<'_, true> { Lines(ByteLines(data.as_bytes())) } /// Returns a [`TokenSource`](crate::intern::TokenSource) that uses /// the lines in `data` as Tokens. A lines is a continous subslice of /// `data` which does not contain `\n` (or `\r\n`). /// The newline seperator (`\r\n` or `\n`) is not included in the emitted tokens. /// This means that changing the newline seperator from `\r\n` to `\n` /// (or omitting it fully on the last line) is not detected by [`diff`](crate::diff). pub fn byte_lines_with_terminator(data: &[u8]) -> ByteLines<'_, true> { ByteLines(data) } /// Returns a [`TokenSource`](crate::intern::TokenSource) that uses /// the lines in `data` as Tokens. The newline seperator (`\r\n` or `\n`) is /// included in the emitted tokens. /// This means that changing the newline seperator from `\r\n` to `\n` /// (or omitting it fully on the last line) is detected by [`diff`](crate::diff). pub fn byte_lines(data: &[u8]) -> ByteLines<'_, false> { ByteLines(data) } /// By default a line diff is produced for a string impl<'a> TokenSource for &'a str { type Token = &'a str; type Tokenizer = Lines<'a, false>; fn tokenize(&self) -> Self::Tokenizer { lines(self) } fn estimate_tokens(&self) -> u32 { lines_with_terminator(self).estimate_tokens() } } /// By default a line diff is produced for a bytes impl<'a> TokenSource for &'a [u8] { type Token = Self; type Tokenizer = ByteLines<'a, false>; fn tokenize(&self) -> Self::Tokenizer { byte_lines(self) } fn estimate_tokens(&self) -> u32 { byte_lines(self).estimate_tokens() } } /// A [`TokenSource`](crate::intern::TokenSource) that returns the lines of a `str` as tokens. /// See [`lines`](crate::sources::lines) and [`lines_with_terminator`](crate::sources::lines_with_terminator) for details #[derive(Clone, Copy, PartialEq, Eq)] pub struct Lines<'a, const INCLUDE_LINE_TERMINATOR: bool>(ByteLines<'a, INCLUDE_LINE_TERMINATOR>); impl<'a, const INCLUDE_LINE_TERMINATOR: bool> Iterator for Lines<'a, INCLUDE_LINE_TERMINATOR> { type Item = &'a str; fn next(&mut self) -> Option { // safety invariant: this struct may only contain valid utf8 // dividing valid utf8 bytes by ascii characters always produces valid utf-8 self.0.next().map(|it| unsafe { from_utf8_unchecked(it) }) } } /// By default a line diff is produced for a string impl<'a, const INCLUDE_LINE_TERMINATOR: bool> TokenSource for Lines<'a, INCLUDE_LINE_TERMINATOR> { type Token = &'a str; type Tokenizer = Self; fn tokenize(&self) -> Self::Tokenizer { *self } fn estimate_tokens(&self) -> u32 { self.0.estimate_tokens() } } /// A [`TokenSource`](crate::intern::TokenSource) that returns the lines of a byte slice as tokens. /// See [`byte_lines`](crate::sources::lines) and [`byte_lines_with_terminator`](crate::sources::byte_lines_with_terminator) for details #[derive(Clone, Copy, PartialEq, Eq)] pub struct ByteLines<'a, const INCLUDE_LINE_TERMINATOR: bool>(&'a [u8]); impl<'a, const INCLUDE_LINE_TERMINATOR: bool> Iterator for ByteLines<'a, INCLUDE_LINE_TERMINATOR> { type Item = &'a [u8]; fn next(&mut self) -> Option { let mut saw_carriage_return = false; let mut iter = self.0.iter().enumerate(); let line_len = loop { match iter.next() { Some((i, b'\n')) => break i + 1, None => { return (!self.0.is_empty()).then(|| take(&mut self.0)); } Some((_, &it)) => saw_carriage_return = it == b'\r', } }; let (mut line, rem) = self.0.split_at(line_len); self.0 = rem; if !INCLUDE_LINE_TERMINATOR { line = &line[..line_len - 1 - saw_carriage_return as usize]; } Some(line) } } /// By default a line diff is produced for a string impl<'a, const INCLUDE_LINE_TERMINATOR: bool> TokenSource for ByteLines<'a, INCLUDE_LINE_TERMINATOR> { type Token = &'a [u8]; type Tokenizer = Self; fn tokenize(&self) -> Self::Tokenizer { *self } fn estimate_tokens(&self) -> u32 { let len: usize = self.take(20).map(|line| line.len()).sum(); if len == 0 { 100 } else { (self.0.len() * 20 / len) as u32 } } } imara-diff-0.1.5/src/tests.rs000064400000000000000000000104731046102023000141320ustar 00000000000000use std::fs::read_to_string; use std::mem::swap; use std::path::PathBuf; use expect_test::{expect, expect_file}; use crate::intern::InternedInput; use crate::sink::Counter; use crate::{diff, Algorithm, UnifiedDiffBuilder}; #[test] fn replace() { let before = r#"fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; println!("hello world") }"#; let after = r#"const TEST: i32 = 0; fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; println!("hello world"); println!("hello foo {TEST}"); } "#; let input = InternedInput::new(before, after); for algorithm in Algorithm::ALL { println!("{algorithm:?}"); let diff = diff(algorithm, &input, UnifiedDiffBuilder::new(&input)); expect![[r#" @@ -1,5 +1,8 @@ +const TEST: i32 = 0; fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; - println!("hello world") + println!("hello world"); + println!("hello foo {TEST}"); } + "#]] .assert_eq(&diff); } } #[test] fn identical_files() { let file = r#"fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; }"#; for algorithm in Algorithm::ALL { println!("{algorithm:?}"); let input = InternedInput::new(file, file); let diff = diff(algorithm, &input, UnifiedDiffBuilder::new(&input)); assert_eq!(diff, ""); } } #[test] fn simple_insert() { let before = r#"fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; }"#; let after = r#"fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; println("hello world") }"#; let mut input = InternedInput::new(before, after); for algorithm in Algorithm::ALL { println!("{algorithm:?}"); let res = diff(algorithm, &input, UnifiedDiffBuilder::new(&input)); expect![[r#" @@ -1,4 +1,5 @@ fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; + println("hello world") } "#]] .assert_eq(&res); swap(&mut input.before, &mut input.after); let res = diff(algorithm, &input, UnifiedDiffBuilder::new(&input)); expect![[r#" @@ -1,5 +1,4 @@ fn foo() -> Bar{ let mut foo = 2.0; foo *= 100 / 2; - println("hello world") } "#]] .assert_eq(&res); swap(&mut input.before, &mut input.after); } } pub fn project_root() -> PathBuf { let dir = env!("CARGO_MANIFEST_DIR"); let mut res = PathBuf::from(dir); while !res.join("README.md").exists() { res = res.parent().expect("reached fs root without finding project root").to_owned() } res } #[test] fn hand_checked_udiffs() { for algorithm in Algorithm::ALL { println!("{algorithm:?}"); let test_dir = project_root().join("tests"); for file in ["helix_syntax.rs", "package.txt"] { let path_before = test_dir.join(format!("{file}.before")); let path_after = test_dir.join(format!("{file}.after")); let path_diff = test_dir.join(format!("{file}.{algorithm:?}.diff")); let before = read_to_string(path_before).unwrap(); let after = read_to_string(path_after).unwrap(); let input = InternedInput::new(&*before, &*after); let diff = diff(algorithm, &input, UnifiedDiffBuilder::new(&input)); expect_file![path_diff].assert_eq(&diff); } } } #[test] fn complex_diffs() { for algorithm in Algorithm::ALL { println!("{algorithm:?}"); let test_dir = project_root().join("tests"); for (file1, file2) in [ ("test1.json", "test2.json"), ("helix_syntax.rs.Histogram.diff", "helix_syntax.rs.after"), ] { let path_before = test_dir.join(file1); let path_diff = test_dir.join(file2); let before = read_to_string(path_before).unwrap(); let after = read_to_string(path_diff).unwrap(); let input = InternedInput::new(&*before, &*after); let res = diff(algorithm, &input, Counter::default()); println!("{}", res.total()) } } } imara-diff-0.1.5/src/unified_diff.rs000064400000000000000000000075111046102023000154020ustar 00000000000000use std::fmt::{Display, Write}; use std::hash::Hash; use std::ops::Range; use crate::intern::{InternedInput, Interner, Token}; use crate::Sink; /// A [`Sink`](crate::sink::Sink) that creates a textual diff /// in the format typically output by git or gnu-diff if the `-u` option is used pub struct UnifiedDiffBuilder<'a, W, T> where W: Write, T: Hash + Eq + Display, { before: &'a [Token], after: &'a [Token], interner: &'a Interner, pos: u32, before_hunk_start: u32, after_hunk_start: u32, before_hunk_len: u32, after_hunk_len: u32, buffer: String, dst: W, } impl<'a, T> UnifiedDiffBuilder<'a, String, T> where T: Hash + Eq + Display, { /// Create a new `UnifiedDiffBuilder` for the given `input`, /// that will return a [`String`](std::string::String). pub fn new(input: &'a InternedInput) -> Self { Self { before_hunk_start: 0, after_hunk_start: 0, before_hunk_len: 0, after_hunk_len: 0, buffer: String::with_capacity(8), dst: String::new(), interner: &input.interner, before: &input.before, after: &input.after, pos: 0, } } } impl<'a, W, T> UnifiedDiffBuilder<'a, W, T> where W: Write, T: Hash + Eq + Display, { /// Create a new `UnifiedDiffBuilder` for the given `input`, /// that will writes it output to the provided implementation of [`Write`](std::fmt::Write). pub fn with_writer(input: &'a InternedInput, writer: W) -> Self { Self { before_hunk_start: 0, after_hunk_start: 0, before_hunk_len: 0, after_hunk_len: 0, buffer: String::with_capacity(8), dst: writer, interner: &input.interner, before: &input.before, after: &input.after, pos: 0, } } fn print_tokens(&mut self, tokens: &[Token], prefix: char) { for &token in tokens { writeln!(&mut self.buffer, "{prefix}{}", self.interner[token]).unwrap(); } } fn flush(&mut self) { if self.before_hunk_len == 0 && self.after_hunk_len == 0 { return; } let end = (self.pos + 3).min(self.before.len() as u32); self.update_pos(end, end); writeln!( &mut self.dst, "@@ -{},{} +{},{} @@", self.before_hunk_start + 1, self.before_hunk_len, self.after_hunk_start + 1, self.after_hunk_len, ) .unwrap(); write!(&mut self.dst, "{}", &self.buffer).unwrap(); self.buffer.clear(); self.before_hunk_len = 0; self.after_hunk_len = 0 } fn update_pos(&mut self, print_to: u32, move_to: u32) { self.print_tokens(&self.before[self.pos as usize..print_to as usize], ' '); let len = print_to - self.pos; self.pos = move_to; self.before_hunk_len += len; self.after_hunk_len += len; } } impl Sink for UnifiedDiffBuilder<'_, W, T> where W: Write, T: Hash + Eq + Display, { type Out = W; fn process_change(&mut self, before: Range, after: Range) { if before.start - self.pos > 6 { self.flush(); self.pos = before.start - 3; self.before_hunk_start = self.pos; self.after_hunk_start = after.start - 3; } self.update_pos(before.start, before.end); self.before_hunk_len += before.end - before.start; self.after_hunk_len += after.end - after.start; self.print_tokens(&self.before[before.start as usize..before.end as usize], '-'); self.print_tokens(&self.after[after.start as usize..after.end as usize], '+'); } fn finish(mut self) -> Self::Out { self.flush(); self.dst } } imara-diff-0.1.5/src/util.rs000064400000000000000000000024261046102023000137440ustar 00000000000000use crate::intern::Token; pub fn common_prefix(file1: &[Token], file2: &[Token]) -> u32 { let mut off = 0; for (token1, token2) in file1.iter().zip(file2) { if token1 != token2 { break; } off += 1; } off } pub fn common_postfix(file1: &[Token], file2: &[Token]) -> u32 { let mut off = 0; for (token1, token2) in file1.iter().rev().zip(file2.iter().rev()) { if token1 != token2 { break; } off += 1; } off } pub fn common_edges(file1: &[Token], file2: &[Token]) -> (u32, u32) { let prefix = common_prefix(file1, file2); let postfix = common_postfix(&file1[prefix as usize..], &file2[prefix as usize..]); (prefix, postfix) } pub fn strip_common_prefix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 { let off = common_prefix(file1, file2); *file1 = &file1[off as usize..]; *file2 = &file2[off as usize..]; off } pub fn strip_common_postfix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 { let off = common_postfix(file1, file2); *file1 = &file1[..file1.len() - off as usize]; *file2 = &file2[..file2.len() - off as usize]; off } pub fn sqrt(val: usize) -> u32 { let nbits = (usize::BITS as u32 - val.leading_zeros()) / 2; 1 << nbits }