diff options
author | Dan Liew <daniel.liew@imperial.ac.uk> | 2015-06-28 01:44:30 +0100 |
---|---|---|
committer | Dan Liew <daniel.liew@imperial.ac.uk> | 2015-06-28 01:44:30 +0100 |
commit | 962f8d5252b3f5ec4d19e0cd2a430934bd55cc6d (patch) | |
tree | 27d5f9b0d130c6c1a6758bc0b7456b0aa51e34e0 /Source/ModelViewer | |
parent | e11d65009d0b4ba1327f5f5dd6b26367330611f0 (diff) |
Normalise line endings using a .gitattributes file. Unfortunately
this required that this commit globally modify most files. If you
want to use git blame to see the real author of a line use the
``-w`` flag so that whitespace changes are ignored.
Diffstat (limited to 'Source/ModelViewer')
-rw-r--r-- | Source/ModelViewer/BCTProvider.cs | 294 | ||||
-rw-r--r-- | Source/ModelViewer/BaseProvider.cs | 272 | ||||
-rw-r--r-- | Source/ModelViewer/DafnyProvider.cs | 776 | ||||
-rw-r--r-- | Source/ModelViewer/DataModel.cs | 594 | ||||
-rw-r--r-- | Source/ModelViewer/Main.Designer.cs | 998 | ||||
-rw-r--r-- | Source/ModelViewer/Main.cs | 1740 | ||||
-rw-r--r-- | Source/ModelViewer/Main.resx | 4382 | ||||
-rw-r--r-- | Source/ModelViewer/ModelViewer.csproj | 422 | ||||
-rw-r--r-- | Source/ModelViewer/Namer.cs | 1160 | ||||
-rw-r--r-- | Source/ModelViewer/Properties/AssemblyInfo.cs | 50 | ||||
-rw-r--r-- | Source/ModelViewer/Properties/Resources.Designer.cs | 126 | ||||
-rw-r--r-- | Source/ModelViewer/Properties/Resources.resx | 232 | ||||
-rw-r--r-- | Source/ModelViewer/Properties/Settings.Designer.cs | 52 | ||||
-rw-r--r-- | Source/ModelViewer/Properties/Settings.settings | 14 | ||||
-rw-r--r-- | Source/ModelViewer/SourceView.Designer.cs | 124 | ||||
-rw-r--r-- | Source/ModelViewer/SourceView.cs | 104 | ||||
-rw-r--r-- | Source/ModelViewer/SourceView.resx | 238 | ||||
-rw-r--r-- | Source/ModelViewer/TreeSkeleton.cs | 410 | ||||
-rw-r--r-- | Source/ModelViewer/VccProvider.cs | 3052 |
19 files changed, 7520 insertions, 7520 deletions
diff --git a/Source/ModelViewer/BCTProvider.cs b/Source/ModelViewer/BCTProvider.cs index 6b48c396..3126084f 100644 --- a/Source/ModelViewer/BCTProvider.cs +++ b/Source/ModelViewer/BCTProvider.cs @@ -1,147 +1,147 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.BCT {
- public class Provider : ILanguageProvider {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m) {
- return m.TryGetFunc("$Alloc") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) {
- var dm = new BCTModel(m, opts);
- foreach (var s in m.States) {
- var sn = new StateNode(dm.states.Count, dm, s);
- dm.states.Add(sn);
- }
- dm.FinishStates();
- return dm;
- }
- }
-
- class BCTModel : LanguageModel {
- public readonly Model.Func f_heap_select;
- public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- public List<StateNode> states = new List<StateNode>();
-
- public BCTModel(Model m, ViewOptions opts)
- : base(m, opts) {
- f_heap_select = m.MkFunc("[3]", 3);
-
- foreach (Model.Func fn in m.Functions) {
-
- }
- }
-
- internal void FinishStates() {
- GenerateSourceLocations(states);
- }
-
- public override IEnumerable<IState> States {
- get { return states; }
- }
-
- public string GetUserVariableName(string name) {
- if (name == "$this")
- return "this";
- if (name.Contains("$"))
- return null;
- if (name == "isControlChecked" || name == "isControlEnabled")
- return null;
- return name;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f) {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt) {
- List<ElementNode> result = new List<ElementNode>();
- return result;
- }
- }
-
- class StateNode : NamedState {
- internal readonly BCTModel dm;
- internal readonly List<VariableNode> vars = new List<VariableNode>();
- internal readonly int index;
-
- public StateNode(int i, BCTModel parent, Model.CapturedState s)
- : base(s, parent) {
- dm = parent;
- state = s;
- index = i;
-
- SetupVars();
- }
-
- void SetupVars() {
- var names = Util.Empty<string>();
-
- if (dm.states.Count > 0) {
- var prev = dm.states.Last();
- names = prev.vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- if (dm.GetUserVariableName(v) != null) {
- var val = state.TryGet(v);
- var vn = new VariableNode(this, v, val);
- vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- dm.RegisterLocalValue(vn.Name, val);
- vars.Add(vn);
- }
- }
-
- dm.Flush(Nodes);
- }
-
- public override IEnumerable<IDisplayNode> Nodes {
- get {
- return vars;
- }
- }
- }
-
- class ElementNode : DisplayNode {
- protected StateNode stateNode;
- protected Model.Element elt;
- protected BCTModel vm { get { return stateNode.dm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt)
- : base(st.dm, name, elt) {
- this.stateNode = st;
- this.elt = elt;
- }
-
- public ElementNode(StateNode st, string name, Model.Element elt)
- : this(st, new EdgeName(name), elt) { }
-
- protected override void ComputeChildren() {
- children.AddRange(vm.GetExpansion(stateNode, elt));
- }
- }
-
- class VariableNode : ElementNode {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt)
- : base(par, realName, elt) {
- this.realName = realName;
- name = new EdgeName(vm.GetUserVariableName(realName));
- }
- }
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.BCT { + public class Provider : ILanguageProvider { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) { + return m.TryGetFunc("$Alloc") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) { + var dm = new BCTModel(m, opts); + foreach (var s in m.States) { + var sn = new StateNode(dm.states.Count, dm, s); + dm.states.Add(sn); + } + dm.FinishStates(); + return dm; + } + } + + class BCTModel : LanguageModel { + public readonly Model.Func f_heap_select; + public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>(); + Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>(); + public List<StateNode> states = new List<StateNode>(); + + public BCTModel(Model m, ViewOptions opts) + : base(m, opts) { + f_heap_select = m.MkFunc("[3]", 3); + + foreach (Model.Func fn in m.Functions) { + + } + } + + internal void FinishStates() { + GenerateSourceLocations(states); + } + + public override IEnumerable<IState> States { + get { return states; } + } + + public string GetUserVariableName(string name) { + if (name == "$this") + return "this"; + if (name.Contains("$")) + return null; + if (name == "isControlChecked" || name == "isControlEnabled") + return null; + return name; + } + + public Model.Element Image(Model.Element elt, Model.Func f) { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt) { + List<ElementNode> result = new List<ElementNode>(); + return result; + } + } + + class StateNode : NamedState { + internal readonly BCTModel dm; + internal readonly List<VariableNode> vars = new List<VariableNode>(); + internal readonly int index; + + public StateNode(int i, BCTModel parent, Model.CapturedState s) + : base(s, parent) { + dm = parent; + state = s; + index = i; + + SetupVars(); + } + + void SetupVars() { + var names = Util.Empty<string>(); + + if (dm.states.Count > 0) { + var prev = dm.states.Last(); + names = prev.vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + if (dm.GetUserVariableName(v) != null) { + var val = state.TryGet(v); + var vn = new VariableNode(this, v, val); + vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + dm.RegisterLocalValue(vn.Name, val); + vars.Add(vn); + } + } + + dm.Flush(Nodes); + } + + public override IEnumerable<IDisplayNode> Nodes { + get { + return vars; + } + } + } + + class ElementNode : DisplayNode { + protected StateNode stateNode; + protected Model.Element elt; + protected BCTModel vm { get { return stateNode.dm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt) + : base(st.dm, name, elt) { + this.stateNode = st; + this.elt = elt; + } + + public ElementNode(StateNode st, string name, Model.Element elt) + : this(st, new EdgeName(name), elt) { } + + protected override void ComputeChildren() { + children.AddRange(vm.GetExpansion(stateNode, elt)); + } + } + + class VariableNode : ElementNode { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt) + : base(par, realName, elt) { + this.realName = realName; + name = new EdgeName(vm.GetUserVariableName(realName)); + } + } +} diff --git a/Source/ModelViewer/BaseProvider.cs b/Source/ModelViewer/BaseProvider.cs index 1e9e9cf9..8797fe1f 100644 --- a/Source/ModelViewer/BaseProvider.cs +++ b/Source/ModelViewer/BaseProvider.cs @@ -1,136 +1,136 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.Base
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return true;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- return new GenericModel(m, opts);
- }
- }
-
- public class GenericModel : LanguageModel
- {
- List<BaseState> states = new List<BaseState>();
-
- public GenericModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- foreach (var s in m.States)
- states.Add(new BaseState(this, s) { Name = s.Name });
- foreach (var s in states)
- this.Flush(s.nodes);
- }
-
- public override IEnumerable<IState> States
- {
- get { return states; }
- }
- }
-
- public class BaseState : IState
- {
- internal GenericModel m;
- Model.CapturedState st;
-
- internal List<IDisplayNode> nodes = new List<IDisplayNode>();
- internal Dictionary<Model.Element, string> niceName = new Dictionary<Model.Element, string>();
-
- public BaseState(GenericModel m, Model.CapturedState st)
- {
- this.st = st;
- this.m = m;
-
- foreach (var v in st.AllVariables) {
- var e = st.TryGet(v);
- m.RegisterLocalValue(v, e);
- nodes.Add(new ElementNode(this, v, e));
-
- niceName[e] = v;
- foreach (var r in e.References) {
- if (r.Args.Length == 1 && r.Args[0] == e) {
- if (!niceName.ContainsKey(e))
- niceName[e] = r.Func.Name + "(" + v + ")";
- }
- }
- }
-
- nodes.Add(new ContainerNode<Model.Func>("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions));
- nodes.Add(new ContainerNode<Model.Func>("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions));
- }
-
- public virtual SourceViewState ShowSource()
- {
- return null;
- }
-
- IDisplayNode Function(Model.Func f)
- {
- return new ContainerNode<Model.FuncTuple>(f.Name, a => new AppNode(this, a), f.Apps);
- }
-
- public virtual string Name { get; set; }
-
- public virtual IEnumerable<IDisplayNode> Nodes
- {
- get { return nodes; }
- }
- }
-
- public class ElementNode : DisplayNode
- {
- BaseState st;
-
- public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; }
-
- protected override void ComputeChildren()
- {
- children.Add(new ContainerNode<Model.FuncTuple>(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element)));
- foreach (var e in Element.References) {
- if (e.Args.Contains(Element))
- children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null)));
- }
- }
- }
-
- public class AppNode : ElementNode
- {
- protected Model.FuncTuple tupl;
-
- public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { }
-
- public AppNode(BaseState m, Model.FuncTuple t, Func<Model.Element, string> nameElement)
- : base(m, t.Func.Name, t.Result)
- {
- tupl = t;
- var sb = new StringBuilder();
- sb.Append(t.Func.Name);
- if (t.Args.Length > 0) {
- sb.Append("(");
- for (int i = 0; i < t.Args.Length; ++i) {
- var n = nameElement(t.Args[i]);
- if (n == null)
- sb.AppendFormat("%{0}, ", i);
- else
- sb.AppendFormat("{0}, ", n);
- }
- sb.Length -= 2;
- sb.Append(")");
- }
- name = new EdgeName(m.m, sb.ToString(), t.Args);
- }
- }
-
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.Base +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return true; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + return new GenericModel(m, opts); + } + } + + public class GenericModel : LanguageModel + { + List<BaseState> states = new List<BaseState>(); + + public GenericModel(Model m, ViewOptions opts) + : base(m, opts) + { + foreach (var s in m.States) + states.Add(new BaseState(this, s) { Name = s.Name }); + foreach (var s in states) + this.Flush(s.nodes); + } + + public override IEnumerable<IState> States + { + get { return states; } + } + } + + public class BaseState : IState + { + internal GenericModel m; + Model.CapturedState st; + + internal List<IDisplayNode> nodes = new List<IDisplayNode>(); + internal Dictionary<Model.Element, string> niceName = new Dictionary<Model.Element, string>(); + + public BaseState(GenericModel m, Model.CapturedState st) + { + this.st = st; + this.m = m; + + foreach (var v in st.AllVariables) { + var e = st.TryGet(v); + m.RegisterLocalValue(v, e); + nodes.Add(new ElementNode(this, v, e)); + + niceName[e] = v; + foreach (var r in e.References) { + if (r.Args.Length == 1 && r.Args[0] == e) { + if (!niceName.ContainsKey(e)) + niceName[e] = r.Func.Name + "(" + v + ")"; + } + } + } + + nodes.Add(new ContainerNode<Model.Func>("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions)); + nodes.Add(new ContainerNode<Model.Func>("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions)); + } + + public virtual SourceViewState ShowSource() + { + return null; + } + + IDisplayNode Function(Model.Func f) + { + return new ContainerNode<Model.FuncTuple>(f.Name, a => new AppNode(this, a), f.Apps); + } + + public virtual string Name { get; set; } + + public virtual IEnumerable<IDisplayNode> Nodes + { + get { return nodes; } + } + } + + public class ElementNode : DisplayNode + { + BaseState st; + + public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; } + + protected override void ComputeChildren() + { + children.Add(new ContainerNode<Model.FuncTuple>(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element))); + foreach (var e in Element.References) { + if (e.Args.Contains(Element)) + children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null))); + } + } + } + + public class AppNode : ElementNode + { + protected Model.FuncTuple tupl; + + public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { } + + public AppNode(BaseState m, Model.FuncTuple t, Func<Model.Element, string> nameElement) + : base(m, t.Func.Name, t.Result) + { + tupl = t; + var sb = new StringBuilder(); + sb.Append(t.Func.Name); + if (t.Args.Length > 0) { + sb.Append("("); + for (int i = 0; i < t.Args.Length; ++i) { + var n = nameElement(t.Args[i]); + if (n == null) + sb.AppendFormat("%{0}, ", i); + else + sb.AppendFormat("{0}, ", n); + } + sb.Length -= 2; + sb.Append(")"); + } + name = new EdgeName(m.m, sb.ToString(), t.Args); + } + } + +} diff --git a/Source/ModelViewer/DafnyProvider.cs b/Source/ModelViewer/DafnyProvider.cs index 602df7aa..45c7dada 100644 --- a/Source/ModelViewer/DafnyProvider.cs +++ b/Source/ModelViewer/DafnyProvider.cs @@ -1,388 +1,388 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.ModelViewer.Dafny
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return m.TryGetFunc("$$Language$Dafny") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- var dm = new DafnyModel(m, opts);
- foreach (var s in m.States) {
- var sn = new StateNode(dm.states.Count, dm, s);
- dm.states.Add(sn);
- }
- dm.FinishStates();
- return dm;
- }
- }
-
- public class DafnyModel : LanguageModel
- {
- public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null;
- public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
- public readonly Dictionary<Model.Element, Model.FuncTuple> DatatypeValues = new Dictionary<Model.Element, Model.FuncTuple>();
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- public List<StateNode> states = new List<StateNode>();
-
- public DafnyModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- f_heap_select = m.MkFunc("[3]", 3);
- f_set_select = m.MkFunc("[2]", 2);
- f_seq_length = m.MkFunc("Seq#Length", 1);
- f_seq_index = m.MkFunc("Seq#Index", 2);
- f_box = m.MkFunc("$Box", 1);
- f_dim = m.MkFunc("FDim", 1);
- f_index_field = m.MkFunc("IndexField", 1);
- f_multi_index_field = m.MkFunc("MultiIndexField", 2);
- f_dtype = m.MkFunc("dtype", 1);
- f_null = m.MkFunc("null", 0);
-
- // collect the array dimensions from the various array.Length functions, and
- // collect all known datatype values
- foreach (var fn in m.Functions) {
- if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) {
- int j = fn.Name.IndexOf('.', 13);
- int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13));
- int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7));
- foreach (var tpl in fn.Apps) {
- var elt = tpl.Args[0];
- var len = tpl.Result;
- Model.Element[] ar;
- if (!ArrayLengths.TryGetValue(elt, out ar)) {
- ar = new Model.Element[dims];
- ArrayLengths.Add(elt, ar);
- }
- Contract.Assert(ar[idx] == null);
- ar[idx] = len;
- }
- } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') {
- foreach (var tpl in fn.Apps) {
- var elt = tpl.Result;
- DatatypeValues.Add(elt, tpl);
- }
- }
- }
- }
-
- internal void FinishStates()
- {
- GenerateSourceLocations(states);
- }
-
- public override IEnumerable<IState> States
- {
- get { return states; }
- }
-
- public string GetUserVariableName(string name)
- {
- if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw...
- return null;
- if (name.Contains("##")) // a temporary variable of the translation
- return null;
-#if SOMETIME_AGAIN
- var hash = name.IndexOf('#');
- if (0 < hash)
- return name.Substring(0, hash);
-#endif
- return name;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f)
- {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- Model.FuncTuple fnTuple;
- suff = NameSeqSuffix.WhenNonZero;
- if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
- // elt is s a datatype value, make its name be the name of the datatype constructor
- string nm = fnTuple.Func.Name;
- if (fnTuple.Func.Arity == 0)
- return nm;
- else
- return nm + "(...)";
- }
- var seqLen = f_seq_length.AppWithArg(0, elt);
- if (seqLen != null) {
- // elt is a sequence
- return string.Format("[Length {0}]", seqLen.Result.AsInt());
- }
-
- if (elt == f_null.GetConstant())
- return "null";
-
- var tp = f_dtype.TryEval(elt);
- if (tp != null) {
- foreach (var app in tp.References) {
- if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) {
- suff = NameSeqSuffix.Always;
- return app.Func.Name.Substring(6);
- }
- }
- }
-
- return base.CanonicalBaseName(elt, out suff);
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt)
- {
- List<ElementNode> result = new List<ElementNode>();
-
- if (elt.Kind != Model.ElementKind.Uninterpreted)
- return result;
-
- // Perhaps elt is a known datatype value
- Model.FuncTuple fnTuple;
- if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
- // elt is a datatype value
- int i = 0;
- foreach (var arg in fnTuple.Args) {
- var edgname = new EdgeName(this, i.ToString());
- result.Add(new FieldNode(state, edgname, arg));
- i++;
- }
- return result;
- }
-
- // Perhaps elt is a sequence
- var seqLen = f_seq_length.AppWithArg(0, elt);
- if (seqLen != null) {
- // elt is a sequence
- foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) {
- var edgname = new EdgeName(this, "[%0]", tpl.Args[1]);
- result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
- }
- return result;
- }
-
- // Perhaps elt is a set
- foreach (var tpl in f_set_select.AppsWithArg(0, elt)) {
- var setElement = tpl.Args[1];
- var containment = tpl.Result;
- var edgname = new EdgeName(this, "[%0]", Unbox(setElement));
- result.Add(new FieldNode(state, edgname, containment));
- }
- if (result.Count != 0)
- return result; // elt is a set
-
- // It seems elt is an object or array
- Model.Element[] lengths;
- if (ArrayLengths.TryGetValue(elt, out lengths)) {
- int i = 0;
- foreach (var len in lengths) {
- var name = lengths.Length == 1 ? "Length" : "Length" + i;
- var edgname = new EdgeName(this, name);
- result.Add(new FieldNode(state, edgname, len));
- i++;
- }
- }
- var heap = state.State.TryGet("$Heap");
- if (heap != null) {
- foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) {
- var field = new FieldName(tpl.Args[2], this);
- if (field.NameFormat != "alloc") {
- var edgname = new EdgeName(this, field.NameFormat, field.NameArgs);
- result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
- }
- }
- }
- return result;
- }
-
- class FieldName
- {
- public readonly Model.Element Field;
- public readonly int Dims;
- public readonly string NameFormat;
- public readonly Model.Element[] NameArgs;
-
- public FieldName(Model.Element elt, DafnyModel dm) {
- Field = elt;
- NameArgs = new Model.Element[Dims];
- var tpl = dm.f_dim.AppWithArg(0, elt);
- if (tpl != null) {
- Dims = tpl.Result.AsInt();
- NameArgs = new Model.Element[Dims];
- for (int i = Dims; 0 <= --i; ) {
- if (i == 0) {
- tpl = dm.f_index_field.AppWithResult(elt);
- NameArgs[i] = tpl.Args[0];
- } else {
- tpl = dm.f_multi_index_field.AppWithResult(elt);
- NameArgs[i] = tpl.Args[1];
- elt = tpl.Args[0];
- }
- }
- }
- // now for the name
- if (Dims == 0) {
- NameFormat = Field.ToString();
- foreach (var n in Field.Names) {
- NameFormat = n.Func.Name;
- int dot = NameFormat.LastIndexOf('.');
- if (0 <= dot)
- NameFormat = NameFormat.Substring(dot + 1);
- break;
- }
- } else {
- NameFormat = "[";
- string sep = "";
- for (int i = 0; i < Dims; i++) {
- NameFormat += sep + "%" + i;
- sep = ",";
- }
- NameFormat += "]";
- }
- }
- }
-
- Model.Element Unbox(Model.Element elt) {
- var unboxed = f_box.AppWithResult(elt);
- if (unboxed != null)
- return unboxed.Args[0];
- else
- return elt;
- }
- }
-
- public class StateNode : NamedState
- {
- internal readonly DafnyModel dm;
- public readonly List<VariableNode> Vars = new List<VariableNode>();
- internal readonly List<VariableNode> skolems;
- internal readonly int index;
-
- public StateNode(int i, DafnyModel parent, Model.CapturedState s)
- : base(s, parent)
- {
- dm = parent;
- state = s;
- index = i;
-
- skolems = new List<VariableNode>(SkolemVars());
- SetupVars();
- }
-
- void SetupVars()
- {
- var names = Util.Empty<string>();
-
- if (dm.states.Count > 0) {
- var prev = dm.states.Last();
- names = prev.Vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- if (dm.GetUserVariableName(v) != null) {
- var val = state.TryGet(v);
- var shortName = Regex.Replace(v, @"#\d+$", "");
- var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName);
- vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- dm.RegisterLocalValue(vn.Name, val);
- Vars.Add(vn);
- }
- }
-
- dm.Flush(Nodes);
- }
-
- IEnumerable<VariableNode> SkolemVars() {
- foreach (var f in dm.model.Functions) {
- if (f.Arity != 0) continue;
- int n = f.Name.IndexOf('!');
- if (n == -1) continue;
- string name = f.Name.Substring(0, n);
- if (!name.Contains('#')) continue;
- yield return new VariableNode(this, name, f.GetConstant(), name);
- }
- }
-
- public override IEnumerable<IDisplayNode> Nodes
- {
- get {
- return Vars.Concat(skolems);
- }
- }
- }
-
- public class ElementNode : DisplayNode
- {
- protected StateNode stateNode;
- protected Model.Element elt;
- protected DafnyModel vm { get { return stateNode.dm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt)
- : base(st.dm, name, elt)
- {
- this.stateNode = st;
- this.elt = elt;
- }
-
- public ElementNode(StateNode st, string name, Model.Element elt)
- : this(st, new EdgeName(name), elt) { }
-
- protected override void ComputeChildren()
- {
- children.AddRange(vm.GetExpansion(stateNode, elt));
- }
- }
-
- class FieldNode : ElementNode
- {
- public FieldNode(StateNode par, EdgeName realName, Model.Element elt)
- : base(par, realName, elt)
- {
- /*
- var idx = realName.LastIndexOf('.');
- if (idx > 0)
- name = realName.Substring(idx + 1);
- */
- }
- }
-
- class MapletNode : ElementNode
- {
- public MapletNode(StateNode par, EdgeName realName, Model.Element elt)
- : base(par, realName, elt)
- {
- }
- }
-
- public class VariableNode : ElementNode
- {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt, string shortName)
- : base(par, realName, elt)
- {
- this.realName = realName;
- name = new EdgeName(vm.GetUserVariableName(realName));
- ShortName = shortName;
- }
- }
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Diagnostics.Contracts; + +namespace Microsoft.Boogie.ModelViewer.Dafny +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return m.TryGetFunc("$$Language$Dafny") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + var dm = new DafnyModel(m, opts); + foreach (var s in m.States) { + var sn = new StateNode(dm.states.Count, dm, s); + dm.states.Add(sn); + } + dm.FinishStates(); + return dm; + } + } + + public class DafnyModel : LanguageModel + { + public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null; + public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>(); + public readonly Dictionary<Model.Element, Model.FuncTuple> DatatypeValues = new Dictionary<Model.Element, Model.FuncTuple>(); + Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>(); + public List<StateNode> states = new List<StateNode>(); + + public DafnyModel(Model m, ViewOptions opts) + : base(m, opts) + { + f_heap_select = m.MkFunc("[3]", 3); + f_set_select = m.MkFunc("[2]", 2); + f_seq_length = m.MkFunc("Seq#Length", 1); + f_seq_index = m.MkFunc("Seq#Index", 2); + f_box = m.MkFunc("$Box", 1); + f_dim = m.MkFunc("FDim", 1); + f_index_field = m.MkFunc("IndexField", 1); + f_multi_index_field = m.MkFunc("MultiIndexField", 2); + f_dtype = m.MkFunc("dtype", 1); + f_null = m.MkFunc("null", 0); + + // collect the array dimensions from the various array.Length functions, and + // collect all known datatype values + foreach (var fn in m.Functions) { + if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) { + int j = fn.Name.IndexOf('.', 13); + int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13)); + int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7)); + foreach (var tpl in fn.Apps) { + var elt = tpl.Args[0]; + var len = tpl.Result; + Model.Element[] ar; + if (!ArrayLengths.TryGetValue(elt, out ar)) { + ar = new Model.Element[dims]; + ArrayLengths.Add(elt, ar); + } + Contract.Assert(ar[idx] == null); + ar[idx] = len; + } + } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') { + foreach (var tpl in fn.Apps) { + var elt = tpl.Result; + DatatypeValues.Add(elt, tpl); + } + } + } + } + + internal void FinishStates() + { + GenerateSourceLocations(states); + } + + public override IEnumerable<IState> States + { + get { return states; } + } + + public string GetUserVariableName(string name) + { + if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw... + return null; + if (name.Contains("##")) // a temporary variable of the translation + return null; +#if SOMETIME_AGAIN + var hash = name.IndexOf('#'); + if (0 < hash) + return name.Substring(0, hash); +#endif + return name; + } + + public Model.Element Image(Model.Element elt, Model.Func f) + { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + Model.FuncTuple fnTuple; + suff = NameSeqSuffix.WhenNonZero; + if (DatatypeValues.TryGetValue(elt, out fnTuple)) { + // elt is s a datatype value, make its name be the name of the datatype constructor + string nm = fnTuple.Func.Name; + if (fnTuple.Func.Arity == 0) + return nm; + else + return nm + "(...)"; + } + var seqLen = f_seq_length.AppWithArg(0, elt); + if (seqLen != null) { + // elt is a sequence + return string.Format("[Length {0}]", seqLen.Result.AsInt()); + } + + if (elt == f_null.GetConstant()) + return "null"; + + var tp = f_dtype.TryEval(elt); + if (tp != null) { + foreach (var app in tp.References) { + if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) { + suff = NameSeqSuffix.Always; + return app.Func.Name.Substring(6); + } + } + } + + return base.CanonicalBaseName(elt, out suff); + } + + public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt) + { + List<ElementNode> result = new List<ElementNode>(); + + if (elt.Kind != Model.ElementKind.Uninterpreted) + return result; + + // Perhaps elt is a known datatype value + Model.FuncTuple fnTuple; + if (DatatypeValues.TryGetValue(elt, out fnTuple)) { + // elt is a datatype value + int i = 0; + foreach (var arg in fnTuple.Args) { + var edgname = new EdgeName(this, i.ToString()); + result.Add(new FieldNode(state, edgname, arg)); + i++; + } + return result; + } + + // Perhaps elt is a sequence + var seqLen = f_seq_length.AppWithArg(0, elt); + if (seqLen != null) { + // elt is a sequence + foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) { + var edgname = new EdgeName(this, "[%0]", tpl.Args[1]); + result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); + } + return result; + } + + // Perhaps elt is a set + foreach (var tpl in f_set_select.AppsWithArg(0, elt)) { + var setElement = tpl.Args[1]; + var containment = tpl.Result; + var edgname = new EdgeName(this, "[%0]", Unbox(setElement)); + result.Add(new FieldNode(state, edgname, containment)); + } + if (result.Count != 0) + return result; // elt is a set + + // It seems elt is an object or array + Model.Element[] lengths; + if (ArrayLengths.TryGetValue(elt, out lengths)) { + int i = 0; + foreach (var len in lengths) { + var name = lengths.Length == 1 ? "Length" : "Length" + i; + var edgname = new EdgeName(this, name); + result.Add(new FieldNode(state, edgname, len)); + i++; + } + } + var heap = state.State.TryGet("$Heap"); + if (heap != null) { + foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) { + var field = new FieldName(tpl.Args[2], this); + if (field.NameFormat != "alloc") { + var edgname = new EdgeName(this, field.NameFormat, field.NameArgs); + result.Add(new FieldNode(state, edgname, Unbox(tpl.Result))); + } + } + } + return result; + } + + class FieldName + { + public readonly Model.Element Field; + public readonly int Dims; + public readonly string NameFormat; + public readonly Model.Element[] NameArgs; + + public FieldName(Model.Element elt, DafnyModel dm) { + Field = elt; + NameArgs = new Model.Element[Dims]; + var tpl = dm.f_dim.AppWithArg(0, elt); + if (tpl != null) { + Dims = tpl.Result.AsInt(); + NameArgs = new Model.Element[Dims]; + for (int i = Dims; 0 <= --i; ) { + if (i == 0) { + tpl = dm.f_index_field.AppWithResult(elt); + NameArgs[i] = tpl.Args[0]; + } else { + tpl = dm.f_multi_index_field.AppWithResult(elt); + NameArgs[i] = tpl.Args[1]; + elt = tpl.Args[0]; + } + } + } + // now for the name + if (Dims == 0) { + NameFormat = Field.ToString(); + foreach (var n in Field.Names) { + NameFormat = n.Func.Name; + int dot = NameFormat.LastIndexOf('.'); + if (0 <= dot) + NameFormat = NameFormat.Substring(dot + 1); + break; + } + } else { + NameFormat = "["; + string sep = ""; + for (int i = 0; i < Dims; i++) { + NameFormat += sep + "%" + i; + sep = ","; + } + NameFormat += "]"; + } + } + } + + Model.Element Unbox(Model.Element elt) { + var unboxed = f_box.AppWithResult(elt); + if (unboxed != null) + return unboxed.Args[0]; + else + return elt; + } + } + + public class StateNode : NamedState + { + internal readonly DafnyModel dm; + public readonly List<VariableNode> Vars = new List<VariableNode>(); + internal readonly List<VariableNode> skolems; + internal readonly int index; + + public StateNode(int i, DafnyModel parent, Model.CapturedState s) + : base(s, parent) + { + dm = parent; + state = s; + index = i; + + skolems = new List<VariableNode>(SkolemVars()); + SetupVars(); + } + + void SetupVars() + { + var names = Util.Empty<string>(); + + if (dm.states.Count > 0) { + var prev = dm.states.Last(); + names = prev.Vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + if (dm.GetUserVariableName(v) != null) { + var val = state.TryGet(v); + var shortName = Regex.Replace(v, @"#\d+$", ""); + var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName); + vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + dm.RegisterLocalValue(vn.Name, val); + Vars.Add(vn); + } + } + + dm.Flush(Nodes); + } + + IEnumerable<VariableNode> SkolemVars() { + foreach (var f in dm.model.Functions) { + if (f.Arity != 0) continue; + int n = f.Name.IndexOf('!'); + if (n == -1) continue; + string name = f.Name.Substring(0, n); + if (!name.Contains('#')) continue; + yield return new VariableNode(this, name, f.GetConstant(), name); + } + } + + public override IEnumerable<IDisplayNode> Nodes + { + get { + return Vars.Concat(skolems); + } + } + } + + public class ElementNode : DisplayNode + { + protected StateNode stateNode; + protected Model.Element elt; + protected DafnyModel vm { get { return stateNode.dm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt) + : base(st.dm, name, elt) + { + this.stateNode = st; + this.elt = elt; + } + + public ElementNode(StateNode st, string name, Model.Element elt) + : this(st, new EdgeName(name), elt) { } + + protected override void ComputeChildren() + { + children.AddRange(vm.GetExpansion(stateNode, elt)); + } + } + + class FieldNode : ElementNode + { + public FieldNode(StateNode par, EdgeName realName, Model.Element elt) + : base(par, realName, elt) + { + /* + var idx = realName.LastIndexOf('.'); + if (idx > 0) + name = realName.Substring(idx + 1); + */ + } + } + + class MapletNode : ElementNode + { + public MapletNode(StateNode par, EdgeName realName, Model.Element elt) + : base(par, realName, elt) + { + } + } + + public class VariableNode : ElementNode + { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt, string shortName) + : base(par, realName, elt) + { + this.realName = realName; + name = new EdgeName(vm.GetUserVariableName(realName)); + ShortName = shortName; + } + } +} diff --git a/Source/ModelViewer/DataModel.cs b/Source/ModelViewer/DataModel.cs index 0b54e689..3820a6ab 100644 --- a/Source/ModelViewer/DataModel.cs +++ b/Source/ModelViewer/DataModel.cs @@ -1,297 +1,297 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public class ViewOptions
- {
- // 0 - Normal
- // 1 - Expert
- // 2 - Everything
- // 3 - Include the kitchen sink
- public int ViewLevel = 1;
- public bool DebugMode;
- }
-
- // sync with Main.categoryBrushes!
- public enum NodeCategory
- {
- Local,
- PhysField,
- SpecField,
- MethodologyProperty,
- UserFunction,
- Maplet
- }
-
- public interface ILanguageProvider
- {
- bool IsMyModel(Model m);
- ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts);
- }
-
- public interface ILanguageSpecificModel
- {
- string CanonicalName(Model.Element elt);
-
- Model.Element FindElement(string canonicalName);
-
- string PathName(IEnumerable<IDisplayNode> path);
-
- IEnumerable<IState> States { get; }
-
- // This function is given IDisplayNode possibly from different states.
- IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields);
- }
-
- public class SourceViewState
- {
- public string Header;
- public string RichTextContent;
- public int Location;
- }
-
- public interface IState
- {
- string Name { get; }
- SourceViewState ShowSource();
- IEnumerable<IDisplayNode> Nodes { get; }
- }
-
- public interface IDisplayNode
- {
- /// <summary>
- /// Used for indexing the state tree.
- /// </summary>
- string Name { get; }
-
- string ShortName { get; }
-
- NodeCategory Category { get; }
- string Value { get; }
- string ToolTip { get; }
-
- int ViewLevel { get; }
-
- /// <summary>
- /// Used to determine aliasing. Can be null.
- /// </summary>
- Model.Element Element { get; }
-
- IEnumerable<Model.Element> References { get; }
-
- IEnumerable<IDisplayNode> Children { get; }
-
- object ViewSync { get; set; }
- }
-
-
- public class TopState : IState
- {
- protected IDisplayNode[] children;
- protected string name;
-
- public TopState(string name, IEnumerable<IDisplayNode> nodes)
- {
- this.name = name;
- children = nodes.ToArray();
- }
-
- public string Name
- {
- get { return name; }
- }
-
- public IEnumerable<IDisplayNode> Nodes
- {
- get { return children; }
- }
-
-
- public SourceViewState ShowSource()
- {
- return null;
- }
-
- }
-
- public abstract class DisplayNode : IDisplayNode
- {
- protected EdgeName name;
- protected Model.Element element;
- protected ILanguageSpecificModel langModel;
- protected List<IDisplayNode> children;
-
- public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt)
- : this(model, new EdgeName(n), elt) {}
-
- public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt)
- {
- langModel = model;
- name = n;
- element = elt;
- }
-
- public virtual string ToolTip
- {
- get { return null; }
- }
-
- public virtual int ViewLevel { get; set; }
- public virtual NodeCategory Category { get; set; }
-
- public virtual IEnumerable<IDisplayNode> Children
- {
- get
- {
- if (children == null) {
- children = new List<IDisplayNode>();
- ComputeChildren();
- }
- return children;
- }
- }
-
- protected virtual void ComputeChildren()
- {
- }
-
- public object ViewSync { get; set; }
-
- public virtual string Name
- {
- get { return name.ToString(); }
- }
-
- private string shortName;
-
- public virtual string ShortName
- {
- get
- {
- if (shortName != null)
- {
- return shortName;
- }
- else
- {
- return name.ToString();
- }
- }
- set
- {
- shortName = value;
- }
- }
-
- public virtual Model.Element Element
- {
- get { return element; }
- }
-
- public virtual string Value
- {
- get
- {
- if (element == null)
- return "";
- return langModel.CanonicalName(element);
- }
- }
-
- public virtual IEnumerable<Model.Element> References
- {
- get
- {
- foreach (var r in name.Dependencies)
- yield return r;
- if (element != null)
- yield return element;
- }
- }
- }
-
- public class ContainerNode<T> : DisplayNode
- {
- protected Func<T, IDisplayNode> convert;
- protected IEnumerable<T> data;
-
- public ContainerNode(EdgeName name, Func<T, IDisplayNode> convert, IEnumerable<T> data) : base(null, name, null)
- {
- this.convert = convert;
- this.data = data;
- }
-
- public ContainerNode(string name, Func<T, IDisplayNode> convert, IEnumerable<T> data)
- : this(new EdgeName(name), convert, data)
- {
- }
-
- protected override void ComputeChildren()
- {
- foreach (var f in data) {
- var res = convert(f);
- if (res != null)
- children.Add(res);
- }
- }
- }
-
-
- public static class Util
- {
- public static void Assert(bool cond)
- {
- if (!cond) throw new System.Exception("assertion violation");
- }
-
- public static string Concat(this IEnumerable<string> strs, string sep)
- {
- var res = new StringBuilder();
- foreach (var e in strs)
- res.Append(e).Append(sep);
- if (res.Length > 0)
- res.Length -= sep.Length;
- return res.ToString();
- }
-
- public static IEnumerable<T> Empty<T>() { yield break; }
-
- public static IEnumerable<T> Singleton<T>(T e) { yield return e; }
-
- public static IEnumerable<T> Concat1<T>(this IEnumerable<T> s, T e) { return s.Concat(Singleton(e)); }
-
- public static IEnumerable<T> Map<S, T>(this IEnumerable<S> inp, Func<S, T> conv)
- {
- foreach (var s in inp) yield return conv(s);
- }
-
- public static void Iter<T>(this IEnumerable<T> inp, Action<T> fn)
- {
- foreach (var s in inp) fn(s);
- }
-
- public static void AddRange<T>(this HashSet<T> st, IEnumerable<T> elts)
- {
- foreach (var e in elts) st.Add(e);
- }
-
- public static T OrElse<T>(T a, T b)
- where T : class
- {
- if (a != null) return a;
- return b;
- }
-
- public static S GetWithDefault<T, S>(this Dictionary<T, S> dict, T key, S defl)
- {
- S r;
- if (dict.TryGetValue(key, out r))
- return r;
- return defl;
- }
- }
-
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer +{ + public class ViewOptions + { + // 0 - Normal + // 1 - Expert + // 2 - Everything + // 3 - Include the kitchen sink + public int ViewLevel = 1; + public bool DebugMode; + } + + // sync with Main.categoryBrushes! + public enum NodeCategory + { + Local, + PhysField, + SpecField, + MethodologyProperty, + UserFunction, + Maplet + } + + public interface ILanguageProvider + { + bool IsMyModel(Model m); + ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts); + } + + public interface ILanguageSpecificModel + { + string CanonicalName(Model.Element elt); + + Model.Element FindElement(string canonicalName); + + string PathName(IEnumerable<IDisplayNode> path); + + IEnumerable<IState> States { get; } + + // This function is given IDisplayNode possibly from different states. + IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields); + } + + public class SourceViewState + { + public string Header; + public string RichTextContent; + public int Location; + } + + public interface IState + { + string Name { get; } + SourceViewState ShowSource(); + IEnumerable<IDisplayNode> Nodes { get; } + } + + public interface IDisplayNode + { + /// <summary> + /// Used for indexing the state tree. + /// </summary> + string Name { get; } + + string ShortName { get; } + + NodeCategory Category { get; } + string Value { get; } + string ToolTip { get; } + + int ViewLevel { get; } + + /// <summary> + /// Used to determine aliasing. Can be null. + /// </summary> + Model.Element Element { get; } + + IEnumerable<Model.Element> References { get; } + + IEnumerable<IDisplayNode> Children { get; } + + object ViewSync { get; set; } + } + + + public class TopState : IState + { + protected IDisplayNode[] children; + protected string name; + + public TopState(string name, IEnumerable<IDisplayNode> nodes) + { + this.name = name; + children = nodes.ToArray(); + } + + public string Name + { + get { return name; } + } + + public IEnumerable<IDisplayNode> Nodes + { + get { return children; } + } + + + public SourceViewState ShowSource() + { + return null; + } + + } + + public abstract class DisplayNode : IDisplayNode + { + protected EdgeName name; + protected Model.Element element; + protected ILanguageSpecificModel langModel; + protected List<IDisplayNode> children; + + public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt) + : this(model, new EdgeName(n), elt) {} + + public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt) + { + langModel = model; + name = n; + element = elt; + } + + public virtual string ToolTip + { + get { return null; } + } + + public virtual int ViewLevel { get; set; } + public virtual NodeCategory Category { get; set; } + + public virtual IEnumerable<IDisplayNode> Children + { + get + { + if (children == null) { + children = new List<IDisplayNode>(); + ComputeChildren(); + } + return children; + } + } + + protected virtual void ComputeChildren() + { + } + + public object ViewSync { get; set; } + + public virtual string Name + { + get { return name.ToString(); } + } + + private string shortName; + + public virtual string ShortName + { + get + { + if (shortName != null) + { + return shortName; + } + else + { + return name.ToString(); + } + } + set + { + shortName = value; + } + } + + public virtual Model.Element Element + { + get { return element; } + } + + public virtual string Value + { + get + { + if (element == null) + return ""; + return langModel.CanonicalName(element); + } + } + + public virtual IEnumerable<Model.Element> References + { + get + { + foreach (var r in name.Dependencies) + yield return r; + if (element != null) + yield return element; + } + } + } + + public class ContainerNode<T> : DisplayNode + { + protected Func<T, IDisplayNode> convert; + protected IEnumerable<T> data; + + public ContainerNode(EdgeName name, Func<T, IDisplayNode> convert, IEnumerable<T> data) : base(null, name, null) + { + this.convert = convert; + this.data = data; + } + + public ContainerNode(string name, Func<T, IDisplayNode> convert, IEnumerable<T> data) + : this(new EdgeName(name), convert, data) + { + } + + protected override void ComputeChildren() + { + foreach (var f in data) { + var res = convert(f); + if (res != null) + children.Add(res); + } + } + } + + + public static class Util + { + public static void Assert(bool cond) + { + if (!cond) throw new System.Exception("assertion violation"); + } + + public static string Concat(this IEnumerable<string> strs, string sep) + { + var res = new StringBuilder(); + foreach (var e in strs) + res.Append(e).Append(sep); + if (res.Length > 0) + res.Length -= sep.Length; + return res.ToString(); + } + + public static IEnumerable<T> Empty<T>() { yield break; } + + public static IEnumerable<T> Singleton<T>(T e) { yield return e; } + + public static IEnumerable<T> Concat1<T>(this IEnumerable<T> s, T e) { return s.Concat(Singleton(e)); } + + public static IEnumerable<T> Map<S, T>(this IEnumerable<S> inp, Func<S, T> conv) + { + foreach (var s in inp) yield return conv(s); + } + + public static void Iter<T>(this IEnumerable<T> inp, Action<T> fn) + { + foreach (var s in inp) fn(s); + } + + public static void AddRange<T>(this HashSet<T> st, IEnumerable<T> elts) + { + foreach (var e in elts) st.Add(e); + } + + public static T OrElse<T>(T a, T b) + where T : class + { + if (a != null) return a; + return b; + } + + public static S GetWithDefault<T, S>(this Dictionary<T, S> dict, T key, S defl) + { + S r; + if (dict.TryGetValue(key, out r)) + return r; + return defl; + } + } + +} diff --git a/Source/ModelViewer/Main.Designer.cs b/Source/ModelViewer/Main.Designer.cs index a58e7354..be15f3c6 100644 --- a/Source/ModelViewer/Main.Designer.cs +++ b/Source/ModelViewer/Main.Designer.cs @@ -1,499 +1,499 @@ -namespace Microsoft.Boogie.ModelViewer
-{
- partial class Main
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null)) {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
- this.currentStateView = new System.Windows.Forms.ListView();
- this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.splitContainer1 = new System.Windows.Forms.SplitContainer();
- this.splitContainer2 = new System.Windows.Forms.SplitContainer();
- this.matchesList = new System.Windows.Forms.ListView();
- this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.linkLabel1 = new System.Windows.Forms.LinkLabel();
- this.label1 = new System.Windows.Forms.Label();
- this.textBox1 = new System.Windows.Forms.TextBox();
- this.stateList = new System.Windows.Forms.ListView();
- this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.menuStrip1 = new System.Windows.Forms.MenuStrip();
- this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
- this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
- this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog();
- this.stateViewMenu.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
- this.splitContainer1.Panel1.SuspendLayout();
- this.splitContainer1.Panel2.SuspendLayout();
- this.splitContainer1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
- this.splitContainer2.Panel1.SuspendLayout();
- this.splitContainer2.Panel2.SuspendLayout();
- this.splitContainer2.SuspendLayout();
- this.contextMenuStrip1.SuspendLayout();
- this.menuStrip1.SuspendLayout();
- this.SuspendLayout();
- //
- // currentStateView
- //
- this.currentStateView.BackColor = System.Drawing.SystemColors.Window;
- this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.name,
- this.value,
- this.prevValue});
- this.currentStateView.ContextMenuStrip = this.stateViewMenu;
- this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill;
- this.currentStateView.FullRowSelect = true;
- this.currentStateView.GridLines = true;
- this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.currentStateView.Location = new System.Drawing.Point(0, 0);
- this.currentStateView.MultiSelect = false;
- this.currentStateView.Name = "currentStateView";
- this.currentStateView.OwnerDraw = true;
- this.currentStateView.ShowItemToolTips = true;
- this.currentStateView.Size = new System.Drawing.Size(596, 344);
- this.currentStateView.TabIndex = 0;
- this.currentStateView.UseCompatibleStateImageBehavior = false;
- this.currentStateView.View = System.Windows.Forms.View.Details;
- this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
- this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
- this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
- this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged);
- this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown);
- this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
- this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize);
- //
- // name
- //
- this.name.Text = "Name";
- this.name.Width = 298;
- //
- // value
- //
- this.value.Text = "Value";
- this.value.Width = 126;
- //
- // prevValue
- //
- this.prevValue.Text = "Previous";
- this.prevValue.Width = 100;
- //
- // stateViewMenu
- //
- this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.dummyItemToolStripMenuItem});
- this.stateViewMenu.Name = "stateViewMenu";
- this.stateViewMenu.Size = new System.Drawing.Size(145, 26);
- this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening);
- //
- // dummyItemToolStripMenuItem
- //
- this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem";
- this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
- this.dummyItemToolStripMenuItem.Text = "Dummy item";
- //
- // splitContainer1
- //
- this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer1.Location = new System.Drawing.Point(0, 24);
- this.splitContainer1.Name = "splitContainer1";
- //
- // splitContainer1.Panel1
- //
- this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
- //
- // splitContainer1.Panel2
- //
- this.splitContainer1.Panel2.Controls.Add(this.stateList);
- this.splitContainer1.Size = new System.Drawing.Size(915, 449);
- this.splitContainer1.SplitterDistance = 596;
- this.splitContainer1.TabIndex = 1;
- //
- // splitContainer2
- //
- this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer2.Location = new System.Drawing.Point(0, 0);
- this.splitContainer2.Name = "splitContainer2";
- this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
- //
- // splitContainer2.Panel1
- //
- this.splitContainer2.Panel1.Controls.Add(this.currentStateView);
- //
- // splitContainer2.Panel2
- //
- this.splitContainer2.Panel2.Controls.Add(this.matchesList);
- this.splitContainer2.Panel2.Controls.Add(this.linkLabel1);
- this.splitContainer2.Panel2.Controls.Add(this.label1);
- this.splitContainer2.Panel2.Controls.Add(this.textBox1);
- this.splitContainer2.Size = new System.Drawing.Size(596, 449);
- this.splitContainer2.SplitterDistance = 344;
- this.splitContainer2.TabIndex = 1;
- //
- // matchesList
- //
- this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeader4,
- this.columnHeader5});
- this.matchesList.FullRowSelect = true;
- this.matchesList.GridLines = true;
- this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.matchesList.Location = new System.Drawing.Point(0, 29);
- this.matchesList.MultiSelect = false;
- this.matchesList.Name = "matchesList";
- this.matchesList.OwnerDraw = true;
- this.matchesList.ShowItemToolTips = true;
- this.matchesList.Size = new System.Drawing.Size(596, 72);
- this.matchesList.TabIndex = 4;
- this.matchesList.UseCompatibleStateImageBehavior = false;
- this.matchesList.View = System.Windows.Forms.View.Details;
- this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
- this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
- this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
- this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick);
- this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize);
- //
- // columnHeader4
- //
- this.columnHeader4.Text = "Name";
- this.columnHeader4.Width = 300;
- //
- // columnHeader5
- //
- this.columnHeader5.Text = "Value";
- this.columnHeader5.Width = 250;
- //
- // linkLabel1
- //
- this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.linkLabel1.AutoSize = true;
- this.linkLabel1.Location = new System.Drawing.Point(536, 5);
- this.linkLabel1.Name = "linkLabel1";
- this.linkLabel1.Size = new System.Drawing.Size(57, 13);
- this.linkLabel1.TabIndex = 3;
- this.linkLabel1.TabStop = true;
- this.linkLabel1.Text = "Show All...";
- this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue;
- this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(3, 5);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(44, 13);
- this.label1.TabIndex = 2;
- this.label1.Text = "Search:";
- //
- // textBox1
- //
- this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.textBox1.Location = new System.Drawing.Point(53, 3);
- this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(477, 20);
- this.textBox1.TabIndex = 1;
- this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
- //
- // stateList
- //
- this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeader3,
- this.columnHeader1,
- this.columnHeader2});
- this.stateList.ContextMenuStrip = this.contextMenuStrip1;
- this.stateList.Dock = System.Windows.Forms.DockStyle.Fill;
- this.stateList.FullRowSelect = true;
- this.stateList.GridLines = true;
- this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.stateList.Location = new System.Drawing.Point(0, 0);
- this.stateList.MultiSelect = false;
- this.stateList.Name = "stateList";
- this.stateList.ShowItemToolTips = true;
- this.stateList.Size = new System.Drawing.Size(315, 449);
- this.stateList.TabIndex = 0;
- this.stateList.UseCompatibleStateImageBehavior = false;
- this.stateList.View = System.Windows.Forms.View.Details;
- this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged);
- this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick);
- //
- // columnHeader3
- //
- this.columnHeader3.Text = "#";
- this.columnHeader3.Width = 22;
- //
- // columnHeader1
- //
- this.columnHeader1.Text = "State";
- this.columnHeader1.Width = 169;
- //
- // columnHeader2
- //
- this.columnHeader2.Text = "Value";
- this.columnHeader2.Width = 116;
- //
- // contextMenuStrip1
- //
- this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.showSourceToolStripMenuItem});
- this.contextMenuStrip1.Name = "contextMenuStrip1";
- this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26);
- //
- // showSourceToolStripMenuItem
- //
- this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem";
- this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
- this.showSourceToolStripMenuItem.Text = "Show source";
- this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click);
- //
- // menuStrip1
- //
- this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.fileToolStripMenuItem,
- this.viewToolStripMenuItem,
- this.modelsToolStripMenuItem});
- this.menuStrip1.Location = new System.Drawing.Point(0, 0);
- this.menuStrip1.Name = "menuStrip1";
- this.menuStrip1.Size = new System.Drawing.Size(915, 24);
- this.menuStrip1.TabIndex = 1;
- this.menuStrip1.Text = "menuStrip1";
- //
- // fileToolStripMenuItem
- //
- this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.openModelMenuItem,
- this.toolStripSeparator1,
- this.reloadModelFileToolStripMenuItem,
- this.exitToolStripMenuItem});
- this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
- this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
- this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
- this.fileToolStripMenuItem.Text = "&File";
- //
- // openModelMenuItem
- //
- this.openModelMenuItem.Name = "openModelMenuItem";
- this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
- this.openModelMenuItem.Size = new System.Drawing.Size(211, 22);
- this.openModelMenuItem.Text = "&Open model file...";
- this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click);
- //
- // toolStripSeparator1
- //
- this.toolStripSeparator1.Name = "toolStripSeparator1";
- this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6);
- //
- // reloadModelFileToolStripMenuItem
- //
- this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem";
- this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
- this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
- this.reloadModelFileToolStripMenuItem.Text = "&Reload model file";
- this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click);
- //
- // exitToolStripMenuItem
- //
- this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
- this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
- this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
- this.exitToolStripMenuItem.Text = "&Exit";
- this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
- //
- // viewToolStripMenuItem
- //
- this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.normalToolStripMenuItem,
- this.expertToolStripMenuItem,
- this.everythingToolStripMenuItem,
- this.includeTheKitchenSinkToolStripMenuItem,
- this.toolStripMenuItem1,
- this.debugToolStripMenuItem,
- this.largeFontToolStripMenuItem});
- this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
- this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
- this.viewToolStripMenuItem.Text = "&View";
- //
- // normalToolStripMenuItem
- //
- this.normalToolStripMenuItem.Name = "normalToolStripMenuItem";
- this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
- this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.normalToolStripMenuItem.Text = "&Normal";
- this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // expertToolStripMenuItem
- //
- this.expertToolStripMenuItem.Checked = true;
- this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
- this.expertToolStripMenuItem.Name = "expertToolStripMenuItem";
- this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X)));
- this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.expertToolStripMenuItem.Text = "E&xpert";
- this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // everythingToolStripMenuItem
- //
- this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem";
- this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
- this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.everythingToolStripMenuItem.Text = "&Everything";
- this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // includeTheKitchenSinkToolStripMenuItem
- //
- this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem";
- this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K)));
- this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink";
- this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // toolStripMenuItem1
- //
- this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6);
- //
- // debugToolStripMenuItem
- //
- this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
- this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.debugToolStripMenuItem.Text = "Debug";
- this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
- //
- // largeFontToolStripMenuItem
- //
- this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem";
- this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.largeFontToolStripMenuItem.Text = "Large font";
- this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click);
- //
- // modelsToolStripMenuItem
- //
- this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem";
- this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20);
- this.modelsToolStripMenuItem.Text = "&Models";
- //
- // openModelFileDialog
- //
- this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*";
- this.openModelFileDialog.Title = "Open model file";
- //
- // Main
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(915, 473);
- this.Controls.Add(this.splitContainer1);
- this.Controls.Add(this.menuStrip1);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.Name = "Main";
- this.Text = "Boogie Verification Debugger";
- this.Load += new System.EventHandler(this.Main_Load);
- this.stateViewMenu.ResumeLayout(false);
- this.splitContainer1.Panel1.ResumeLayout(false);
- this.splitContainer1.Panel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
- this.splitContainer1.ResumeLayout(false);
- this.splitContainer2.Panel1.ResumeLayout(false);
- this.splitContainer2.Panel2.ResumeLayout(false);
- this.splitContainer2.Panel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
- this.splitContainer2.ResumeLayout(false);
- this.contextMenuStrip1.ResumeLayout(false);
- this.menuStrip1.ResumeLayout(false);
- this.menuStrip1.PerformLayout();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListView currentStateView;
- private System.Windows.Forms.ColumnHeader name;
- private System.Windows.Forms.ColumnHeader value;
- private System.Windows.Forms.SplitContainer splitContainer1;
- private System.Windows.Forms.ListView stateList;
- private System.Windows.Forms.ColumnHeader columnHeader1;
- private System.Windows.Forms.ColumnHeader columnHeader2;
- private System.Windows.Forms.ColumnHeader columnHeader3;
- private System.Windows.Forms.ColumnHeader prevValue;
- private System.Windows.Forms.SplitContainer splitContainer2;
- private System.Windows.Forms.ListView matchesList;
- private System.Windows.Forms.ColumnHeader columnHeader4;
- private System.Windows.Forms.ColumnHeader columnHeader5;
- private System.Windows.Forms.LinkLabel linkLabel1;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.TextBox textBox1;
- private System.Windows.Forms.ContextMenuStrip stateViewMenu;
- private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem;
- private System.Windows.Forms.MenuStrip menuStrip1;
- private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
- private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem;
- private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
- private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem openModelMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
- private System.Windows.Forms.OpenFileDialog openModelFileDialog;
- private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem;
-
-
- }
-}
-
+namespace Microsoft.Boogie.ModelViewer +{ + partial class Main + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.currentStateView = new System.Windows.Forms.ListView(); + this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.matchesList = new System.Windows.Forms.ListView(); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.stateList = new System.Windows.Forms.ListView(); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.stateViewMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // currentStateView + // + this.currentStateView.BackColor = System.Drawing.SystemColors.Window; + this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.name, + this.value, + this.prevValue}); + this.currentStateView.ContextMenuStrip = this.stateViewMenu; + this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill; + this.currentStateView.FullRowSelect = true; + this.currentStateView.GridLines = true; + this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.currentStateView.Location = new System.Drawing.Point(0, 0); + this.currentStateView.MultiSelect = false; + this.currentStateView.Name = "currentStateView"; + this.currentStateView.OwnerDraw = true; + this.currentStateView.ShowItemToolTips = true; + this.currentStateView.Size = new System.Drawing.Size(596, 344); + this.currentStateView.TabIndex = 0; + this.currentStateView.UseCompatibleStateImageBehavior = false; + this.currentStateView.View = System.Windows.Forms.View.Details; + this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); + this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); + this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); + this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged); + this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown); + this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp); + this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize); + // + // name + // + this.name.Text = "Name"; + this.name.Width = 298; + // + // value + // + this.value.Text = "Value"; + this.value.Width = 126; + // + // prevValue + // + this.prevValue.Text = "Previous"; + this.prevValue.Width = 100; + // + // stateViewMenu + // + this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dummyItemToolStripMenuItem}); + this.stateViewMenu.Name = "stateViewMenu"; + this.stateViewMenu.Size = new System.Drawing.Size(145, 26); + this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening); + // + // dummyItemToolStripMenuItem + // + this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem"; + this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.dummyItemToolStripMenuItem.Text = "Dummy item"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.stateList); + this.splitContainer1.Size = new System.Drawing.Size(915, 449); + this.splitContainer1.SplitterDistance = 596; + this.splitContainer1.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.currentStateView); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.matchesList); + this.splitContainer2.Panel2.Controls.Add(this.linkLabel1); + this.splitContainer2.Panel2.Controls.Add(this.label1); + this.splitContainer2.Panel2.Controls.Add(this.textBox1); + this.splitContainer2.Size = new System.Drawing.Size(596, 449); + this.splitContainer2.SplitterDistance = 344; + this.splitContainer2.TabIndex = 1; + // + // matchesList + // + this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader4, + this.columnHeader5}); + this.matchesList.FullRowSelect = true; + this.matchesList.GridLines = true; + this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.matchesList.Location = new System.Drawing.Point(0, 29); + this.matchesList.MultiSelect = false; + this.matchesList.Name = "matchesList"; + this.matchesList.OwnerDraw = true; + this.matchesList.ShowItemToolTips = true; + this.matchesList.Size = new System.Drawing.Size(596, 72); + this.matchesList.TabIndex = 4; + this.matchesList.UseCompatibleStateImageBehavior = false; + this.matchesList.View = System.Windows.Forms.View.Details; + this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged); + this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); + this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); + this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick); + this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize); + // + // columnHeader4 + // + this.columnHeader4.Text = "Name"; + this.columnHeader4.Width = 300; + // + // columnHeader5 + // + this.columnHeader5.Text = "Value"; + this.columnHeader5.Width = 250; + // + // linkLabel1 + // + this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(536, 5); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(57, 13); + this.linkLabel1.TabIndex = 3; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "Show All..."; + this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Search:"; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.Location = new System.Drawing.Point(53, 3); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(477, 20); + this.textBox1.TabIndex = 1; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // stateList + // + this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader3, + this.columnHeader1, + this.columnHeader2}); + this.stateList.ContextMenuStrip = this.contextMenuStrip1; + this.stateList.Dock = System.Windows.Forms.DockStyle.Fill; + this.stateList.FullRowSelect = true; + this.stateList.GridLines = true; + this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.stateList.Location = new System.Drawing.Point(0, 0); + this.stateList.MultiSelect = false; + this.stateList.Name = "stateList"; + this.stateList.ShowItemToolTips = true; + this.stateList.Size = new System.Drawing.Size(315, 449); + this.stateList.TabIndex = 0; + this.stateList.UseCompatibleStateImageBehavior = false; + this.stateList.View = System.Windows.Forms.View.Details; + this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged); + this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick); + // + // columnHeader3 + // + this.columnHeader3.Text = "#"; + this.columnHeader3.Width = 22; + // + // columnHeader1 + // + this.columnHeader1.Text = "State"; + this.columnHeader1.Width = 169; + // + // columnHeader2 + // + this.columnHeader2.Text = "Value"; + this.columnHeader2.Width = 116; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showSourceToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26); + // + // showSourceToolStripMenuItem + // + this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem"; + this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22); + this.showSourceToolStripMenuItem.Text = "Show source"; + this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.viewToolStripMenuItem, + this.modelsToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(915, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openModelMenuItem, + this.toolStripSeparator1, + this.reloadModelFileToolStripMenuItem, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // openModelMenuItem + // + this.openModelMenuItem.Name = "openModelMenuItem"; + this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openModelMenuItem.Size = new System.Drawing.Size(211, 22); + this.openModelMenuItem.Text = "&Open model file..."; + this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6); + // + // reloadModelFileToolStripMenuItem + // + this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem"; + this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5; + this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + this.reloadModelFileToolStripMenuItem.Text = "&Reload model file"; + this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + this.exitToolStripMenuItem.Text = "&Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.normalToolStripMenuItem, + this.expertToolStripMenuItem, + this.everythingToolStripMenuItem, + this.includeTheKitchenSinkToolStripMenuItem, + this.toolStripMenuItem1, + this.debugToolStripMenuItem, + this.largeFontToolStripMenuItem}); + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "&View"; + // + // normalToolStripMenuItem + // + this.normalToolStripMenuItem.Name = "normalToolStripMenuItem"; + this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.normalToolStripMenuItem.Text = "&Normal"; + this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // expertToolStripMenuItem + // + this.expertToolStripMenuItem.Checked = true; + this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.expertToolStripMenuItem.Name = "expertToolStripMenuItem"; + this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.expertToolStripMenuItem.Text = "E&xpert"; + this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // everythingToolStripMenuItem + // + this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem"; + this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); + this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.everythingToolStripMenuItem.Text = "&Everything"; + this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // includeTheKitchenSinkToolStripMenuItem + // + this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem"; + this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K))); + this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink"; + this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6); + // + // debugToolStripMenuItem + // + this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; + this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.debugToolStripMenuItem.Text = "Debug"; + this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click); + // + // largeFontToolStripMenuItem + // + this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem"; + this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22); + this.largeFontToolStripMenuItem.Text = "Large font"; + this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click); + // + // modelsToolStripMenuItem + // + this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem"; + this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20); + this.modelsToolStripMenuItem.Text = "&Models"; + // + // openModelFileDialog + // + this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*"; + this.openModelFileDialog.Title = "Open model file"; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(915, 473); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Main"; + this.Text = "Boogie Verification Debugger"; + this.Load += new System.EventHandler(this.Main_Load); + this.stateViewMenu.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView currentStateView; + private System.Windows.Forms.ColumnHeader name; + private System.Windows.Forms.ColumnHeader value; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListView stateList; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader prevValue; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ListView matchesList; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.ContextMenuStrip stateViewMenu; + private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openModelMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.OpenFileDialog openModelFileDialog; + private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem; + + + } +} + diff --git a/Source/ModelViewer/Main.cs b/Source/ModelViewer/Main.cs index 5fed89da..4697e454 100644 --- a/Source/ModelViewer/Main.cs +++ b/Source/ModelViewer/Main.cs @@ -1,870 +1,870 @@ -using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-using System.IO;
-using Microsoft.Boogie;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public partial class Main : Form
- {
- SkeletonItem unfoldingRoot;
- SkeletonItem[] allItems;
- public int CurrentState, PreviousState = -1;
- IState[] states;
- internal ILanguageProvider langProvider;
- public ILanguageSpecificModel LangModel;
- ToolStripMenuItem[] viewItems;
- Model currentModel;
- Model[] allModels;
- int modelId;
- string lastModelFileName;
- internal ViewOptions viewOpts = new ViewOptions();
- Font smallFont, largeFont;
- int lineHeight;
-
- // TODO this should be dynamically loaded
- IEnumerable<ILanguageProvider> Providers()
- {
- yield return BCT.Provider.Instance;
- yield return Vcc.Provider.Instance;
- yield return Dafny.Provider.Instance;
- yield return Base.Provider.Instance;
- }
-
- public Main(string[] args, bool runAsHostedWindow = false)
- {
- InitializeComponent();
-
- smallFont = stateList.Font;
-
- if (runAsHostedWindow) {
- this.fileToolStripMenuItem.Enabled = false;
- this.fileToolStripMenuItem.Visible = false;
- }
-
- viewItems = new ToolStripMenuItem[] {
- normalToolStripMenuItem,
- expertToolStripMenuItem,
- everythingToolStripMenuItem,
- includeTheKitchenSinkToolStripMenuItem
- };
-
- var debugBreak = false;
- string filename = null;
-
- for (int i = 1; i < args.Length; i++) {
- var arg = args[i];
- if (arg == "/break" || arg == "-break")
- debugBreak = true;
- else
- filename = arg;
- }
-
- if (debugBreak) {
- System.Diagnostics.Debugger.Launch();
- }
-
- if (filename != null) {
- var idx = filename.IndexOf(':');
- if (idx > 0) {
- modelId = int.Parse(filename.Substring(idx + 1));
- filename = filename.Substring(0, idx);
- }
- }
-
- this.ReadModels(filename, this.modelId);
- }
-
- private void SetWindowTitle(string fileName)
- {
- if (fileName == null) {
- this.Text = "Boogie Verification Debugger";
- } else {
- this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger";
- }
- }
-
- public void ReadModel(string model, int setModelIdTo = 0)
- {
- Contract.Requires(model != null);
-
- using (var rd = new StringReader(model))
- {
- allModels = Model.ParseModels(rd).ToArray();
- }
-
- AddAndLoadModel(setModelIdTo);
- }
-
- public void ReadModels(string modelFileName, int setModelIdTo)
- {
- this.lastModelFileName = modelFileName;
- this.langProvider = Base.Provider.Instance;
-
- if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) {
- using (var rd = File.OpenText(modelFileName)) {
- allModels = Model.ParseModels(rd).ToArray();
- }
-
- AddAndLoadModel(setModelIdTo);
- } else {
- currentModel = new Model();
- }
-
- this.SetWindowTitle(modelFileName);
- }
-
- private void AddAndLoadModel(int setModelIdTo)
- {
- modelId = setModelIdTo;
-
- if (modelId >= allModels.Length)
- modelId = 0;
-
- currentModel = allModels[modelId];
- AddModelMenu();
-
- foreach (var p in Providers())
- {
- if (p.IsMyModel(currentModel))
- {
- this.langProvider = p;
- break;
- }
- }
-
- LoadModel(modelId);
- }
-
- private void LoadModel(int idx)
- {
- var i = 0;
-
- //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0];
-
- modelId = idx;
- foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) {
- it.Checked = i++ == idx;
- }
- currentModel = allModels[idx];
- BuildModel();
-
- /*
- if (stateList.Items.Count <= stateIdx)
- stateIdx = 0;
- stateList.Items[stateIdx].Selected = true;
- */
- }
-
- private void AddModelMenu()
- {
- modelsToolStripMenuItem.DropDownItems.Clear();
- var idx = 0;
- foreach (var m in allModels) {
- var currIdx = idx++; // this local needs to be in this block
- var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem;
- if (currIdx <= 9) {
- menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0);
- }
- }
- }
-
- private void BuildModel()
- {
- stateList.Items.Clear();
-
- var items = new List<ListViewItem>();
- LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts);
- states = LangModel.States.ToArray();
- var oldRoot = unfoldingRoot;
- SkeletonItem selectedSkel = null;
- if (oldRoot != null && SelectedNode() != null) {
- selectedSkel = SelectedNode().skel;
- }
- unfoldingRoot = new SkeletonItem(this, states.Length);
- allItems = unfoldingRoot.PopulateRoot(states);
-
- var idx = 0;
- foreach (var i in states) {
- var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" });
- it.Tag = i;
- items.Add(it);
- idx++;
- }
- stateList.Items.AddRange(items.ToArray());
- unfoldingRoot.Expanded = true;
-
- if (oldRoot == null) {
- SetState(0);
- stateList.Items[0].Selected = true;
- SetColumnSizes();
- } else {
- var mapping = new Dictionary<SkeletonItem, SkeletonItem>();
- unfoldingRoot.SyncWith(mapping, oldRoot);
- SkeletonItem newIt = null;
- while (selectedSkel != null) {
- if (mapping.TryGetValue(selectedSkel, out newIt)) break;
- selectedSkel = selectedSkel.parent;
- }
- if (CurrentState >= stateList.Items.Count)
- CurrentState = 0;
- if (PreviousState >= stateList.Items.Count)
- PreviousState = -1;
- if (newIt != null) GotoNode(newIt);
- SyncStateListValues();
- UpdateMatches(true);
- }
- }
-
- private void SetColumnSizes()
- {
- currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25;
- stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25;
- }
-
- public void SetState(int id, bool updateView = false)
- {
- if (updateView)
- {
- stateList.SelectedIndices.Clear();
- stateList.SelectedIndices.Add(id);
- }
- if (CurrentState != id) {
- PreviousState = CurrentState;
- CurrentState = id;
- }
- UpdateMatches(true);
- }
-
- public void HideStateList()
- {
- stateList.Hide();
- splitContainer1.Panel2.Hide();
- splitContainer1.Panel2Collapsed = true;
- splitContainer1.SplitterDistance = splitContainer1.Width;
- }
-
- public void HideMenuStrip()
- {
- menuStrip1.Hide();
- }
-
- internal void Activate(TreeNode treeNode)
- {
- throw new NotImplementedException();
- }
-
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
-
- }
-
- static Color Col(int c)
- {
- return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff);
- }
-
- static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center };
- static Pen plusPen = new Pen(Col(0xaaaaaa));
- static Brush grayedOut = new SolidBrush(Col(0xaaaaaa));
- static Brush nonPrimary = new SolidBrush(Col(0xeeeeee));
- static Brush matchBg = new SolidBrush(Col(0xFFFA6F));
-
- static SolidBrush currentStateBrush = new SolidBrush(Color.Red);
- static SolidBrush regularStateBrush = new SolidBrush(Color.Black);
- static SolidBrush previousStateBrush = new SolidBrush(Color.Blue);
-
- static SolidBrush[] categoryBrushes = new SolidBrush[] {
- new SolidBrush(Color.Black), // Local
- new SolidBrush(Color.Black), // PhysField
- new SolidBrush(Color.Green), // SpecField
- new SolidBrush(Color.Peru), // MethodologyProperty
- new SolidBrush(Color.Green), // UserFunction
- new SolidBrush(Color.Black), // Maplet
- };
-
- private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
- {
- var item = (DisplayItem)e.Item;
- var skel = item.skel;
- var rect = e.Bounds;
- var listView = (ListView)sender;
- lineHeight = rect.Height;
- rect.Y += 1;
- rect.Height -= 2;
-
- var textBrush = Brushes.Black;
- if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) {
- e.Graphics.FillRectangle(Brushes.Aquamarine, rect);
- textBrush = Brushes.White;
- } else {
- var bg = Brushes.White;
- if (item.active && !skel.isPrimary[CurrentState])
- bg = nonPrimary;
- if (item.skel.isMatch)
- bg = matchBg;
- e.Graphics.FillRectangle(bg, rect);
- }
-
- var off = lineHeight * item.skel.level;
- if (item.IsMatchListItem)
- off = 0;
-
- {
- var plusRect = rect;
- plusRect.Width = lineHeight;
- plusRect.X += off;
- var plusBorder = plusRect;
- plusBorder.Height = lineHeight / 2;
- plusBorder.Width = lineHeight / 2;
- plusBorder.X += lineHeight / 4;
- plusBorder.Y += lineHeight / 4;
- e.Graphics.DrawRectangle(plusPen, plusBorder);
- if (skel.Expandable) {
- float midX = plusBorder.X + plusBorder.Width / 2;
- float midY = plusBorder.Y + plusBorder.Height / 2;
- e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY);
- if (!item.skel.expanded)
- e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2);
- }
- }
-
- off += lineHeight + 3;
- var nameRect = rect;
- var font = listView.Font;
-
- textBrush = categoryBrushes[(int)item.dispNode.Category];
-
- if (!item.active)
- textBrush = grayedOut;
-
- nameRect.Width = listView.Columns[0].Width - 1 - off;
- nameRect.X += off;
- var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect);
-
- textBrush = item.active ? Brushes.Black : grayedOut;
- nameRect.X += width + 4;
- nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X;
- width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect);
-
- nameRect.X += width + 4;
- nameRect.Width = listView.Width - nameRect.X;
- var t = item.SubItems[2].Text;
- width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect);
- }
-
- private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect)
- {
- var sz = g.MeasureString(s, font).Width;
- if (sz > minRect.Width - 2) {
- minRect.Width = (int)(sz + 20);
- }
- g.DrawString(s, font, textBrush, minRect);
- return minRect.Width;
- }
-
- private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
- {
- e.DrawBackground();
- var brush = regularStateBrush;
- if (e.Header.Index == 1)
- brush = currentStateBrush;
- else if (e.Header.Index == 2)
- brush = previousStateBrush;
-
- Rectangle r = e.Bounds;
- r.X += 5;
- r.Y += 4;
- DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r);
- }
-
- private void listView1_MouseUp(object sender, MouseEventArgs e)
- {
- var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y);
- if (clickedItem != null) {
- clickedItem.Selected = true;
- clickedItem.Focused = true;
-
- var skel = clickedItem.skel;
- int plusLoc = skel.level * lineHeight;
- if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) {
- skel.Expanded = !skel.Expanded;
- SyncCurrentStateView();
- }
- }
- }
-
- private void SyncCurrentStateView()
- {
- SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { });
- }
-
- private void SyncListView(IEnumerable<SkeletonItem> items, ListView listView, Action<DisplayItem, SkeletonItem> cb)
- {
- var ch = items.ToArray();
- var missing = ch.Length - listView.Items.Count;
- listView.BeginUpdate();
- if (missing < 0) {
- missing = -missing;
- while (missing-- > 0) {
- listView.Items.RemoveAt(listView.Items.Count - 1);
- }
- } else {
- while (missing-- > 0) {
- listView.Items.Add(new DisplayItem());
- }
- }
- for (int i = 0; i < ch.Length; ++i) {
- var di = (DisplayItem)listView.Items[i];
- cb(di, ch[i]);
- di.Set(ch[i], CurrentState, PreviousState);
- }
- listView.EndUpdate();
- listView.Invalidate();
- }
-
- private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
- {
- currentStateView.Invalidate();
- }
-
- private void listView1_Resize(object sender, EventArgs e)
- {
- SetColumnSizes();
- currentStateView.Invalidate();
- }
-
- private void stateList_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (stateList.SelectedItems.Count == 0) return;
- var sel = stateList.SelectedItems[0].Index;
-
- if (PreviousState >= 0)
- stateList.Items[PreviousState].ForeColor = regularStateBrush.Color;
-
- SetState(sel);
- }
-
- DisplayItem SelectedNode()
- {
- if (currentStateView.SelectedItems.Count == 0) return null;
- return (DisplayItem)currentStateView.SelectedItems[0];
- }
-
- private void currentStateView_SelectedIndexChanged(object sender, EventArgs e)
- {
- SyncStateListValues();
- }
-
- private void SyncStateListValues()
- {
- var sel = SelectedNode();
- if (sel == null) return;
-
- stateList.BeginUpdate();
- for (int i = 0; i < sel.skel.displayNodes.Length; ++i) {
- var dn = sel.skel.displayNodes[i];
- stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value;
- }
- stateList.EndUpdate();
- }
-
- private void ExpandParents(SkeletonItem item)
- {
- item = item.parent;
- while (item != null) {
- item.Expanded = true;
- item = item.parent;
- }
- }
-
- private void textBox1_TextChanged(object sender, EventArgs e)
- {
- UpdateMatches(false);
- }
-
- private void UpdateMatches(bool force)
- {
- var bad = false;
- Model.Element eltEq = null;
- var eltRef = new List<Model.Element>();
- var words = new List<string>();
-
- foreach (var w in textBox1.Text.Split(' ')) {
- if (w == "") continue;
- if (w.StartsWith("eq:")) {
- if (eltEq != null) bad = true;
- else {
- eltEq = LangModel.FindElement(w.Substring(3));
- if (eltEq == null) bad = true;
- }
- } else if (w.StartsWith("use:")) {
- var e = LangModel.FindElement(w.Substring(4));
- if (e == null) bad = true;
- else eltRef.Add(e);
- } else {
- words.Add(w.ToLower());
- }
- }
-
- textBox1.ForeColor = bad ? Color.Red : Color.Black;
-
- var wordsA = words.ToArray();
- var refsA = eltRef.ToArray();
-
- if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0)
- bad = true;
-
- var changed = true; // force;
- var matches = new List<SkeletonItem>();
-
- foreach (var s in allItems) {
- var newMatch = false;
- if (s.isPrimary[CurrentState] && !bad) {
- newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState);
- }
- if (newMatch)
- matches.Add(s);
- if (s.isMatch != newMatch) {
- changed = true;
- s.isMatch = newMatch;
- }
- }
-
- if (PreviousState >= 0)
- stateList.Items[PreviousState].ForeColor = previousStateBrush.Color;
- stateList.Items[CurrentState].ForeColor = currentStateBrush.Color;
-
- if (changed) {
- SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; });
- SyncCurrentStateView();
- }
- }
-
- private void matchesList_Resize(object sender, EventArgs e)
- {
- matchesList.Invalidate();
- }
-
- private void matchesList_DoubleClick(object sender, EventArgs e)
- {
- if (matchesList.SelectedItems.Count == 0) return;
- var sel = (DisplayItem)matchesList.SelectedItems[0];
- GotoNode(sel.skel);
- }
-
- private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- foreach (DisplayItem it in matchesList.Items) {
- ExpandParents(it.skel);
- }
- SyncCurrentStateView();
- }
-
- private void SetSearch(string text)
- {
- textBox1.Text = text;
- }
-
- private void GotoNode(SkeletonItem skel)
- {
- ExpandParents(skel);
- SyncCurrentStateView();
- foreach (DisplayItem it in currentStateView.Items) {
- if (it.skel == skel) {
- it.Selected = true;
- currentStateView.EnsureVisible(it.Index);
- break;
- }
- }
- }
-
- private IEnumerable<SkeletonItem> NamesFor(Model.Element elt)
- {
- var words = new string[0];
- var elts = new Model.Element[0];
-
- foreach (var s in allItems) {
- if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) {
- yield return s;
- }
- }
- }
-
- private void AddMenuItems(IEnumerable<SkeletonItem> skels, ToolStripItemCollection items, string pref, int max)
- {
- var skelsM = skels.Take(max).ToArray();
-
- foreach (var s in skelsM) {
- var tmp = s;
- items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp));
- }
-
- if (skelsM.Length == max)
- items.Add(new ToolStripMenuItem("...") { Enabled = false });
- }
-
- private void stateViewMenu_Opening(object sender, CancelEventArgs e)
- {
- IDisplayNode sel = null;
- SkeletonItem skel = null;
- if (SelectedNode() != null) {
- sel = SelectedNode().dispNode;
- skel = SelectedNode().skel;
- }
-
- var items = stateViewMenu.Items;
- items.Clear();
-
- if (sel == null) {
- items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false });
- return;
- }
-
- foreach (var x in sel.References.Where(q => q != sel.Element)) {
- var t = new ToolStripMenuItem(LangModel.CanonicalName(x));
- items.Add(t);
- AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20);
- }
-
- if (sel.Element != null) {
- var selName = LangModel.CanonicalName(sel.Element);
- items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName));
-
- var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray();
- if (aliases.Length > 0) {
- items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName));
- AddMenuItems(aliases, items, " = ", 10);
- }
- }
- }
-
- private void normalToolStripMenuItem_Click(object sender, EventArgs e)
- {
- int viewLev = -1;
- for (int i = 0; i < viewItems.Length; ++i) {
- if (viewItems[i] == sender) {
- viewLev = i;
- viewItems[i].Checked = true;
- } else {
- viewItems[i].Checked = false;
- }
- }
- if (viewLev != -1 && viewLev != viewOpts.ViewLevel) {
- viewOpts.ViewLevel = viewLev;
- BuildModel();
- }
- }
-
- private void debugToolStripMenuItem_Click(object sender, EventArgs e)
- {
- debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked;
- viewOpts.DebugMode = debugToolStripMenuItem.Checked;
- BuildModel();
- }
-
- private void exitToolStripMenuItem_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
- private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e)
- {
- ReadModels(this.lastModelFileName, this.modelId);
- }
-
- private SourceView sourceView;
- private void ShowSource()
- {
- if (stateList.SelectedItems.Count == 0) return;
- var li = stateList.SelectedItems[0] as ListViewItem;
- if (li != null) {
- var r = ((IState)li.Tag).ShowSource();
- if (r != null) {
- if (sourceView == null) {
- sourceView = new SourceView();
- }
- sourceView.largeFont = largeFontToolStripMenuItem.Checked;
- sourceView.SetSourceLocation(r);
- sourceView.BringToFront();
- }
- }
- }
-
- private void showSourceToolStripMenuItem_Click(object sender, EventArgs e)
- {
- ShowSource();
- }
-
- private void stateList_DoubleClick(object sender, EventArgs e)
- {
- ShowSource();
- }
-
- private void openModelMenuItem_Click(object sender, EventArgs e)
- {
- if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
- this.ReadModels(this.openModelFileDialog.FileName, 0);
- }
- }
-
- private void largeFontToolStripMenuItem_Click(object sender, EventArgs e)
- {
- largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked;
-
- if (largeFont == null) {
- largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit);
- }
-
- SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont);
- //textBox1.Font = font;
- //linkLabel1.Font = font;
- //label1.Font = font;
- }
-
- public void SetFont(System.Drawing.Font font)
- {
- stateList.Font = font;
- currentStateView.Font = font;
- matchesList.Font = font;
- }
-
- private void Main_Load(object sender, EventArgs e)
- {
-
- }
-
- private void currentStateView_KeyDown(object sender, KeyEventArgs e)
- {
- var node = SelectedNode();
- if (node == null) return;
-
- if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) {
- node.skel.Expanded = true;
- SyncCurrentStateView();
- return;
- }
-
- if (e.KeyCode == Keys.Left) {
- if (node.skel.Expanded) {
- node.skel.Expanded = false;
- SyncCurrentStateView();
- return;
- } else {
- var par = node.skel.parent;
- if (par != null && par.parent != null) {
- // par.Expanded = false;
- foreach (DisplayItem it in currentStateView.Items) {
- it.Selected = it.skel == par;
- it.Focused = it.skel == par;
- if (it.Selected) {
- it.EnsureVisible();
- }
- }
- SyncCurrentStateView();
- }
- }
- }
- }
- }
-
- internal class DisplayItem : ListViewItem
- {
- internal SkeletonItem skel;
- internal int stateId;
- internal bool active;
- internal IDisplayNode dispNode;
-
- public bool IsMatchListItem { get; set; }
-
- internal void Set(SkeletonItem s, int id, int prevId)
- {
- if (skel == s && stateId == id)
- return;
- skel = s;
- stateId = id;
-
- dispNode = skel.displayNodes[stateId];
- active = dispNode != null;
-
- var closeStateId = stateId;
-
- if (dispNode == null) {
- while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null)
- closeStateId++;
- if (closeStateId >= skel.displayNodes.Length) {
- closeStateId = stateId;
- while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null)
- closeStateId--;
- }
- dispNode = skel.displayNodes[closeStateId];
- }
-
- var fullName = skel.LongName(closeStateId);
- var tooltip = dispNode.ToolTip;
- if (tooltip == null)
- tooltip = "";
- if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n')
- tooltip += "\n";
- tooltip += "Full name: " + fullName;
- if (tooltip != null) {
- this.ToolTipText = tooltip;
- }
-
- var name = dispNode.Name;
- if (name != dispNode.ShortName)
- {
- name = dispNode.ShortName;
- }
-
- if (IsMatchListItem) {
- Util.Assert(active);
- name = fullName;
- }
-
- this.SubItems[0].Text = name;
- this.SubItems[1].Text = active ? dispNode.Value : "";
-
- var prev = "";
-
- if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) {
- prev = skel.displayNodes[prevId].Value;
- }
-
- this.SubItems[2].Text = prev;
- }
-
- internal DisplayItem()
- : base(new string[] { "", "", "" })
- {
- }
-
- /*
- static internal string AliasesAsString(IDisplayNode dn)
- {
- if (dn == null) return "";
-
- var sb = new StringBuilder();
- var canon = dn.CanonicalValue;
- foreach (var n in dn.Aliases) {
- if (n == canon)
- continue;
- sb.Append(n).Append(", ");
- if (sb.Length > 300)
- break;
- }
- if (sb.Length > 2) sb.Length -= 2;
- return sb.ToString();
- }
- */
- }
-}
+using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +using System.IO; +using Microsoft.Boogie; +using System.Diagnostics.Contracts; + +namespace Microsoft.Boogie.ModelViewer +{ + public partial class Main : Form + { + SkeletonItem unfoldingRoot; + SkeletonItem[] allItems; + public int CurrentState, PreviousState = -1; + IState[] states; + internal ILanguageProvider langProvider; + public ILanguageSpecificModel LangModel; + ToolStripMenuItem[] viewItems; + Model currentModel; + Model[] allModels; + int modelId; + string lastModelFileName; + internal ViewOptions viewOpts = new ViewOptions(); + Font smallFont, largeFont; + int lineHeight; + + // TODO this should be dynamically loaded + IEnumerable<ILanguageProvider> Providers() + { + yield return BCT.Provider.Instance; + yield return Vcc.Provider.Instance; + yield return Dafny.Provider.Instance; + yield return Base.Provider.Instance; + } + + public Main(string[] args, bool runAsHostedWindow = false) + { + InitializeComponent(); + + smallFont = stateList.Font; + + if (runAsHostedWindow) { + this.fileToolStripMenuItem.Enabled = false; + this.fileToolStripMenuItem.Visible = false; + } + + viewItems = new ToolStripMenuItem[] { + normalToolStripMenuItem, + expertToolStripMenuItem, + everythingToolStripMenuItem, + includeTheKitchenSinkToolStripMenuItem + }; + + var debugBreak = false; + string filename = null; + + for (int i = 1; i < args.Length; i++) { + var arg = args[i]; + if (arg == "/break" || arg == "-break") + debugBreak = true; + else + filename = arg; + } + + if (debugBreak) { + System.Diagnostics.Debugger.Launch(); + } + + if (filename != null) { + var idx = filename.IndexOf(':'); + if (idx > 0) { + modelId = int.Parse(filename.Substring(idx + 1)); + filename = filename.Substring(0, idx); + } + } + + this.ReadModels(filename, this.modelId); + } + + private void SetWindowTitle(string fileName) + { + if (fileName == null) { + this.Text = "Boogie Verification Debugger"; + } else { + this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger"; + } + } + + public void ReadModel(string model, int setModelIdTo = 0) + { + Contract.Requires(model != null); + + using (var rd = new StringReader(model)) + { + allModels = Model.ParseModels(rd).ToArray(); + } + + AddAndLoadModel(setModelIdTo); + } + + public void ReadModels(string modelFileName, int setModelIdTo) + { + this.lastModelFileName = modelFileName; + this.langProvider = Base.Provider.Instance; + + if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) { + using (var rd = File.OpenText(modelFileName)) { + allModels = Model.ParseModels(rd).ToArray(); + } + + AddAndLoadModel(setModelIdTo); + } else { + currentModel = new Model(); + } + + this.SetWindowTitle(modelFileName); + } + + private void AddAndLoadModel(int setModelIdTo) + { + modelId = setModelIdTo; + + if (modelId >= allModels.Length) + modelId = 0; + + currentModel = allModels[modelId]; + AddModelMenu(); + + foreach (var p in Providers()) + { + if (p.IsMyModel(currentModel)) + { + this.langProvider = p; + break; + } + } + + LoadModel(modelId); + } + + private void LoadModel(int idx) + { + var i = 0; + + //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0]; + + modelId = idx; + foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) { + it.Checked = i++ == idx; + } + currentModel = allModels[idx]; + BuildModel(); + + /* + if (stateList.Items.Count <= stateIdx) + stateIdx = 0; + stateList.Items[stateIdx].Selected = true; + */ + } + + private void AddModelMenu() + { + modelsToolStripMenuItem.DropDownItems.Clear(); + var idx = 0; + foreach (var m in allModels) { + var currIdx = idx++; // this local needs to be in this block + var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem; + if (currIdx <= 9) { + menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0); + } + } + } + + private void BuildModel() + { + stateList.Items.Clear(); + + var items = new List<ListViewItem>(); + LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts); + states = LangModel.States.ToArray(); + var oldRoot = unfoldingRoot; + SkeletonItem selectedSkel = null; + if (oldRoot != null && SelectedNode() != null) { + selectedSkel = SelectedNode().skel; + } + unfoldingRoot = new SkeletonItem(this, states.Length); + allItems = unfoldingRoot.PopulateRoot(states); + + var idx = 0; + foreach (var i in states) { + var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" }); + it.Tag = i; + items.Add(it); + idx++; + } + stateList.Items.AddRange(items.ToArray()); + unfoldingRoot.Expanded = true; + + if (oldRoot == null) { + SetState(0); + stateList.Items[0].Selected = true; + SetColumnSizes(); + } else { + var mapping = new Dictionary<SkeletonItem, SkeletonItem>(); + unfoldingRoot.SyncWith(mapping, oldRoot); + SkeletonItem newIt = null; + while (selectedSkel != null) { + if (mapping.TryGetValue(selectedSkel, out newIt)) break; + selectedSkel = selectedSkel.parent; + } + if (CurrentState >= stateList.Items.Count) + CurrentState = 0; + if (PreviousState >= stateList.Items.Count) + PreviousState = -1; + if (newIt != null) GotoNode(newIt); + SyncStateListValues(); + UpdateMatches(true); + } + } + + private void SetColumnSizes() + { + currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25; + stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25; + } + + public void SetState(int id, bool updateView = false) + { + if (updateView) + { + stateList.SelectedIndices.Clear(); + stateList.SelectedIndices.Add(id); + } + if (CurrentState != id) { + PreviousState = CurrentState; + CurrentState = id; + } + UpdateMatches(true); + } + + public void HideStateList() + { + stateList.Hide(); + splitContainer1.Panel2.Hide(); + splitContainer1.Panel2Collapsed = true; + splitContainer1.SplitterDistance = splitContainer1.Width; + } + + public void HideMenuStrip() + { + menuStrip1.Hide(); + } + + internal void Activate(TreeNode treeNode) + { + throw new NotImplementedException(); + } + + private void listBox1_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + static Color Col(int c) + { + return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff); + } + + static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center }; + static Pen plusPen = new Pen(Col(0xaaaaaa)); + static Brush grayedOut = new SolidBrush(Col(0xaaaaaa)); + static Brush nonPrimary = new SolidBrush(Col(0xeeeeee)); + static Brush matchBg = new SolidBrush(Col(0xFFFA6F)); + + static SolidBrush currentStateBrush = new SolidBrush(Color.Red); + static SolidBrush regularStateBrush = new SolidBrush(Color.Black); + static SolidBrush previousStateBrush = new SolidBrush(Color.Blue); + + static SolidBrush[] categoryBrushes = new SolidBrush[] { + new SolidBrush(Color.Black), // Local + new SolidBrush(Color.Black), // PhysField + new SolidBrush(Color.Green), // SpecField + new SolidBrush(Color.Peru), // MethodologyProperty + new SolidBrush(Color.Green), // UserFunction + new SolidBrush(Color.Black), // Maplet + }; + + private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var item = (DisplayItem)e.Item; + var skel = item.skel; + var rect = e.Bounds; + var listView = (ListView)sender; + lineHeight = rect.Height; + rect.Y += 1; + rect.Height -= 2; + + var textBrush = Brushes.Black; + if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) { + e.Graphics.FillRectangle(Brushes.Aquamarine, rect); + textBrush = Brushes.White; + } else { + var bg = Brushes.White; + if (item.active && !skel.isPrimary[CurrentState]) + bg = nonPrimary; + if (item.skel.isMatch) + bg = matchBg; + e.Graphics.FillRectangle(bg, rect); + } + + var off = lineHeight * item.skel.level; + if (item.IsMatchListItem) + off = 0; + + { + var plusRect = rect; + plusRect.Width = lineHeight; + plusRect.X += off; + var plusBorder = plusRect; + plusBorder.Height = lineHeight / 2; + plusBorder.Width = lineHeight / 2; + plusBorder.X += lineHeight / 4; + plusBorder.Y += lineHeight / 4; + e.Graphics.DrawRectangle(plusPen, plusBorder); + if (skel.Expandable) { + float midX = plusBorder.X + plusBorder.Width / 2; + float midY = plusBorder.Y + plusBorder.Height / 2; + e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY); + if (!item.skel.expanded) + e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2); + } + } + + off += lineHeight + 3; + var nameRect = rect; + var font = listView.Font; + + textBrush = categoryBrushes[(int)item.dispNode.Category]; + + if (!item.active) + textBrush = grayedOut; + + nameRect.Width = listView.Columns[0].Width - 1 - off; + nameRect.X += off; + var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect); + + textBrush = item.active ? Brushes.Black : grayedOut; + nameRect.X += width + 4; + nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X; + width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect); + + nameRect.X += width + 4; + nameRect.Width = listView.Width - nameRect.X; + var t = item.SubItems[2].Text; + width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect); + } + + private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect) + { + var sz = g.MeasureString(s, font).Width; + if (sz > minRect.Width - 2) { + minRect.Width = (int)(sz + 20); + } + g.DrawString(s, font, textBrush, minRect); + return minRect.Width; + } + + private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.DrawBackground(); + var brush = regularStateBrush; + if (e.Header.Index == 1) + brush = currentStateBrush; + else if (e.Header.Index == 2) + brush = previousStateBrush; + + Rectangle r = e.Bounds; + r.X += 5; + r.Y += 4; + DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r); + } + + private void listView1_MouseUp(object sender, MouseEventArgs e) + { + var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y); + if (clickedItem != null) { + clickedItem.Selected = true; + clickedItem.Focused = true; + + var skel = clickedItem.skel; + int plusLoc = skel.level * lineHeight; + if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) { + skel.Expanded = !skel.Expanded; + SyncCurrentStateView(); + } + } + } + + private void SyncCurrentStateView() + { + SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { }); + } + + private void SyncListView(IEnumerable<SkeletonItem> items, ListView listView, Action<DisplayItem, SkeletonItem> cb) + { + var ch = items.ToArray(); + var missing = ch.Length - listView.Items.Count; + listView.BeginUpdate(); + if (missing < 0) { + missing = -missing; + while (missing-- > 0) { + listView.Items.RemoveAt(listView.Items.Count - 1); + } + } else { + while (missing-- > 0) { + listView.Items.Add(new DisplayItem()); + } + } + for (int i = 0; i < ch.Length; ++i) { + var di = (DisplayItem)listView.Items[i]; + cb(di, ch[i]); + di.Set(ch[i], CurrentState, PreviousState); + } + listView.EndUpdate(); + listView.Invalidate(); + } + + private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e) + { + currentStateView.Invalidate(); + } + + private void listView1_Resize(object sender, EventArgs e) + { + SetColumnSizes(); + currentStateView.Invalidate(); + } + + private void stateList_SelectedIndexChanged(object sender, EventArgs e) + { + if (stateList.SelectedItems.Count == 0) return; + var sel = stateList.SelectedItems[0].Index; + + if (PreviousState >= 0) + stateList.Items[PreviousState].ForeColor = regularStateBrush.Color; + + SetState(sel); + } + + DisplayItem SelectedNode() + { + if (currentStateView.SelectedItems.Count == 0) return null; + return (DisplayItem)currentStateView.SelectedItems[0]; + } + + private void currentStateView_SelectedIndexChanged(object sender, EventArgs e) + { + SyncStateListValues(); + } + + private void SyncStateListValues() + { + var sel = SelectedNode(); + if (sel == null) return; + + stateList.BeginUpdate(); + for (int i = 0; i < sel.skel.displayNodes.Length; ++i) { + var dn = sel.skel.displayNodes[i]; + stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value; + } + stateList.EndUpdate(); + } + + private void ExpandParents(SkeletonItem item) + { + item = item.parent; + while (item != null) { + item.Expanded = true; + item = item.parent; + } + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + UpdateMatches(false); + } + + private void UpdateMatches(bool force) + { + var bad = false; + Model.Element eltEq = null; + var eltRef = new List<Model.Element>(); + var words = new List<string>(); + + foreach (var w in textBox1.Text.Split(' ')) { + if (w == "") continue; + if (w.StartsWith("eq:")) { + if (eltEq != null) bad = true; + else { + eltEq = LangModel.FindElement(w.Substring(3)); + if (eltEq == null) bad = true; + } + } else if (w.StartsWith("use:")) { + var e = LangModel.FindElement(w.Substring(4)); + if (e == null) bad = true; + else eltRef.Add(e); + } else { + words.Add(w.ToLower()); + } + } + + textBox1.ForeColor = bad ? Color.Red : Color.Black; + + var wordsA = words.ToArray(); + var refsA = eltRef.ToArray(); + + if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0) + bad = true; + + var changed = true; // force; + var matches = new List<SkeletonItem>(); + + foreach (var s in allItems) { + var newMatch = false; + if (s.isPrimary[CurrentState] && !bad) { + newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState); + } + if (newMatch) + matches.Add(s); + if (s.isMatch != newMatch) { + changed = true; + s.isMatch = newMatch; + } + } + + if (PreviousState >= 0) + stateList.Items[PreviousState].ForeColor = previousStateBrush.Color; + stateList.Items[CurrentState].ForeColor = currentStateBrush.Color; + + if (changed) { + SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; }); + SyncCurrentStateView(); + } + } + + private void matchesList_Resize(object sender, EventArgs e) + { + matchesList.Invalidate(); + } + + private void matchesList_DoubleClick(object sender, EventArgs e) + { + if (matchesList.SelectedItems.Count == 0) return; + var sel = (DisplayItem)matchesList.SelectedItems[0]; + GotoNode(sel.skel); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (DisplayItem it in matchesList.Items) { + ExpandParents(it.skel); + } + SyncCurrentStateView(); + } + + private void SetSearch(string text) + { + textBox1.Text = text; + } + + private void GotoNode(SkeletonItem skel) + { + ExpandParents(skel); + SyncCurrentStateView(); + foreach (DisplayItem it in currentStateView.Items) { + if (it.skel == skel) { + it.Selected = true; + currentStateView.EnsureVisible(it.Index); + break; + } + } + } + + private IEnumerable<SkeletonItem> NamesFor(Model.Element elt) + { + var words = new string[0]; + var elts = new Model.Element[0]; + + foreach (var s in allItems) { + if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) { + yield return s; + } + } + } + + private void AddMenuItems(IEnumerable<SkeletonItem> skels, ToolStripItemCollection items, string pref, int max) + { + var skelsM = skels.Take(max).ToArray(); + + foreach (var s in skelsM) { + var tmp = s; + items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp)); + } + + if (skelsM.Length == max) + items.Add(new ToolStripMenuItem("...") { Enabled = false }); + } + + private void stateViewMenu_Opening(object sender, CancelEventArgs e) + { + IDisplayNode sel = null; + SkeletonItem skel = null; + if (SelectedNode() != null) { + sel = SelectedNode().dispNode; + skel = SelectedNode().skel; + } + + var items = stateViewMenu.Items; + items.Clear(); + + if (sel == null) { + items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false }); + return; + } + + foreach (var x in sel.References.Where(q => q != sel.Element)) { + var t = new ToolStripMenuItem(LangModel.CanonicalName(x)); + items.Add(t); + AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20); + } + + if (sel.Element != null) { + var selName = LangModel.CanonicalName(sel.Element); + items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName)); + + var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray(); + if (aliases.Length > 0) { + items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName)); + AddMenuItems(aliases, items, " = ", 10); + } + } + } + + private void normalToolStripMenuItem_Click(object sender, EventArgs e) + { + int viewLev = -1; + for (int i = 0; i < viewItems.Length; ++i) { + if (viewItems[i] == sender) { + viewLev = i; + viewItems[i].Checked = true; + } else { + viewItems[i].Checked = false; + } + } + if (viewLev != -1 && viewLev != viewOpts.ViewLevel) { + viewOpts.ViewLevel = viewLev; + BuildModel(); + } + } + + private void debugToolStripMenuItem_Click(object sender, EventArgs e) + { + debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked; + viewOpts.DebugMode = debugToolStripMenuItem.Checked; + BuildModel(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e) + { + ReadModels(this.lastModelFileName, this.modelId); + } + + private SourceView sourceView; + private void ShowSource() + { + if (stateList.SelectedItems.Count == 0) return; + var li = stateList.SelectedItems[0] as ListViewItem; + if (li != null) { + var r = ((IState)li.Tag).ShowSource(); + if (r != null) { + if (sourceView == null) { + sourceView = new SourceView(); + } + sourceView.largeFont = largeFontToolStripMenuItem.Checked; + sourceView.SetSourceLocation(r); + sourceView.BringToFront(); + } + } + } + + private void showSourceToolStripMenuItem_Click(object sender, EventArgs e) + { + ShowSource(); + } + + private void stateList_DoubleClick(object sender, EventArgs e) + { + ShowSource(); + } + + private void openModelMenuItem_Click(object sender, EventArgs e) + { + if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { + this.ReadModels(this.openModelFileDialog.FileName, 0); + } + } + + private void largeFontToolStripMenuItem_Click(object sender, EventArgs e) + { + largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked; + + if (largeFont == null) { + largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit); + } + + SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont); + //textBox1.Font = font; + //linkLabel1.Font = font; + //label1.Font = font; + } + + public void SetFont(System.Drawing.Font font) + { + stateList.Font = font; + currentStateView.Font = font; + matchesList.Font = font; + } + + private void Main_Load(object sender, EventArgs e) + { + + } + + private void currentStateView_KeyDown(object sender, KeyEventArgs e) + { + var node = SelectedNode(); + if (node == null) return; + + if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) { + node.skel.Expanded = true; + SyncCurrentStateView(); + return; + } + + if (e.KeyCode == Keys.Left) { + if (node.skel.Expanded) { + node.skel.Expanded = false; + SyncCurrentStateView(); + return; + } else { + var par = node.skel.parent; + if (par != null && par.parent != null) { + // par.Expanded = false; + foreach (DisplayItem it in currentStateView.Items) { + it.Selected = it.skel == par; + it.Focused = it.skel == par; + if (it.Selected) { + it.EnsureVisible(); + } + } + SyncCurrentStateView(); + } + } + } + } + } + + internal class DisplayItem : ListViewItem + { + internal SkeletonItem skel; + internal int stateId; + internal bool active; + internal IDisplayNode dispNode; + + public bool IsMatchListItem { get; set; } + + internal void Set(SkeletonItem s, int id, int prevId) + { + if (skel == s && stateId == id) + return; + skel = s; + stateId = id; + + dispNode = skel.displayNodes[stateId]; + active = dispNode != null; + + var closeStateId = stateId; + + if (dispNode == null) { + while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null) + closeStateId++; + if (closeStateId >= skel.displayNodes.Length) { + closeStateId = stateId; + while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null) + closeStateId--; + } + dispNode = skel.displayNodes[closeStateId]; + } + + var fullName = skel.LongName(closeStateId); + var tooltip = dispNode.ToolTip; + if (tooltip == null) + tooltip = ""; + if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n') + tooltip += "\n"; + tooltip += "Full name: " + fullName; + if (tooltip != null) { + this.ToolTipText = tooltip; + } + + var name = dispNode.Name; + if (name != dispNode.ShortName) + { + name = dispNode.ShortName; + } + + if (IsMatchListItem) { + Util.Assert(active); + name = fullName; + } + + this.SubItems[0].Text = name; + this.SubItems[1].Text = active ? dispNode.Value : ""; + + var prev = ""; + + if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) { + prev = skel.displayNodes[prevId].Value; + } + + this.SubItems[2].Text = prev; + } + + internal DisplayItem() + : base(new string[] { "", "", "" }) + { + } + + /* + static internal string AliasesAsString(IDisplayNode dn) + { + if (dn == null) return ""; + + var sb = new StringBuilder(); + var canon = dn.CanonicalValue; + foreach (var n in dn.Aliases) { + if (n == canon) + continue; + sb.Append(n).Append(", "); + if (sb.Length > 300) + break; + } + if (sb.Length > 2) sb.Length -= 2; + return sb.ToString(); + } + */ + } +} diff --git a/Source/ModelViewer/Main.resx b/Source/ModelViewer/Main.resx index 657b80c4..764a9fd9 100644 --- a/Source/ModelViewer/Main.resx +++ b/Source/ModelViewer/Main.resx @@ -1,2192 +1,2192 @@ -<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <metadata name="stateViewMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>17, 17</value>
- </metadata>
- <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>267, 17</value>
- </metadata>
- <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>152, 17</value>
- </metadata>
- <metadata name="openModelFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>422, 17</value>
- </metadata>
- <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA
- CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw
- AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA
- BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
- wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA
- AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ
- AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR
- kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA
- AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA
- AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ
- AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA
- dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA
- AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A
- B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9///
- +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
- AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA
- AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI
- CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA
- AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP
- ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1
- OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn
- XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29
- DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf
- LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG
- AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1
- WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm
- nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A
- vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq
- vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/
- AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc
- AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP//
- AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP//
- AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/
- AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4
- //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI
- YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj
- GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8
- OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin
- aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A
- vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k
- lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw
- pgB2dKAAdXKkAHZ0pQB5d6EAf32jAHt4pQBkbrQAc269AHZysgB7d7YAfHm0AA0AwQAOAMYADgDKAA4A
- zQAOBswAEAPBABcJzgAYC8kAHRDNAA8A0QAPANUADwzTAA8A2AAPAN0AFAfRABAA1gATBdQAEADaABMF
- 2gAQAN0AAh7ZAB8S3AAmG8MAIhbPACYayQAmGs8AKR3JACAT1QAjFtQAJBjSACYZ2QAoHNsAByLPABUs
- wwARKs8ABSHVAAgk1gAxJ8IANizCADAlzAAnPMIAPTTAACwh0wAzKdIANivRABAA4QAUBeMAEADlABoM
- 4QAQAOkAFATpABEA7QAXCOgAEQDwAEE2zgBUTMYATl7JAFxWxQBaaMUAaGLDAHx3wgCAfbMAg3/EAHGB
- hgB7gKMAf4a5AFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R
- 3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x
- 5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR
- /wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx
- /wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR
- /wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAA2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAA6Ki0tJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi0tLS0tMwAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAACctLS0tLS0VBUpTAAAAAAAAAAAAAAAAAAAAAAAAZ68dLS0tLS0tLS0BcHl2AAAAAAAAAGVeAAAA
- AAAAAAAAEy0tLS0tLC0tLSoDeXyCAAAAAABojgAAAAAAAAAAACwtLS0qKhoGGC0tLQ5Gep2IAAAAAKAA
- AAAAAAAAAAAqKioqLS0ZAj88Ky0tLQp6g59+pKOkAAAAAAAAAAAAACIqKioqJQA+Q0ILLS0tEUCDn5kA
- AAAAAAAAAAAAAAAAAFUAAAAAAEhEQ0MILS0tB3yfogAAAAAAAJYAAAAAAAAAXFYAAAAAdXVGRkUfLS0p
- O5+lAAAAAACLAAAAAAAAAAAAhmkAAABycXB1cEESLS0efKNqAAAAiqwAAAAAAAAAAAAAd01LR3NycXFx
- cz0qLS0Eo56loqKnAAAAAAAAAAAAAAAAAAAAenlzc3NzeQwtLRd0AAAAAAAAAAAAAAAAAAAAAAAAAACA
- f3l5eXp6fC4tLQkAAAAAAFoAAAAAAAAAAABdZgAAAE6BfH9/f4GDeyEtEAAAAACJAAAAAAAAAAAAAACa
- YwAAbZ2Dg4ODg52fSRQtIAAAjK4AAAAAAAAAAAAAAACFYgBXn52dnZ2dn6OjUCoqDYerAAAAAAAAAAAA
- AAAAAACbj5yXoZ+fn5+ho6WmNS0WAAAAAAAAAAAAAAAAAAAAAAAAAACVcJ+jo59GeAAAKC0zAAAAAAAA
- AAAAAAAAAAAAAAAAAFhxgaWlekZbAAAAGxUAAAAAAAAAAAAAAAAAAAAAAAAAb4NuqamtjWwAAAAAKi8A
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAXwAAAAAA
- AAAxJAAAAAAAAAAAAAAAAAAAAAAAALBrAAAATwAAAAAAAAAmNAAAAAAAAAAAAAAAAAAAAAAAkQAAAACY
- YQAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAFRgAAAAAACTAAAAAAAAAAAwAAAAAAAAAAAAAAAAAABZkgAA
- AAAAAACTAAAAAAAAADgAAAAAAAAAAAAAAABfkJQAAAAAAAAAALGETFEAAAAAADcAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAACqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CA
- B//vgAfv54AH3/OAA5/4AAA//4AH//+AB9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7
- fz//87+f//ef3//n3+//z+/v/x/h9///+f///////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAABHw/AAZYXQAGY1sAEUJxAAC8BgANug0AAq0cAByvHAANiiwAAp4iAASN
- OQAjoS0AJbglADeoNwAAxgAAAMgAAADACAA4wjgAPZNSAEasRgBYtlgAX7hfAEWJZQBgl3cAZMdlAGzE
- bAALK54ADQC2AA0BvgAMErIADCWzAC8lvQAzKbgACkqUAFhTpwBXUa0AVE2/AEdVswBSYL8AamasAHp+
- oQB2dakAcnmsAH57rgBnYbsAcHizAHt4swAOAMAADQ3AAA4AygAPANUADwDdABAC0QAVB9oAEADeACke
- xQA2K80ANivVABAA4AAQAOUAEQDpAFZOxwBQR80AfHTkAIB9rwCCfc4AeoG1AHiBvAB2gckAAM9AAADw
- SgAR/1sAMf9xAFH/hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvP
- AAAO8AAAIP8SAD3/MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEyw
- AABZzwAAZ/AAAHj/EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQ
- AACOsAAAqc8AAMLwAADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBb
- AACQdAAAsI4AAM+pAADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAi
- AABwMAAAkD4AALBNAADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8D
- AABQBAAAcAYAAJAJAACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAA
- AAAvAA4AUAAXAHAAIQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP//
- /wAAAAAALwAgAFAANgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R
- 8AD///8AAAAAACwALwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx
- /wD70f8A////AAAAAAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R
- /wDcsf8A69H/AP///wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx
- /wCmkf8Av7H/ANrR/wD///8AAAAAAAAOAAAAAAAAAAAAAAAAABYPEAgAAAAAAAAAAAAAAAwPDw8QAjUA
- AABBAAAAAA0PDwkEDwUeNiMkAAAAAAAXFRoqHAMQATsAAAAAAAAAACwAKDAdCw8bJQAAAAAAAAAALSEy
- MjEHCjlAAAAAAAAAAAAAMzMzHxEYAAAAAAAAAAAvADs3NzwiBilCAAAAAAAAAAA+ND00PxkTAAAAAAAA
- AAAAADg6IAAAEgAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAALgBEAAAAAAAAAAAAAAAAKwAAACYAAAAA
- AAAAAAAARQAAAAAAJ0MAAAAAAAAAAAAAAAAAAAAAAAAAAPv/AADh/wAAwHcAAIAPAACAPwAA0B8AAOAP
- AAD4HwAA6AcAAPgPAAD8bwAA//cAAP1/AAD7vwAA988AAP//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
- AQAIBgAAAFxyqGYAAHzjSURBVHja7F0HgBPV1v4mfbPZvuwCIkXFhr377A1siGJBUECaIgpYAQEFUWkq
- IlhApAkWREFQsfvs79fnsyv6LA87vWxJT+Y/ZyY3mWTTN9nNLjl6SXaSzNy5c8936j1XQp7ylKfdlqTm
- 7kCe8pSn5qM8AOQpT7sx5QEgT3najSkPAHnK025MeQDIU552Y8oDQJ7y1LJJwmEw4id4UQdZc1xO7sd5
- ylOeWipJ6AIbzkAZluBPggDB9DLyAJCnPLVqklAEE8YR+z+MD/AXnHTMH2h5AMhTnlo1GaDHZPTGj9iK
- pfgYKsMz83sRAoGElAeAPOWp5ZEO5+EIXIL+uJ5goF5hdh81NzUP8hpAnvLUaomdfu0wE49jIibhE/wK
- VeIz87MZIDSAJE+WpzzlqaWQhGJYyOZfiN/wCybg0cBxlvp2qADAmkBS0l89YZ7ylKeWQnpMJ6X/MAwn
- 5f9SbFGYniV+faCxFpC09GfKA0Ce8tQySEcsfwZGY4Wi/C/B21CZnUGghpoDKhgkLf2Z8gCQpzzlPkk4
- FXuRxf8KNmEzBpMWYFdUfVb5d1GrpeZCitJfPXGe8pSnXCYJbWDDQ1iGPdEDYzAIH+BnqAzPzL8Tqvqf
- ku0fOnme8pTbJEW8j2yC5IiGKK8tjSRifQPuxV1k999CjP8cxmEusTqr+qz2b4cKAq507zEPAHnKNZI0
- r9x0gaY/x4IOexhx3IkmHLK/BfsagAr6QiE1Hem+Oz3A5u0+/L3Ojh93+fDRaw58t8UfDItpk2NaCiDo
- MAC9MZwsfhcp/UPp3c/YBlXib4UKAEL6N2qw85Sn5iYt4ysMb5FgOdWCrv1s6He0Bb0MErpIKcxZv4xa
- ux8fv2LHywtr8dzPXmyWVWYRtnIuA4EO3XEgbsc60gE64Ak8iHl4hXrMdj+DwGao0l8k/qRFeQBoSJES
- SDLRwyjSoYBmZQE4FKMOuI/+cezyw+FpmH+dyxMr10iMt5D0hrY6lFxuwxm9bRjUTo+TJAmmxl6k3o9v
- R21Gv3fd+C9Ub3laNnOTjUkXVOMRrEQZTsQGfEuyfzJZ++zs20FtI1QQYM9/yo6/8AvliamB9Kkkhj/A
- gE6nWXFUZwOOP8KM/Sw6dKYvKJORZo7bLePXjx34kiTL68vq8K8/fcrDEepm4Gt5ikMCZBlUDUUSrCTt
- zxhShJvLDTgaGZ6fP3uwrt8mDNrmVyRnSjnzTTomZbDgAczE/rieeunGDHr/Ij6FavdvggoAtUgj7Nfw
- Yrs3aZ1JerIpDWRY7tG7EGedYcVF7Q04lj4okhKMkixDrpfx+Zo6LF1MquavPmxBHgjikda+Z+Y3nkAA
- e2MpxhxqRm+Jl7pkgUhl29V3E875zI2voTrOGs1AGScd3fto9MdlpPCz5vMxPsA4PEqynpmf1f6/oEr/
- tMJ+kbQ7A4B2EhqMgHlUMS66shgTC3XYKxVbUxABgX+bD5/M2IlJrznwgUMOZmYlvTijlZNW01IYv1iC
- bUQxLu9bhFutOnTI9oS8ewcuWVKLf0JNoEk5cy7LpEMfHEcA8CK9K0cdaSq3kvz/HD9BZfo/oWoAdVDB
- q9G0uwMAMz+r9OajTOi6qAqrLRL2UD5sxMh4Zex4xY7779iOR+vk4MPa3f0DWlufJbxxXz3a31aGcScU
- oJ9OgrkpOjFhO/quqFMAgFVosYY+F0hCB7L7l+J1FOJgmiUyVuMl3IfnqIcc62fJzwDAnn8GrozMo90Z
- AHgikuBXJl7hxFIMGlCEe8SHjQEAJtIG3B86sHTcNkzcJIfZnMrHzX3zTUxh2hY18ykWHDSlDPeRmXUM
- jbWuKTpBwGy/cjP6ferCf6Am0LATLe0QWkbHp5rsfjXZ52LlyEb8jeuI/f+kV9Xm/x2q9Ldnss+7MwCw
- CqowP7Wie8sxo1chLhEfNhYAmAgEfN+4sGbcdoz6r1eJ2+6OIKB19BmJ+y1DbTjnmlJMt5HMy8Q4J0tf
- u/DvAZsxulZWpCk7bBsVQ88g6XEvbsaJmEojpace+fAInsKTeIc+Y38SMz/3mUGrUWG/SNqdAYAlEYf1
- iqmV3V+B+3pa0UN8mKmJSU9K/t2N14ZtwaBffMEHuLuAgJb5TTTgBXeWYdDFNkwySArwNhk5/agn9f/u
- NXa8ATWJJlcAQIfhOA/9ieH1sClHvsd/cS1BgENx+v0BFQAYCBod9ouk3RkAWP3nAS+lVjmzAndeaMU5
- 4sNMSibm8p9dWH3pJgypQ3AJZy6GoDJJgvkVe58QoHBuJW4+qwC3pKvyk0bFg+bf7kftejf+/t6DHbt8
- cPAgFupg7mKAra0eRXsYUF5Gr/rA/N7ow8YHduKJF+x4CyojsUONwZifRXP6AHQ4EvuQov8aGQCdld66
- SUDcSMbAf/AdVKnPBT/YDOAoQMZzF3ZnAGDnXxG1CmptBtlw4W1luEV8mA3V9J92PHLdVkzwqEieUumm
- FkZae99EKlbJA20w5WQLrqJxTXlk/TJkZvp19fjmLQfWf+zCH96GyTzatGGpXAfTPkYUkY3n/tSN7wkl
- mPFZ8gvmb24nICf7VGA2VpD9f7pyhO/kdfwLk/AMVHufmZ+l//ZAXzM+V3Z3AGD1nwGgqoMe+z/XFlNp
- 4lQqAxNlZGQ1j9THIUKaZbpUQYImsufpOoyasgNP+sPj0K0JBMKYv0xC+exKTP2HBX1TZX4e7x1+1K2u
- x6dP1OLjP31BDzg3H2IDgNAweHzFenl2xO4IvNYgFAZsjrHnyj5mzMI0dMNoiHGpRR0G4gGS+8z4v0EF
- ABH2y4qpsjsDAJsAQQ2AWvVlheg+vgwDrBKszNw+GX6egP/zYNv3pHJ+5cbWGj8cegn6NmSvHWdBhyNN
- 6ETvEyYLCSJbdNuYbbj8FQchvToBRTy3NYBAmKe/UELZgxWYckoBrkxV7Xf54XnPifVzd+Ht7zyKHSxK
- Xrk045YMAPBv2NZniV8XeLWjOROBjDQ+16Iv/cfJPlblGPdiPl7CErwJ1e7/H9SwH4NWRh1/WtqdAYAn
- qfABMAhU0oEqYupDzrfiGGJ0z79d+PtHDzZu8Coqo3ZFmZjkhk4GVFxhwxGX2HA4rxdI5sJbvfhi5FZc
- SarpL1Afbi7npSdLYZKfmX9aOcafY8UQYv6kM/tY6m/2YSfZ7K+tteMzd0haMxM7A00LAEKF1yHkcBQA
- wJ+7Ar/hczgCjY81lwmmwwU4FmOwikalbfDoBpL7QwkC6hTJz8zPr1uQZT/F7gwAPFGYYVkLKNM0BgT2
- UHOIUJRbjjbZlIlOzcLtBDP2nlSOc7sYFW0iLnHq8OcurBq2BdfXyGGRgZYKAlqHn5k0qOK7ynFTTyuu
- 16WwkIeZn8bl50k7sHq9R1F/hdTmJhhYqwEIUNamdGs1AH9gbD2a34m/m2O8JeyHdrgPz9MsOS541Etz
- azyW4z0lP2FDoLEDsAZZ1lJ2ZwDgScJMzioYg0BxoPF7BgZj4HtexAYAc+C7DBi2joTo91fgwsPM6Jzo
- 4n4Z7uW1uG3aTiz0htdza2kgoGV+Ew2IbVwZBvWz4Q4ylSzJnoTGw/9CPf5v6k6s2+lXwl88+WsDjaW/
- 1gQQWpOWibUAIOa12CxDC+KRv2u6caqiufIQqf17on8Y572HrzEBz9BdsdRnrZAdf9vQBE7K3RkAxKTl
- SWoNNGZkZmhz4LNEGoAAEDYlSqgVtdOj7b0EAsda0DVRB+x+/HXLNvR9w6Egv5BqLQkAwuL8NCiFQ224
- 4IZS3E9/FCd7ErcMz5ydeGVxLd5xharc1ASaVvoLCa4No2oBQNsnoGH6dWTFoKYbJ/aBTMZIdCf5Lynj
- pVId3dv1WIzv8S1U1X8D1My/jOX7x+/Y7ktCWrCkV9YDBJopcCy47h/hkkP8VqQRCzOCAYDNh5IOerSf
- 1wZX7GdS1xXEIlZ5//Di3cs3YcBmv2LvaRcP5TppJS6PmfUsC06YVYkFBbrEZpCgOj/sd+/AqtX1+Nin
- Orx2BprQAITdLhhf6y9pCeMEZYyG4h8YjFfonS3sk2fwAebgRXrqG6ACAEt/HocmiVDszgAg7l8faErC
- CkJOJG6x9lsLqrwImQAMAEFfwl4GdHq8CgMJDCriRQjYH7CyDpNu34G5/paVHxBM7+UxOMKEfRdX4flC
- Hdone4J6Yv7btuHJdQ58BnXSCwDQMn+kyo8WMDbh47QfCYLHiNHN6BT2yZ+k5o/AImxSipQI6c/mT0bz
- /eN3bvemyEIgWvtRkGB8f8TvIs0A1gJYAyiHGlUoP9aM/R+uxIASffy0V6+M7ddsRs/3XPgKubpOveG4
- Ce2poI0OlS+2xcpKAw5N9gQ1ftRP3Ibl61TzhxmfVX9mflb/Wf0VKn80db+lkIS2JCAex3M0I84Jm1k+
- uqd78RJeUPL9NyAU9tuJJnz+uzsApEuRS1tZE1AWFUHVADiZSAGBfjacMKEMF5kShMK+dOHlqzZjaF3u
- RwWE6s/Mb6EbLyaQm3KaFVcle4JdPtRN2oGnXrLjE6jML7LzBPOLUF9LlfrqOJlojO7AJJyBsWF2P9MX
- xPA34QmS9cz47PhjByBnKmY83z9+J/PUGNJWtRErC9n5xVqAAgL0YeW0clx6UaGy7DXmeHMxkQd2Ysij
- tViNUFQgV9aqa+9XqP7sPC28vgiXjirFLF2SsX5m/snE/C/alS2tWeprmb8eITNI2PotjfFV0tN/N+Bi
- +m8xzRBr2Gd20vJuwwoagX8jpPpnLd8/HuUBoPGkBQERURCmADvDKst0aPdUNYbvbcAe8fwBZBP/fMZf
- OGubGgZjUyDXEoQE8ytmz8kWHDG3EkvJ7q9O5sd2PxwTt2P5Wjv+Dyrjbw80nvha5m+pKr8gHU4hc2gy
- nicDoEvYJ3xHb5Cpdyeeoae7ASHHH49DRsp8pUJ5AMgMaX0CDALaDEMFBI4xo9vjbXB1gS5+5Zvn6jD1
- tu24D6ojKJccglq739pOh/ZLq/B4F5NSNzEheWX4pu3As0vrlFRXnuxiSa6Q/E60DuaX0I0s/5nE4BU4
- ucGn28nEuR5LSOn/BiHpn9V8//idzVOmSMsgDAJKnQEEFhtRqxxahDPHlKFXvEF3+bHtqs04m1ewIXcc
- gmF2v0VCCZk1Y863YrgUadtGIY50LKjBK/ftwmp/aEWeiPdHMn+umT2pjZOVZP4M+u8ojEDk+gc/Pcel
- eBfz8TJCjj/O+2cTqFkWJuUBILMUFhdHyB/AWkAbYpy2i9tg6FEW7BvrBMwsnzjx9JVbMAqhLZ+bWyJq
- /Ry23lZ0v7sCD5kkxemZkN4ge/+mbVjqkBVJJ3a0EXvatRbm56duINt+CM7GbETLgvwdW+jTBWTw8N5+
- zPyc7izCfs1y73kAyDyJcKJwCnJ+ADsEGQSqDjPhwCeqcC2ZAjHTZN0yaq/dgovecypOorS2fc4gaUGt
- cE89Oi2vxuI9DDg4mR+vd+N/gzbjoa3+4OIWwfzC2986mJ/H6EIch1uxlqCyosGnLP0nYiXexkcISX/O
- 9xf1Ipvl+eYBIPOkzY0X/gARGqwiTqq6sQTnDy8hORGDOEPwUxdW9tuM66AySnNlCGpV/wJCgJL7KpQV
- fsOSWdu/1Ysdw7ZgztcerEeoEs8OhOL8rYX5JRxOdv99eIUgP3ouxL/xE+l0S+kJstQX+f6sDTVrZeI8
- AGSHovkDhEOwqlSHDqwFHGBCx1gn8MioIS3g0nedSrisucKCwRV+1IrOKcCJD1RikUGKSGeNQg4/HGO2
- Y+ErdqXugajGw8xfg9bG/CYan2fxDKrRKypHueheh+Jx/KhsSLIBoXx/znZs1khPHgCyRwIEIk0Bdgi2
- 6VGAY2dV4iqyo42xTvCFC2sHbsZwuxx0EjWlFhCm+pdKqF5ehfn7m3FCoh9yIZWHd+GFuTVYI6vML1R/
- bSWe1sH8RlL4p+NmGpXpUb/BT2sFqf0PkmkgK2q/cPxltL5/+jeQp2ySNj+ApaZwCFaZJWXp8IDuBTgy
- Vm4AMVLdrdsw4EU7WY5NrwWIsGYBda94RBH63VCGaYl2TGIn5ntOfD5qK+bXy0pyi1D9Raxfm9/Q3NGN
- xo/RKJyLvngOsTY2+ZsYfTBJ/x0k/5sp3z8e5QEgu6S1oTkqwFpA0BTY34j9FrXBiDYGJWcgKn3sxOrB
- m3GdW3UWiUSRbDOOVnuxtdOj05q2eLpcj70T/fA3D/4evAUPbPAq21lpK/DWoXXVQdThJHTFXXhVqegb
- jTjffyZewpoG+f6N3tY7U5QHgOxTcL08IhyC1NrcWoKLhhajhy6GU81D6v/wLehLUpVtae1qwWz2Nwha
- 9KZkShlG9S3CjYl+6PTDPXYb5r/swAcIt/uF06+1lENXK/rOJcu/AqfF5KL/4BfcguV05+z0a7Z8//g3
- kqemIG2WoMgNUACApGuXZVUY2cmoqQ8XQe858NSILbjZFdICsilBtbn+RfsYsM/adlhjkhTgikms+r9k
- x/u3bMPjPjWzjQFA6/RrSbUO4o9PEWlGd2MajsFIxEqE4nz/W/AUPlOWOgvVn8N+ze74C7+ZPDUFRSYI
- KZuRIGAK9LfhzPFluMwQYzK5/Nh65Sb0+sKjVI0RG4tkYwIJ6R/s5/xK3HWGFf0S/fBPDzb224xpf/oU
- SSdUf5HpJ1b25cSkbxSZ6BndRlZ9D8xusMhHS2vwKan/qzT5/iz9Rb5/zoxDHgCajsIkKzQOwQIJ7VZW
- 48b9TBEFIzS0ohYzb9+B+2RVgmRrW2tt/kLRP8w4fGEVVhql+NWOvTK8123BrLfUkGWk6t+6nH7n4liM
- w/MEBO1ifmszAd9ILMWvwTJfHPvnsF8ubEUWRnkAaDqK5hAMagG9rDhpegWuiqUF1Pjxv7P/Qs8takad
- 2NU2kwyllf7KYqZHK3DnmST9E+15sKIOr03cjqWy6t3Wqv4i0681ML+EI9GeFP/VZMQdHfNbnPE3D2/i
- CbyGcMdfVuv7p39TeWpK0joERfEQBQDIPqh+vho3dTNh7xi7EskP7cKNc2qwHKpk1W4ymqm+Bf0UB5qw
- 79NVWFWoix2hYNrsw6aef2PytlCqr1D9tfH+nJr0aY2NjUB7Lh7D/mQOxeIavssfyc7nIp9qvr9w/GW9
- vn/6N5anpqZgai1CYUF2CFYdTyr34iqM1sfYRedXN97vuQn9HbLCZMKTnCnmEj4KRfpPL8etFxfGT/nl
- Ut43bcOcl+x4D6r0Z9Vfu8inNdj9HOHXYwqx9cmYhXgp0JzxNx7P4kPFFNqAJqzvn/7N5ampSesQFGFB
- RQvg9mglhpHafWS0H/LeggM3o8f/ufAFVCbLlEopNBNlu/ROBuy9ohpPVepjVzXm9QpvOvDR6K14xK3a
- tyLbTxTzbD3x/gHojuFY2aCib9iAUHuXbP7b8FQg3184/hism7zQR7KUB4DmIaFuKwwHjRZwiBHdniRT
- wBKjcMiL9XiEpO4UqFIlUxNLrFvglOWykcW4alQJxsfbz2+TF5sJjKb/5MUPCDn+IlN9WzrzSzgRnTAd
- /6Sn1TnuN2sI9K7FIlL8YxX6yMmxyANA81BYnj3CVwu2nVqOKy624aRoP3T48ceJf+LUGjloVzZ2com+
- sO1fUiSh7TPVWLCfCUfE+gF7/adsx6Kn6hVHl1D9o3n9WzJx5kMRluA5VOOsuN/kO+WNvR7GSwgv9NFk
- 9f3Tv8k8NReFOd2g2aV4XyP2JxX8Jpsuejnx8dvQd2U93kBmnIHCJ8HXKj3DglMfaoOHjFLsGPe7Dnw6
- civm2mXFvtUu9Gktqr9Eo2HA/bgHh+IWJFr6zPn+AzCfjJ9ohT5yKuzX8Ebz1FykDbspzAdNRGB8KS4d
- WBxd8nzgwPJBWzAWqrddONvS7YPQRIrpTcWcCkw6uxCXxfrBNh+2D9uC+75yK0tbeZKLXP/WpPrrcSv6
- 4kJian2cZB8E7nQKVuEVvI/wjL+cyfePR3kAaF7SJgdpU4SruxjQlVTxm8r1SqQgjOr8+PuMv3DKdn9Q
- yqTrYRbXV7L+6Jr70jUXVeixZ7Qvs9f/kRqsfHAXnpNDqj9L/8iFPi2ZdOiFw3ET1sKcxC5HXN9/JBkK
- nuBSX+H4y5l8/3iUB4DmJW1ykNAC2BdQLamVgy68tgTnR/6IGNE3dhuuesGu2OCNyQwUGoiSmdjPhgvu
- LMOMWM6/b9z4YeBmzNzlV+xbBgCt6t8aEn54G6/2eJDs/hIcl5A7OOx3PZaSLsRRGW19/5zK949/w3lq
- btLW2tdqAVVt9eiyvAqjIxcKcQjuQyeeIDNgPFT1O10zQGgfJQYCnkcqMe10K86N9kWu6T+CVP8PXEqd
- QuH1FzH/1qD6SzTyFjyAR7EvWfRJlDzDCzQWM7Ga7lxIf219/xYxFnkAaH6KTBEWWoACApcX4vTJ5eir
- j0gR3urD793/wum1ssKIzISpqt/CCcnXLO9kwH6rqrGwRN9Q7SWNQ15aizX37MRTaKj6O9O4du6Rhcbi
- HtyIf2AqktnlaAvZ+EPwOI0Gb+zJGX8bAmOTc/n+8SgPALlBWi0gbKGQTUL7BW0w/CgL9tf+wCvDMWor
- rnzDoTifWA1PNdwk1H8lAnGFDT0JaGZEVvxhbeNHD36+fBPuqQl5/UWFn1zbvCQ9YpPncpxJtjwn+xQn
- /D7n+8/GK3gWb6Hhxp457/gLv/U85QJpKwlrFwopNQNOs+CoBysxTFtKnGfYEzWYefdOslhVj3OqTieh
- /peS6lH1UCXuPiOK+u/ywzVkC6b/n0tZ1x5N9W8Rtm4cknAKuuJOrEEEyMakb0jVvxFPkKXPVY9E2I/H
- pkU4/sJvPk+5QmFluKBJESZUqJ5TicFnFuAo7UKh/7rx8QUb0denSuRUkoKExsGOx/IqPfZa1xaLSvXh
- VYpZ+i+Jrvqzk6s1qP4S2pHJ9SCepDs/J6lfOEnC306awvvK/oYboAIAO/4YhFscGOYBILdIu1AoLDmo
- mxH7L63CaLLRg/nodX5sGbAZF37tVtJxmSmTVT/D1P/uBTj54Uo8Gun9J4D5pe8mTNslK15/7Uq/yE08
- WyKxV8WAubgDh2NCUk4/vtO38DWmkPLvDm7r/XtgXJwtcSzyAJBbFLlQSOsQbHNHGS690oazxAo9vwz3
- mG24fo0dLyK8aGgi4msoqxHpRG0mleGGK2y4SqtdOP1wXLMF93/owqcIT/iJrOzbUkmHIeiNoaTKJyh4
- EiTe2PNGLCO4/QqhsB8vhGqWjT0zQXkAyD2KlSJcVaVD+9XtMI5U9krx5TftWHLtVpJioWy8RBNRm/xT
- Xihhj7VtMa+jAQcJAGDVfzGp/jN24pmI+n6Rqn9LBQAdzid7fxzeppFOamtzxfG3BO/iMaxDC8v3j0d5
- AMg9ipYiLCoHVQy04dQJZRgotICfPPj6so24tFbdeDOZcKAwMzjaUNHVgANfaodnSSUwCgBY78ZPgzbj
- vq3+oHOrdan+e6AE80lrqsCJSXPABtKCeLVfqL4/Z/y1iHz/+IORp1ykWPUDK4lzS9a0xbiuJuzDXyRV
- fdvAzej3mRufI7lwoHA0KpGG4cW48pZSjGWpzwDg8MM+fAtmBVR/rddf7FHYklV/ieDUiNmYhf2IneMs
- dw4jL93zVKwh2d8i8/3jD0iecpHibShSeooF+z/WBhN1EvTEuP5J2zH66XqsQigrMJ4fIJj7zxuVLm6D
- qScUoLusTmF5QQ1W3bsLK6PU92sNm3roMZos/8sxJ+ZOPpHEd/oZfsb1ZACEF/po9o09M0F5AMhd0q7T
- 124oUk4HrQ9UYtA5VnTnL71px7Jrt+J2qCG6eCqp8C8o25SRjdH2kw54zqZDWwaAr9z4dsgW3L/Tr0g3
- nuCtR/VnaX8VTsZQPE8wUJ7071wEelfjcfygrH7UOv7YH+Jt7ttq/LDkKZcpuD8fQg5BboWdDWjzbDWm
- lulR9ZMHX/bbhL47/EGPdCw/gPAtsEZRfqwZhzxZjRX8Qa0fNSO3YOYHLsXDLZi/9aj+h6Az7scLZFAd
- ktIvV+ETpb5/uOOvReX7xx+YPDUlSZpXRcITZxv2gK5Sp0plFsT1O+HfuiVkW0Y6BFl6FdNB09VFOPPm
- UoyiL+7oQwDwjVtZlRbPDyA0CuU8w4twxS1lGMfLfJfU4umpO7ESKtMz87cWr7+EjnS/s7AAHXBxSr/c
- TvffH/NoNCI39mxR+f7xBydPTUVBpqdmIH2+YCDMJ5wNU99jYTjeAIlX/Pn9kLf+Ct/nq+Fe/ghcb2+C
- XB/4nVgnwKYAS3BLiQ7WZVW4Y38Tjpy6HdctqSMJFyoSEs02Fdl/DABlz1RhxpFm9FjvwVcDNuMuUv2Z
- 6blpt/IWzK/0f09IlnLoyugPPV2gnvq6c1fDjT9yBSh4+24TJmEszsAdMbfxikYy/TcL6wgSeWdmwfwt
- Mt8//gDlqSlIMD5PQGM36KpnwXr70TBeRh9YZc2XxBfp1fUVPM+Pgn38f+DfjJD0ZlOAAYAdefoeBTh4
- ViVmvGHHyhu2KfkAoia/L0ofhP1fSipF2ccd8DJ1qOC6LRj3vkvJJmSw2YlQToHC/HRh/Ukw7H0tLJcd
- Cv2pbaFrT8cMBAA16+H972p4nn0CrnUEVtpS4M3PIHr671r0Rj8sRozyajHpG/ymOP6cSrafcPy1yHz/
- eJQHgOxTUOpTM3WGVPkkbA/uC8P5/sD4C/GKwBcFUlDz/wzfq5ehdvh/IW9HSIKzJsAAYCRG1hMAjDrA
- iK6Xb8IVW/xBFTXSD6At/lF8qgUHzW+D50j1f2TaTjwH1Wxge1+7n59EaodpAiz9hsEyzgKpQyyw+hbe
- Ndeg/rYv4f8ToV2AgeYDAh1OxQG4i6S4MXyNQ0Jyk4S/BU+T9c+hULHWXxT6aOnrH8IoDwDZJe0qPzP9
- Y1sA63hS+0cQd+gixaTKUJJgftF8r8H9yEDUT7arqieHBlmKs2OQGVp3kBHtHm6DKYM2Y/QvXqUwZbQy
- YcKMYACxXVOEvj0LcVafTRhbLysmAzu16hAq78VkWoiCWy+A+QaZsCBy1mvBil7lrfD/uw/qBvwbvl8D
- 128ux6GEvVGOOViLCvwj5V+/ii9xDyn/4WW+hOOv1Uh/daDylE0SzK/stnsq9Ic9gSK20608i/xRvhxi
- fLUqBTfioB19UdvrVXi/DnyVTQHWAMzE0eYTYdjjhkLdUNllcLX1GkxWSFVG1Vkors2M6KHrOe2QN22h
- VlnoOeRtj//lF9y+9z+Cj6U2gwBLfod6SRhHw3zuWBTMZ0XArxjF4X3VBTJpRJ/pYvLX8L5wEequ3gxZ
- W7G4KUFAHcZleAj74JqUZ/gOAsDrsJQUf67vz+q/2Nizxeb7x6M8AGSXxMIeJYw3G9Y7esE0mGdRJAAI
- dVowlMr8kiLu+f1yuGdfh/qZ9Na7J3RFvWA8+wIYTyFT4qhSSO3oOyZ2zCWzqE0lhaG9pOe7tpGl8X/w
- vv8KPC+9CM+XNZDltpBKX0PxmnJI+wox7tf0VevU0IIVHXNOhH3QXLheRih5qKmkptq1sWT1X0j2eypO
- PwRu8nG8jUWkA8iK048BQOT7txrHn5byAJBdCm61Ta30UxQ/XwTpAAEAwgSIZCiDhqGMARDYBP9n98Ix
- 91KYehwFYw86aamERPv2RqdoP2I4oBnu3w7/hlXwvLwT/trBMI/xQzJo+yp+H+GrCAOr7+B7pztq+tSF
- FyxtCubRoT+OwXBi4CjVlBPSzyTp2fEXyvfX1vdvVaq/oDwAZI/C6vzRH5XfoOQjmkVGLQAI0jKTMQAA
- RoQAgL7rJxtbshHTFyrHkn90UoLPVOkuK5xaT6+7Aj0z06c+eh9pyMeS/qKvdK6N56D2on/D9x3CNwvJ
- 7ngfiHZKqa7iFJN9mNzUx7uwGm/gQ4SSfkS+f6ty/GkpDwDZI23svrwDdB1fhu11b4CptACgGq1SUPVX
- JanKTCalqYr9n/Qr0iCUZk6qgkX8zmnJS71hTq2lV9ICSG1R+xPNXImw+4N9FQBAxx3nofbyj+BlZhL1
- A7LJQBIqle27H0VnXJny0HDPPsT3GI+nAoU+tPX9W3y+fzzKA0D2iMdWZN1Vct79ByheRzPJEGkUR6r+
- gplMgffM7Kyi/0athN5zs6QBAPG+76Fzs/TfCS4z7CchqhomkRqAcP4ZILSVkMYiwIree3uidsAH8L6D
- +IlJmRlnM11yHG7B2bgzgEGpUQ2p+DdhOb7Bl2iF+f7xKA8A2SNRdSe45dca2OaXQdeZGUq4k7Wef60U
- NQUAQDCVE1yXy49yZUWrjsRd7EeX7EPVfs9F51elP+86qmoaOoRrAFrbPxystP1lzUF29kTdENIAePms
- qCKUHQAw0OUGogcGEwPrlSzJ1IiRdSX+D7OULMoNgcZlvnagleT7x6M8AGSPBAAEi3uOgWVkDxjP02oA
- qvQPOdC0jCQAgDWAjfQLts0rlE1rVQBI5+HF+o0rYPtvo+tspVd1BZIUdOELZ6XIaNLa/OH9ldgHsJM0
- gGGfwseJNGLX4GyE0HT4Bw7A3XieBmS/tM6wkfo3FI/TTXN9f63jr9Xk+8ejPABkj7QagLLd16HQHz0V
- 1sl+NY02KP0F42uZyRxgKHPge+tpLrLaX0GnLVWK2CUHAIm+I5yAWgDYAjUzqExjAojvRjNTQn1WX3+E
- 99tzUTu8Rs2dF4uKMs1MEval4bgXy1BNyn86xJ7P+/EywQfn+29AqL5/iy/0kSzlASB7JHwAophHNTF7
- +9EwDz4BptN4ZgXzg6EykxkhiW/WMNff4HW+MqEI716lC/gAkn14UhJHQgCwPQAAWxVzQ6d814eIfGYN
- WJk1kj/Qf//9cD48E87lUCVpNjQAvpgZMzAVx2J00pV9Imk9WVW81t8TZP5Wme8fj/IAkD0K23gTqhnQ
- zgZ0vgUFV+8HfVetyq+V+Op7laF20Dz8kXinhOZ4pWL/q1EAU4omgBTjL6EBuAM+gB0BH8BmasyxJYoW
- IIWBVaR5IiQ/v/4G/08Xo3b835A5iUZUFMqsD4AX+UxAP5xDzKt2JXXyUX9G4Qn8h/4Lr+/f6vL941Ee
- ALJHIg2Yc+9ZC2AA4CW/7btAd+gNsAxuB53FEsFAWsm/RWF+1SNfoUh/SXlvzVAegBYGRBRANQNkBQC2
- BMKB1qCXP7yvWgDgVwIRx1DUzXgfvo+gVhPmwiLp7FoUj3TE+IfhdlLbdWkk+wh6HV9hEp4JlPkS9f05
- 379F1vdPl/IAkF2KLO/dbm/oDh8M8830vg3b022ptaGZrK7sUVVrZsTfiV9q6LU8oPYL5rcFGE4f49Gl
- 6xdgac8zX+QBbA2YAQwGnMlUCR0sGmaPBAI2mL+C1/8+PK8shnuOM7Rhhigqkgmm4so+VXiImN+EA9M+
- Sy3suAqPkbX/PUL5/gxYrTLfPx7lASB7pK3pp5TgPhT6I8fAMo2U9/Y7iblqA8k3cuBL/APWPfXKD1R1
- vzQQ9itRmB8KExoD6n8m8gDEMRbPbkULgAI8OwIOwW2B93pqbakfFUoEQgUBQ+D3HKH4kz4vUjUV3//B
- 8/T9cM6sDcXSRTpw48bTQv89Qf/tiUvSnrk82PPxFpbgNSC41l8U+mix9f3TpTwAZIfEuCrLgKkVHwF9
- t9koXGiAvCer2Vxup45e7WoOvuKQlgLqvyUg6YsD9j6rD4UBz7+aadf4CEDkZxwOZ/DhwLcwBXYFmH+H
- 0l8Gq1B4UE35VTmGb7AsoKmUqYlK3n/CvWAcHPfUqWp1Y9cDSMr23XfhVpyIKSkv8tHSLwRK12Ix3dxP
- CEl/9lW02nz/eJQHgOyQdouvgr0gdVwO2+PV0B3JDM96Zn3A5nYGcvBFWJAZiwGgMNhUhhNMZ0hT+ms7
- Fu1vWUlPVn0BzoAmUBcAgZqAg1DdC1wORgVEX22B7ETRipT+wr0Qrjsmw/GYO7xASTogoCOmPQ/98SS9
- K0r7qXio65zv/zo+wG6U7x+P8gCQedJGzCxku7d5EoUPHAnDeSTpJWcgxu4MSFSWuCENIBRbtwSYnk0D
- oW6ny/yJnYBMstIDX0ATcAYYXgBVXeCYO9BXBPrK/SsMML0tAFrCRKBBqL0Xjuumw/mCV/UDpFMujCv7
- HITb8TydfJ9GPZkP8QMm4OlAmS9uu0W+fzzKA0BmSVsByELSu/gRWMeeD9O1dFjvC6j7nsCrG6rdLdJt
- RWKQNsNO5NnrUmD+ZJJ/Gv6tAgBzpgABdwCsHEHQUhcN+RDKYGT136pKfOVVOAmNgdChC/LffVFzyWvw
- fYHUy4tLZO9X4CFi2iqc2ajZWku3cRNpEF8rOyiJfH8O+4ky6rsl5QEgcyT4k3lYKb01CubLJ6JgKklu
- qxB7fg3DqzWz5Aa59mJloC7YQjZ/plT/hsdClQm1/VSBKgRYkWAVmQUozBSdZkD+hu+T81Db53v4NyF5
- fwCrFRbcg5k4WtnGK327n6/0DD7CXKylK2+ACgC7Tb5/PMoDQOZIyxPW7jAc+TgKl9ig49h/g5rZapNj
- 6sNSlpg+2vEQ24c+EX3yBQFLvEphYCVME7E6UDgodZqzsV7xGbzLT0DtSITqA8QHASOdaiwGkOX/SMDS
- SJ/+IDWfC31sVCofC8ffbpPvH492ZwCIXhgn/XPxnFcKgFRBarsKtvkHQH9iNKaKdpFYF25Mh1I7JseM
- LQig0vZH0pgkWi1F2yLO75sFx5CJcPIuO4n2GdShO47HHXiBkKUSjSHO+HsA6/BcWL4/O/5aVX3/dKm1
- AkDk/OPaWToTb4FNbX/ozIdAX1oInZUkm/IdssudZOO6SCzJ/4G37nfIyuTgSjySKq189F6mN35PuMNI
- iE7F7qd/imeh4IYrYL6RLytHfBEp/J3oeKKbT3Q80gTQAoAU5XvRj0kNviPF+J0T8tbeqDnnHfjWQwWB
- aP4ACcehA6YT01pwUIq33nDgviKmH63U99cW+uAMxd0m3z8etTYA0M45xZwuJYl8AYwHHwPj+efCeEQh
- pG6kplYjwPhxyMEbX1DbQWrwTmL6GrKFa/+Cv+YT+LY6aDLTZztpFv+9E/7tr8OzbTtd81QYDpuHwnmk
- FgfDVZkAgUwNTLS/tSaAFPc7scBAivl5ODDI+Am+109GzYAdoRV34cWRSlCIpViOtujV6Jt2wI2b8STZ
- H58h3PHHaRgtea/DjFFrAoCw2ppkj5p6w3jUrbDcthf0pwOpOZESpdqEbGTVM14P2b0D8pZKSIUl0JVq
- v5PseyRxPNUBSXQ8lgmQPPMjqAMkAwJkTHgehnPMGDgWIXzfQXad6jEbt+FwTGn0zfMZX8HndKZngeC2
- 3iLfv9XV90+XWgsAaD3wRiup4jfD3HckCqbokMJW0GEnTAwA3LyBEFltIEuuivAnHcZPxPDJAEIqmX+R
- x6Q4GkAyYJAMCIj3O+D/tSdqL/oMPi7CIZhRwkCch+FkradT1iuCdNtgNw7CYt9mrPeqjr8NQNjuyckO
- a6um1gAAWuY3EcNb7oK5/zBYpxErpu09jgcAgvl9mkq6nOHXjphfrNKLxuzJMH2mZ2QyzsBoJkDyTJ8c
- CEQck1+E67GBqL/DKTzxZ6AbJuEFmMj+zwCdNNPgPGyVfksppNpi6LYUQ/qVtI8vVsH9r/Xw//A7/AwE
- 2nqnuyUYtHQACGN+agWDYDpvKqxzjOoKvEacOD4A8KzxBLL5apUVc2ouvPg82mvk+3jH4h1PZlCSOR7L
- CZhI5Y//GjpHPCBwQd5xPeqvqYHsOtVmPGz6fEffLXvJ+2diRlZ/K2HQcDM6efToTM9kT6WWgrrikk5f
- +yf83zwF1+OL4Fr1p7r7stYfsFsBQUsGANH3IPNfQDb/g7AuLIK0R+NPHiskFpL+6mZ6qvTvqEnXSUbi
- N4X0jxyoWMcyqwHEdgpGvt8G/8YaA0ruu95RsOQyF/zp1fUJIx2pZJeONuGozw3oRM+EG69iLFZyFUL9
- 4l2RfoZ33TWou+lj+Hn3H22t1t0GBFo6AIhiugUHQbfXU7AtbA9d6ptCRD15bAAQ0l+smitVnNe6hBK/
- qU2A5NV/9crRnICR6cfJ2PiJTAHxN/tP5lzgxJSbHXCbM3PPB76kx8VTTehMaMLSvwNNkXKE9lHQ3gtn
- N2yC/4uhqO3/Dvw/oXk3NG0WaqkAIJ6lsm6mQllwY5t1FPTnZeqeogGAVvqLTTS4lt6eCaR/Y0J/qczE
- VJyAqYQBkwGBZPwB2u/x1T7Z34s+99diS0Vm+K1gO9B/mBkH/qmq/h2J+auhLlCKtYRaVkoC+T85H7X9
- NoS2Nt9tQKAlAkDYghtCgKLZKLjpMphvABIXh3QCbnrgW7fAX7cdfmedGotmJNHTRDHQSSWy54303kSm
- hIXzCOhvM0kQpfacWj9PcfxJuwIVe4oVH3r8jL/GgUD8uZgoYpGY+dWrxNIAkn2NBwLhoUDgzwo/LiXm
- /3o/X2ZmIZ305DkGnPW0UVH7OxPL7xGooJyogAqNr/xf+F7phdphf0DmMGFz7GrcLNTSAEDr9DPTG9sQ
- mC6aCut9OnUPvpjEWXxr4f7qdjje/gsyJ4LE2rVWO1eCa1ro5MZq6ApoQjEgWAuAkmNh6DICloP0cTL+
- Uon/J2L01AdLivgbMf8WYUDt8cYzf3R/QL1JxnUT6vF8D3fG7rX6OwlXjjJjrzqV+dkno5Zak8LWJcQi
- nh8fwb2gD+rG7wyFCls9CLQkANA6/Zj5rX1gPO0BFM4zIuGOMPJb8H47DPXP16jMzzMvFsprtVWd5lU0
- xedAb2zLUdj7dJj2TsX2byj5G86vxsy46Ha/FPd78ZyAjWP+hqaARyfj4cucmDzKkRGnH5PeBVww0YTj
- 3jcEpL9OCckWaaR/MuSH7J4Jx63T4VzqDd/UtNWCQEsBAC3zKwtuToX+4KWwLSNVPWHceD18v1+BusW/
- QeY0UK5zwbk7DADRc9HDmT+YXRhonFtgOxr6fZ9G0WC6vpJrkBoIZJbpEw1a+DEpxueJw4CpgkCkKcD3
- /fqxHlw1vQ72ggzdJA1c5zd03p5TjN72Xp2/PfS+9pD85dDJZJrpzPTMyHwzFCg5Iom3U/dA3jkJ9iEP
- w/W6L3y9QqsEgZYEAIL5LQdD2ms5ipaQjZdwschmsukGoW7Bx/DxUlAuUMnqHaN7rHXpsTQAEW4spAMl
- s2AdcDnMp6bL+E2dAtxQ/Y8EgvR9AMkcY/phTz8uebAWv7fPYBbuDnisN2K94Xuu6ivtJCm+nR5WPZll
- nmLFlwMLaQKFZ8HUZTjMR5eSGZfolPWQfx2J2oEr4f1Ujr1oqVVQSwAAwYAK81dDavsCbAu6Kktt4xOJ
- esf1qF+0Fp5PoC7/5CYAQGgATNrF8FKUJnbw4slTtDd0+6xG0d2V0FWKH2tfG76PzfiZiACk6/1X/w7J
- 53R8AMkyfw2NXN/7avHRkRksvsNFCpbhF8zDt5CV0l68yo+fsSjwKUoWmOmNeQBMh85A4dmFAYduPNoM
- 37fno/by7+D/GbG1xRZPuQ4AgvkVj38FpPJlKLz3GBh6J+o7L9u9A/an58H9BtS6b+zdFQAgSvH5YlxT
- iri+KPDJK/xKb4Clz62wjCTm0cXP+ovO+M2RAhzfAaj65hujAcT73CPJGHuTHYsvzZzTT6FfSaMbgX/S
- 02XTTrsRiSvwDfHc2Eyz0iQqHIeCk2+G5XQjpISLwzbA994FpAn8kloloxZFuQwAYeE+4ryiR2AdfzZM
- 10hJrOxbBNer4+FY6VVLPvPEYABgByCnfmqrW0UzASJfhfQvKQHaPYuiuQfBcAQQnbGTZfxMA0FqiT/R
- brZxGkC0z3mAnzjfhbFj7fA0eomPhrx06hn4P7yo1Pj7O9D4OQsPfjBaBPXZcYHlIvqjdAas5wyG+YTE
- PgGZt2Vb1wt1Q3+Dn8uHtbrwYK4CgJb5zfQUC++B5frBsNyqQ+K94F6E56MRqF/mCE0KIf2Z+UV12mQf
- JPeDpy5PoLITYTj+SdgeE3X+gNQYP1OrAJN5cMnF/8NDdg2PJX6NBQTc94+7eXHFrDrsLMkwz3yJvzAS
- qwnKOY2XG1f5YSbV7kIktjPkEDHvq8JbiZUSGlQuga3PuTAenHjVpyx/Ae+TF6N29OZQefNWAwK5CABa
- u1t5eNfD3GciCqYbVCaMS2/D+/kQ1C2qVScEMz+r/6wWCts/1QfIaqSyuQe1ihkouPFKWIbGYv70cwAy
- N3iJjsXL6lPfJ68JxMv0+6vSj8sfqMP6fTKU7CPITQA+Cs/iC3wNda0/V/kRW3tpnQzBdSIImG9Ql4eX
- 0ZvqF1E0+HAYOyW6HD1b33twz++L+gk16c2hnKVcA4CwWD+1gj4wnTgL1oXmJNb1fwjvt/1Rt6AmxPzC
- KaSWtU/djhNAxBKktC2kTjRpHm8H/b7JMH5TrwNoHPNH5gEkBoF46j8n+1x7Zz1eOdWT+Vm2jlh/Cp5H
- qNAHawAM9NoKv2HOY4Q0AJ5H7Lyt6Aipw5soGd4euoRziwuZLIHrntGwP+APL2TSokEgFwEgGOs/FLr9
- yN5eUgGpa6Iffg7fTwNQ99jfkEXNN54QrBJy6E94/bXrv5PtD/dF2eK7O4wnP47CecQcrFo2YP5MLAaK
- dzxWB5P5LL7tr161IdOnBwKc7PNgfyfuu9oJf/rFvKNTHT3LvngYW8g8V5mfQSDaxp5aYRKpBVQGWsWR
- BOYrUDSgbaCKUzzyQ7Y/COeYO+FY5m0lIJBLAKBF7IL2kNqtgO2RA6A/JcHvyEbz/W8Y6hf+D36eEOz0
- Y5tfMD+HhLSSP7VdaVTpUUKdq7wX1lv7wNw/mq2fLgjEOtaYQYx3LHkNQLw2BIF4QMCRuXUneTCSpL89
- bnJ2GsRdfBRv4AllY88NSLyxZwONEqopx5mjvFuzAgInw9BtEWx9kgEBL+Sae+EYNQPOVY3Y7ShnKFcA
- QOv0K6B5U7oAhRN6wDQ0UfFOkvy/XIP6Rb+ozC8kP08I9vgL5k/nIWnV/7IySB1fRdGCdqSVAI1n/OaO
- ACSnAYjX0PF4zM/9/76zDwPvq8NvHbJQco839rwaC0nWc2xeSP9EG3s28ClBNQUECLShVn46DActgO2y
- augSFpJxQ95yO+yD5sH1ji/9+ZUTlAsAoGV+E72x3Qhzn9tQcK8OkjHeAhmS/L9cjfrFxPxc820bojN/
- umoa94knDNuOFSdAf+xTKFpEBw2JmL8p6gCmm/yTugaQvFNwa7Efw6bV4/8ymewjyEtMdjuewz/xL4Rq
- /LGvRyzsSjRcwagSVBBgRmfbX2gC5T1hPHwuCi+qhC7hBqQ18P88ALVXvAkfOyKFhtniCo3mCgAIFc3a
- E4Zj5sG2lP6okAL549Ho3/D+lyT/0t8gsxQQzK9V+xNtPpGIhPef1cKKcbAMHwHLddqTxXP85UIEIHMa
- QGIQcOtlZYEPV/bJyqx6H+uVjT3diuTXbuyZbIXfsLwShGsCiikgaUCgAjpbohP+Dt8nF6Ou/3fwcbXh
- Fpko1NwAIOx+xUnTDlL16yh6tl0gxz8WALwP77ck+Z/YApntP5Hlx8wvJH9jmZ+JQYnDjqXUubYrYbv/
- MBhOTEXqp1oSLN7xeAOY6HiyGkCiikDRTAEmtvuf7OnGxLF2eA3pDHUCqqFnOgrL8D2+AoIbfERW+E12
- uIRjV93YOMInQB+WnQfDYXNhu6hNEprAenhf6Inaazaqq0xbXKJQcwJA5MMoehrWKWfBdJXoVzQAeAme
- T26EfeUOyKz+bUdDh59g/sY8CCEpFO8/iYKOn6LkWQskniQJVf/mcgCKjsf6O54GEKsseDR/gPYY/+rf
- B3ox4MFa1CZklzSIL7AMH+JRevRy2O4+bOqls7Gn1tnMGh5Lei0IcCs7HYZunCxUnkAT4DoCr8A16zLU
- T0EoxbzF+AOaCwC0jhkFia+D+fw7UDBXj9BGkBEAIK+A+4MxsK+qVzd21Ob3Z5L5Rf94crCKWNEDxn/M
- R+GCVFT/XHIApqoBxA/7hb7Dfd5S4sfFj9Xif52yZP7+Ss95JJ6kJ/4t/cXOvw1Qnz8/73Q39ozMERCa
- QDlCfoGyf8Cw35Ow9W2TwDHIdQTuhWPQXXCuRQtbQtycABBcXrs/dHutQdGKCkidwr+kAgBBqmcWnOvm
- wPmWK+Tpj2R+4fDLhArGk4NDRkrM+EZYrh4FywggNYbPVEmwRAMZ71i6GkD8mL/6badBxtUz6vDOP7xZ
- mUkSVw2djrfll/BP+pOXc3PhThH2S+T4S2boooGA0AQUMDgY+s4rYLtiT+grYt0id8IFeWtf1J7/BrzC
- KdgiVg82BwCExft5ccYzKLz3JBgvjvblrZB33Qb7c6vh+RThKr9gfrG2P5Ppmaz+s5OonDpb9QqKZu8H
- /fHxmD9TPoBEn2fe+x87ChAPBLz05oEhTjw82Jmxyj6RA9DpA53PPUF+7m+3/AHY3FY1AJb+HH9vrMoh
- bkULAsIxqDh+EUgb7gRd+2WwXX449B3jrR34Db73z0VNvw2QWUC1CKdgUwNAWDiG3hSNhPniiSiYqUP4
- HvA0av7/wPvLzcT836prspnhBfOL3P7Ghvpi9ZEnhBL+o462/RIlqwogVWbC9s+U5I/scLxjiZlf7Uky
- 9fyZeFa/eLobY+6ww5n23kvxyUxPuM8NJvy1Xn71TXiepkPfQVX/hfTPBEUDAWXVIELrBhRzoApS1TwU
- 9j4Dxv31MVYRkrbqXwPX3MGwT3GrC4dy3h/QHAAgVH8bIeoBT8O2pBJSZ+2XSM13L4frw2lwvroTMid6
- 7EBI6rO3VVvVJ5WVfcn2MWj/HwF9t+dQ9GyyzJ/uYqB4x2N1MtHxVDWA+GHAUB+/3duLq++rx1/tsjSv
- 6Wke8aweF842cd3+Tx+Ba6qsagCc8x8v6ScdigQBfvaRIKBoAnSgcjKsZwyA+ZiCGEVFyGqpuwP2oXPg
- Wofwlac5SU0JAGGqPxlbbZahcMYJMF6o/dImyNsnw/HC83B/7lclvWB8fi/W84vc/mzkYov0X374bfrB
- dP5dsN4NxFf5Gyf9G+8CbJz6H98HoP395jI/rp1Wj88OS9f/lpiK/5Qw8Boz9tvK+y3glwlwjCZB8A3U
- nH/tct9MUTQQYHOAQUAsIOJWShphaR+YDp8Caw/SCoqjmQQb4f+uD2r7/Ac+zlfIaX9AUwFAZBJG0XUw
- 956Egvs06/vlj+H9jlT+Vd+rWzUxs4syXsz8wtkXWdAz0wMr0n+VVWO3wnL9cFiuisb86Uv/8C5nzgEo
- ZVwD0P7OYZJx92gHnuntTpCgnT5J9FTPmmHEaWvV+v5V0G0bjrqrf4Kfy7qxbZ0NANDedrCMGEJ1BEoR
- 0gb4teR46PeaDus5R8DAfoGw0eDQ4NtwL+2LunF2de7mbH5AUwJA0Ot/EPRdn0XhEnq4yio/Gh3X43C9
- MQvON3dAFst3BfOLQp7aMF82wyz88BX7n1qb52CbdhgMp2bGBIjG/uGU6IaSUf2TAYJUowA+Scayi12Y
- NtoJbyYr+0TcfLuvSPpfb0Znjx5dlK29dN7BqB9CwoEjAQIAsqlSC01VFBPhaFCwmAjUKIECAmS6lt+O
- gtPIJDjWGFghKsgP2TkTjlFT4VyRy8uHmwIAtAk/BTSiZQtQOOk8GAfyhxvg//VuOFa+BM/6QC12ZniW
- /kLqC5U/0tOfrYHkh64U/6DW5iMUL2sDXWcgeeZPlvGz7wBMZbPPcA1A+30Oxf77EB+G31uPmkxX9tH2
- i57u5deacMTXBnTW1Pe/H85bH4BzJVQnMM+HbNvUAgS0S4lFmFAAgQICNKltF8PUbRqs57eJWE1YA/9v
- l6Ku94fwfo8crS7cVAAgVKrCvjCe8SAKF9Io6FbD/co9cL78O/xis456qMwvHH1C5c+Gsy9WX4MOwDJI
- e76H4tUWSAXJqP7JMH6mkoCSX/0npawBRJ6HK/sMeKQOv3bMLt8duFaPS6ealF19uhDvkfQnFJawAq5H
- RsB+P1QAYKGQPQdE+FCJuasNEwq/gAACBgXrAdBXz4a11z9gOEA74t/Bu/Z01FxTp2qzOWcKZBsAwhx/
- nSBVvYXitTQKpkmwP7IKnu8D8RweGJbyzPTa2v3a6r1NoT5xf4MJQKfAcPR8FD6qrkpUKbnXxIyfSh5A
- ooeU2AGYDAhEDwO69DKunVmP90/Iwgo/DVmIPQb1N2PfLXqF+dn+5409bdTWwP1if9TfjFBhV09WOxM+
- VJEJQ8IkENpASeC9lZCh4GZYThiFgnNNkMzqqMr+x+G8+SY4Fss5uNtQNgFAnFuxpWgEC5agcDz9UTkG
- 9sV/QGamZhWLEZEZnaV/HRqq/DKabsD4QSvr/6m16Q3TedNQMJluRUl1SewIlKMca/g+2t+NHeRof8cD
- gmQ0AN4F+f7hTjw+MEsr/DSDcfKDBpz5jBG8rx+r/ryxJ2lgpH9L+Bm+/5yBmiFb1fUfbBpmuL54UkMs
- 9oYQZcZFqFCAAL9ncNCfDkOHmbD23Q/6fdhBSONYcx5qz/gAXg5l5pQpkG0AECqU6TQY2u0D6ZAF8HBC
- hzlwnElIf3vgVevlb2p1SawAZG9vm4EwDRiPgusFe8SW+skxfibXACSb/JM8CIRrALzC7+UzPBh7px2+
- bKzw01AVb+w50oy96lXHn9jY0wpJeSA74f/leNQM+C2UEObMbo+iUqRfQBslEFoAzx0GB105JP1EFHS/
- AuYL6EtFv8H37pGoudSpCrmcyRJsMgBASH0yBY5JgUHgweAHKqS+1k5q6gEKrgCk1uZ+WG86H6ZL02H+
- VJOAEn0mBjSZ44kdf9FSfkNOQO7H+r29GDanHtsqsvsIdPTEe4014ph/8caeKgCw4684IP25R27IO47G
- rj4/wc/Cg/NCHEkMVzYo0iQQICC0gaLA3+bA99xnwtB+GqxXkzZw+HI4x46A4zFkZrl6xm4o24MlAMAU
- GDRDYAD5xlnKuxGy9bVbdjfHwHD/RASgajlsdx4Fw+nxmD9Ti4HSHeBYfycLApEmABMn+1x3Xz2+6ZZ9
- X9u+r+lw8d0mdPao23rvqTj+dCQtVOkfgCTfsai55BsyBaACQKazAVMhrUkgtAFhEtgCjQUdz3MeVHcV
- JPlWWM69HOaeQ1E34DV4GchywiHYFAAgqvwaAu/F0hG+eR9CjK+1i5prUPhhsjrHFWKqXkTRg/tAf6i2
- QyHIluNoBSHKtAmQvPc/MQiEJ/6oAGA3y7jrFjvWnueBnI1FPhqybgUuG2VCt1/0CvOz468tNXb8Gahp
- t2cehNpBK+DhXAAGAFajmzu9VmsSCG1AhAuFFqBDSMt1nA3DnoNg3n8o6hfXhtKExeA3201k89zaQdI+
- T8FHws5PReWPN6/jUSwhLGvOESwBRq36LRQvbg9dx3ATIL7Kn82lwFIKf6cKAtwLH71d0teFOddmMdlH
- ED3x4xYa0GORER1lXdDxV07NpJH+oneTYb/lXjhXo2lDgYlIO8dFqNuCkLkrTF2h6TrbQfLVQa6rzZGK
- wk0BANqmJb7pZBlfew4d/aM7AvqyUuj2KoXU5RToK23Qlag7B6lpmT7ILjqpizcJraf/v4OvZgPkWvq7
- xk+vHJKh0a930fsf4K/ZoUYllBLg1MrpTbs3UfwkTciyaMyfaj2AeMcbM8Da11jH478K+S/j3eO9GD/Z
- ntVkH0GVP0i4fLQJ++xUvf7C8VdITSstRA9nwzFtAhyLoAIARwJyAQC0w6l1EAonoQkhjVdou65Ay4lq
- wk0RBox1jWT4IVKLMPSA8dhhMA/tBP3JNMJFJMHI5kpaWWVTwyOrzcev9AS8uyA77JB3ctsKueZnAotN
- 8PtvREFfskUtaicTq/yZWBGYysDGG+hUQIDdfz929mH0zHr8nuVkHyY9Tf3uU4w44U2Dwvgi468k4PjT
- RXFSzoPz4Zthn4PQVm/pJCakoymmcm5h8gogMCCkBQiNl/stQtytGgASnT8ZqR+0sdpDKpsK68TDYbhS
- l8QegakSd4Z1shp6t50UE05GIC1DsUXTYf5kTIFkByLWQDZO8odmZa1Vxqh76/GfIzK8h18M6vKeDpfd
- ZkJHn+r460AXZcefqjOHgpFatW8xnE9cD/s0hEq/ix2AY91amOZJ3Kg7GrqCdtDbTMpW4VJB+CIe2Ufi
- uX4jfDvfJwHgaaihJiuwmMS8FU07qsL31RRp7QmpqRYDpdOv4IKMDtC15Yw8khanZ6vP/ATYtcwAsIOe
- C4PBYfTs9IjP3MmYAI0FgWwxPxNv4zXrOiee7OduktlgIuP3shEmHPyjXpH+HPrjjL8iasZgZEJqwMHL
- 4HxhOOyTaFLsoL/r9qRjp8PcoRDSHjRJ2tBzars/dFzCq5Q0iRITdKV0rEQXaHo6ZiRBogucUopyt7yK
- j01GGoka4tA/auD/cj5czz8B5zs7Gi7rTVZz1WmOid8JcGnOiFdYp3KJwpwqJPmr58H2cBfozsrmRflJ
- cHB5F73bQc/DTe1Q6oJ4eqmsBWhMLkCyAxTtvfZvCYmZn5N9XjjXgykTHery3mzPBrrxI5fqce48kxLu
- 02b8mcO8/g0B4GW4330N7g/6w3J8V+i7WiG104WSybLZZdIG/V/PgmPcg3C9401+m7l4fth4U6VJKdcA
- IIz5Sc8vuRfWSSfBODjbfeUnaqfnsEsxAWTlb5ImwYSFVLSAZBk/laeebOaf9n08EGBav7cPw+bVoa4I
- IgqYVSr6ExgwyIy9a9SQ355Bx59Q/WMDwFYSzH/BbyBTQVcSAIymnLwElo4VcE+5DfXzd6jp6slmqmbT
- 79BoyiUA0CYOmUl9s10P88AhsEyR1DhrVomfZH0YAMgBAJCSZv5sO/8iByve+3ggwLStxI/rHqzHD/v7
- Qx3L5mygy3SfbMQJrxsCqr/q+CsNqP7aGHE0ANhGJ/iDWkXAWWhpYgBQh0j2PA/X7Otgn+ZULcZMFqJt
- Fso1AAhuEXYC9EfNgW2ZSY3JZ520ALAtAACHUHe06bHiNVVfQLz3qQ5QrL+TBQEml0HG5NsdeK27J9wy
- zeJsaP+phH6jzOjoV5m/A41tJV2wICLmHw0AmLYHAKA8ABrNAQBMXOhjIZyTJ8Axz5WDq/tSpVwBAKH6
- K8UX9oC0x3zYFnSG/li5icaVAaAuCQ0gGdU/05mA6ar/4jXcBS3jqcvcmDPKGb7IJ4sAoCdxefEIEw79
- TlX9O9K4tg04/gwNpH84CIh7YAD4XQMABc0EAEweyDtuRf3AxXC/jfBaFS2OcgEAxDNX1luzx3Y2Ciaf
- BtOgeJuDMpHEdrwFz/c/wb/xb/hqN9Pf7kCCiI1MCZokBpIuEk00UyE1Uh0LiqGzWuk6JEHMxZAs1Iz8
- mYU0D/qhiSDdSEDAuxJLAgCYUmX+5EEgNRMyEeNr30eq/3ylD47z4PYpdtRG7nWTRQDo9rwePe9TM/7Y
- 669m/Kl2fGTGn9YRqL2HbQEA4AIhpUrIsPkAgGkT/N/2Q22/T+HjzUpyuvBnPGpuAAiz+6kVkt1/+dWw
- zGS7Px4AkFBxjYd91dvw/OCLvTGIFKfp6KJ6uqiB67kR+phoMlrpg0JqtmNh6DgBBUeQhNJFY/70GV9u
- 8FmyA6V9XPGkvvbGtfRrBx9uus+O3zpHEVZZAoDCTUDfq83ouink+KtS8v2hGFiRGX+hv8PNgFwDAB6w
- n+B79TzUDN6ork/IicU9qVJzA4CIkyp2/6lk98+C7RmjuiIPsQCA47Wz4VyzGK4P5fDKQckAgC7Gq9gN
- SFnaeTz0ez+IwnMIHPSpMn8sxk8lByDWg9FCQLJmAFNNoYwJd9vx8XExtvHKBgDQOU++14BTVhkVxmcA
- aK/J+NNmyGgfjri7iCiA/Af8UrIA4IPsZyFhh+zmVkO2OzUXaXceJ31Gk8VP772c8MPnYW2RtcYO0Nn2
- gr6CzIzCRBDD1X5WwT1jKOpn+kOl6luUP6A5AUBr91u7QNdpCWwrSDXcJ/SF6ADwEjwfToCdq62KUuFi
- 8H0xrqNl9EjmF+/ZBGEAUEo9HQV914dQeBlNVCUCkQzzJ8P4mUoBlhr8G/vVTRD20AgnVvR1x06azgIA
- VH8l4dIbzehSr+b6c6sMZPwJ6a99QPEcga/A/dNKuH85Dob2ZL75a+B31tOtETO7yRR07oJcv4NMQAIK
- O6nnDnrv5qSeQMo3L/Tw+wPvA42lRXAhGF1Dx3kFJAVMxPzWuSjs0R3G/RKBAG8MOh32/jPUjUBa1Mag
- Yuyb67rBWoFtIbV5DIXzu0B/aviXGgLAL/D92g91s+rVTULFFmGimEi6GoDIPRDVXcoOhX7fR1F4NfsK
- ojF/fOkfn+nTmRnxpX1DINAm+6zr4cHUiQ744gVTMwwAemKF88YYceTHhqD057BffMdfbABYBtdn16L+
- JYQvI5cjWuTK0ljvIx+Ddj6yNmquhFTyAor6HQR9h0QgQLC67VLU9nwH3q8QXsou56k5AEDr9DPTPyXT
- UXBHd5iGRPYnEgBIZasdgvpZ38HHZZbF7sACABKZAEzRtABtfzglhusBlh8AXdcFsI0tiFIROL70j18k
- BAmOJXo4sVX9hiDAPfn6QB9ufsCO2kQr/DIJAHSurq/p0OtuEzp6VcnPYb9ojr9kAWABnO/cCPsaqM9Z
- WzwmGvPHek0EAKK4h2IK7gVdu3UoGtIO+lIkoG3wf3ERai/9Ej7evThnSn4loqYGgDCnn0FJ9rH0Hwwz
- J/uYG345BAA0oqRqOZ54Du5/yqEtwgUAxNt4IRIEYgEA90lsD92GHv7eZJJMtZItmBzzJ2b8bK4AjAQB
- vtamSj9uml2P/+2TRIQqgwBg3Qz0HmXCARv0Ssivo+L44wq/uuDSuFQBYC6ca26DnesBOBGqGxkp3bWv
- saR/LPVcuweAqPpbfBoMBz4JW/9C6OJug8pmxTfwvNQbtddsbkFOwaYEAPEsxUBbL4XxrLGwzjWrNfii
- /EAFAF6yuxDOtY/Atdan7g/HACBKRLMPIFbp8GRyZ7T94ofOfakiO7DD87A9Wgyd4pBMlfmzlQKcKOYv
- /uVtvO6cbMd7pye5ajZTAEBP4ejH9ThzMTv+VOZvH4jdh+f7pwYA98Kx6E44WAPQmnyR6n88tV+78Cba
- PBGVfRgARLXfMvqg7FqYT74L1gvIdNHHH0LZtxruudej/u56tZ857xRsagAIouzB0B8wF4WLKiB1jf0D
- iW1YeS3c790Fx5Mu3ncR4N2CxZpwzsnOVGEF7hsjvwIA1KpfRNG8tqQGpsv86ZoAiSMAsR1+TDzTFw5x
- YcnQFMp5ZwgAyn+UcNlIE7rsVBN+9gw4/gqBYF5lOgAwEfaZs+FkR5vw+0QWj40n7RNJfyBU9pslPc8D
- xRSkVkGoUDkD1l6DYTkx0RBxpuATcN0xDvbHHC0gU7CpACDM6VdNzEXMP/sAru+RgL4ie/9G1M/bDPk3
- hJhfqP6ZrK7K/RMA0IZa9TOwzdyLgCoR8zcmEzDZwYv3XnuMr/HOyR7cdZcDbnPCU4f/sJGzgSv8nnWn
- Ece8xY4/KZDxp4b9jClJ/4YAMAx1tzwN9zsIaX5aDUD7WKIxe+wgTWgItfko7AMQuwLzXKishNR+OZkC
- x8MYU2AJckPeOR32EQ/A9aI/xyMDTQEA2sG1EAKU3oWCsefBNByhsG9U+g3+P4n5H/0v/D8gZPeLopCZ
- jrtyX1hQKT4AatULYJ14KIzHR59J8Zk/EyZAKuq/oF86+3DTXDu2tUlxSBoLAPT7jh/ocPFtJuzpVRN+
- OgRq/BUog5s+APDZT8Cuq0gYfIqQ9icAIJ2hjTXcwhkstABRIFZpXaHbi0FgfxjaJzoZ7ws4BHVXvg4v
- VzIWTsvG9jHj1BQAIKqjMLLahsF08UgUzJJC24JHpa2QtxHzz/8Cvq8RkvzM/Bz718b9MzWgPBYCAPiB
- V09GwYhzYOrZUMSEZ/OlawKk0rFof4d7/GlwSvwYd78d67v5U3+yjQQAIxljvYeb0O1HVe0XGX8i7BfN
- 65osCHgg1x2DXYN+gv8bhMK/2dgeTKupKtvYQ50Pykax1CqPhH6/pbBduSf05YlOtokA6xLU9v2KBBly
- NDKQbQAIc/p1o8FbjMLnCyBVx/tRPWQ7q/3/gu8zqA+cGzO/cPplI/daTQjTAMBAmK+8Fpb+QHLM35wO
- QKWyzxgnXu7lSe+pNgYA6LeHPK3H2XOMitQPd/zpGiReRIvJxgOAncRAJ6DmGtIIf0TjagImO+TCISg2
- AxVzQmlnwHDwItiuKIXOmmBY5M/hWXU+akfUh/Y0zCkQyCYAaNHUWkyq/7MoemoP6I6N9yMaIfdE2Bet
- g+dfCEl+rcdf2P1MmQYARn1lY1Bq1efDeN4EFIxCYD1ANLW/qUyAeMzPyT4rL3Nj/ihX+tt4NQIAOOzX
- /3IzOtlV5t8jWOhDxPylpACg4TH1dz/A+3V31I7aDvkPqPOB50K2qgJrQYAFl9gWXAsCFVfAdOz9KLyY
- hFlcTVZWndh3Dkb9bG8OOgWzBQBh9hQ91KKpKBhDdv/IeD+ikfFOg33Zs/C8i4aSnz3+2dxSifvLD1MA
- QNWJMBw/A9YpkrIeoKHkT1b6x+potOOpJf+okPTZ4T7cMdOO+qJG3H26AEDy7LQpBhz/qiGo+outvUKO
- v3AAEP2PBISGZoL6uzVw//NK1N2GkEBgH1A2y4JrQ8PKIjWEgwCbA+XXwnzSnbCebw6ki8cZWs/NqOu7
- EO7XkGNOwWwBgNbuL7wQxjMnw/qYXlWpohJJfs/DcD6/EK43EC75RbhPLPjJ5sCJnYGUrcGqIXVZgaLH
- 6KApHsNnKwqQyPbn8/2xhw+3PWDHnx0bOSRpAkC7TyVccgM7/vRB6c8LdrRbe2kBAAhxV7IA8AScT14H
- +2yo86KpdgYKc14jBAJs+wtNoPxmWE67DQVnGxPkCLghb+qF2jM/gvcX5NDy4WwAgDatktMpO5G99BRN
- in1jDw7c8+BcQ8z/ul99yELyi5hvrNV+maawvQGpVb+EokfKIFWlyvyNAYFkbH+mugIZ0yc58NGpGTCH
- 0wAALvTR6zoTDvpWdfyFMv60FX4bhvQiAQCIDgrid1NhnzkNzmcQmhdNtTeg6JIWBER4UDEF6AvlE2Hp
- fgMKTo+XKMTD+1943zgTtQNrIOdMpmCmAUCr+heYlDx/66SzYLwq1rWIs92PEvMvhetNmsZkTYZJfpHm
- 21SDpd0dmAGgaiEKJ/HOrkB85s92DkDk4Hl1spLo88xV7szs4ZcGAHRboUePB43o4A85/hpW+G0cAFDH
- /D1RO/pdeN+DCgCcA9KUuwNHRgZEeFBJEuJGH1ZMIi1gJCyn6CHFfBqcKbgW7vuuRv10Z44sH84GAATR
- 8mwYT7sH1nmmwPr+SKIRcJLkf/EJuN7yhiR/NOZvqk0UGcEZ5YPJQDfAPOwSmC9oahMgltRXzyPjvVO8
- mDElxWSfeJQiANj+AnqPMGGfjaGwXxs6gVUT9ssEADgg7zwdNdd9C9+XCCWBOTN018lSWCIbwkFA0QTo
- MVQSCPS4BpYT42kCBNc1t6J+0BK4X0fIH9Bs5cQyCQBhqj9NhvaPo/CxvWGIWtePy3k9COeqZ+F+zxdK
- 8hEr/Njmj1zj3xQoyf1nP0UwFNgTxnPGKJGA+OllmYgCxHMAau3+DZ18GDvXju1VGRySVACApuuJ9xrw
- j9UNHX+mqAk/6QPAr/D93B011/8NeQPCk4CamiLXC0RqApV0sPI2FJw1gkCAq0zFOtHf8H1OWk2fH0P5
- Ac3mD8gUAGgdJgX0puRWWK7pD/NYrQdd0C5CwSmwP/MmvJ/61YcaTe0XA4MmHBwRChQAUHUAdN0eg212
- ssyfDQeglvnrye4f83A9fjwww0IjBQBgx98FY03oXK9K/z0gtvaKtdQ3fQB4gwTEJagbL4fMQ04Ey0YS
- UDKkzWsR5gBHjYLmAFexHg3Lybeg4AxLjOgAVxJaB8/DQ1E32a4Ku2YzBTIJAMLrX3QE9Ac/gsKlNuja
- BW44+MU/4N84AfanPoPvO6hMLzL8hLdfrPRqjr3TtaFAxRFIN9XuVRQtMCW9LDh7DkCfJGPWeCfeOD/N
- ZJ94lCQAGGjGnj3GiEM/NQTTfcXWXokq/KYDAIvhXDIa9nlQTcTm3hpcGx6MpQlU0Idlw2A+fjKs58TK
- E/CQELyRTIFlcHPUS7ucvclvKFODomT7kf5cOQeF04+F4aJQTX31vj6Fd/14Yn5S51j12R5oIs6fjuSP
- 5SNLFIKPdz5RF0ABADrQ9lFYJxwAw2HRtAAgNT9A6JisuWjDxxDthtb2dmP+Tc70k33iUZIAsN8aHc6e
- YVIcf3tqHH8WxMv1Tw8AqEu+K1E34SV43kQoBMhCojlLcMcCARYaIm24nO6jtDdMh82C9cKSGBmDG8kU
- 6EGmwIZmNAUyBQDB3Ol+MPa6DdY5ksYR4leKJ3revQv2NT71IXIT9r5I8onG/KH5wfPLqGzWZ1Su14Fs
- 9YNRRVcto0dRBC4b4IYdW2mifEL/OkmT8CnnE36EZKMIojRY0BF4LcyD+8DcK31HYOrPVAsK/PvPj/Dh
- 7pl22G0ZeGLRKAkA4Iy/i4ab0PUvvSL5OwQcf4VRHX+NB4CdkLeci9rR38L3LUIRAJ4nzV2DPxYIiGSh
- isBrGWnDXRbBdlln6NpEAj0/1xfgvn8Y6qd6mskUaCwAiGemJPxUQeq4EranK6APLpnkvP55cKxdCvf7
- flXNF8zP70VRz1CGXyHNJaMiUCzYi1Srg9GFju1LQ7oXjkRHGuI9SdfoqOSbxOq/h8D1c7yDt7GajMh/
- 0xXExBHhxHgTiB+qcAQqAHA6DCfdDus4aJ5Oco7A0HNMbwWg+tef7fyYMLcemzpkcV4kAACJIPSYhww4
- +WmDkuzD0l8s9TUh0Uq/+AAQPRFIIo3R8+XZqL3REyoCE2sVYHNQNBAQeQLCL8BzqJRrXs5GYc8eMHbT
- RYQJvZB3DUPdJSQgP0YzmAKNAYCwmD87/ibBcsMl1BC4g7/h23gPHM+8B+93ssrsqsQvoRu1EBNyhYgu
- hJwH05yyEVMbqR1OrQ39bSTtUq8woD7tHjKj/w8f4iE8SFoBWSDKBEqUV8APKGxNQKmSEWibbQzUBxT3
- F5v5k68LmOhB1BMUzZrowL+SreyTLiUAgMrvJPS+jpDXoQs4/tSlvoyUiQt9JAYAcWktACyF88lRsD8K
- 1QEo1oPkUsHNSBDQZgwKk4Abb01efDsKThsGy0lWSGHB2//B+z4B3ZUbSeNBE68abCwA6AM3bTsUum5L
- UPQ8qYIlrPJ/Ce+3U+FY8X2JfzsNhQnt6HvH0L+VpDnuS/Ongo5aaA4ZFCbTxbxCJobBTYy/FouxkObU
- TsKlUHZhNJtL+DOCKcH0xx5zUThxH+gPABJpAeFrBoD0HBFKtw0ylg11Y1V/N+TGwGAyFAcAdDRS3ccZ
- cfi/QtK/KuD4S67QR3IAoG3EAZ6BqLvzRXhEajgDAKvJWUbClEl7OzxvxNqBYFkxqGBQSl8o7AXjAffA
- 2msP6IN7XvKqwUfhGDcejsfk0KajTWIKpAsA2sQIKxnNJUthe/hg6M+pM8C1qovr88cPdf648yBi9q40
- X5jtC5TBSO16/9/elQBIUR3tb869YGGXFRZYIGA4PEC5ongiHngAiqABVERBEFBUQAFRicYjXKLgrySK
- 8UARNd6IUeNFIgbBIwYkRI6oKKAC7u7szt1/VXe/nTezc+5Oz/bg1Pic2WF6prv61VfHq1eVLgCA+j0B
- /BNvYBEWYDc4H5u1ibw7S/7VyIzA8quQN2YU8kbEDwRG3yoc+TqZm8E7/N49y48HbnbDm5/EwY3nT/S7
- Q+93ftuKIfOcaB8R+Gtohd9kAOAH0oaDUTl1h7YFWPj/mUoBTpUE54QlIKoKiRWClvrg1wW9YWt3Lwov
- 7A17V4vakkBNENp3PirP/hCBbYitnAw78VRJbPZRtf+FcJwxvnX+o+tO9NvWDPK6Nh8RQLBITQnXqDF5
- sOllAfdz2ojb6fEVOLDE8Qg5JVOQyAisiwP0ga3/fBTeapFahSUj/ImSgGLIHP7bPYC7FtTipzYZsnZj
- AICDbKWRlzvx691a4K+9Hvhrpgp/slV+UgeAD+Fffy6q5kIz/4X/74F5zP9IkkGAFUhkhWEBAqxYCipg
- aT4PhecOh5OThtR8gU3wrR6EqikIFbo13BVoCADI5k6hpTf6njbQvmzzwEC3vZyZFmtGN/TsjLj8b7EF
- s3EztoOrDbFpKRgufo2vj29e3dbgFrB0Xo6ieWWwtosn/A3V/jL9UBbEHffWYle3DCq7GADQZ7kNAx9z
- qIJfoWf8JRf4azgA8NncipplD8DzLEL+v0gAMisAQOKg2EAkBwdZ8IUVwKCQR9rTfgXyes9CwagSWFuR
- 1eebBdeYP2lpwiIgaOgkSBUAxOftZBy3wFWYjLMxjeyAsrjfZDYAYNpDNsBMzCEQ4G4uwr8UqCviAHzT
- RD5A2xnIn3QWnAOTFf5UQEBcqtehYNHtbnxkdNAvkqIAQPEuCy4a70RHl7VO+7dKOvBXHwCSBYxaKK5h
- qLpuIwJ8b+T1f1NsoU2C5OCgiAuI6kIMAMX63076kNIP9lbkEkwgF7oPuT5bzkDlef9DUAQEDb3mhgCA
- hcS9JXnSS3AExqhLwInIjABAZNuL70+eaH/DsQ/77LActOlpySTUBwl+D+5D0P0VgrZazRVofTLsJ96C
- wuv4zJIV/mRPX3zHqis9WD3Bm6BcqgEUCQAEg6fPsaPP+/a6Nf82eo0/Z0rCnzoAbIH/3yejakYwtPwn
- dgCa0f+PRbKhExkXaK4/a20S6boIEZT5KBo6Cs7xf4FnwQTULEL8hjdpO8nUPl9I938h7kIfTEeyHZpN
- CgBM7bZaMHF6PjocUCe3QmZZ0MZ7UGm4oSiV9PwTgtWEzJUHoXjPhKNLMayOWMLfGADYcIIP8xcYlOmX
- zAlId7PD+1YMucWBCp8m/O30ZT+exalp/9QAgE6EBMH9CI2VCM//N7P/H4siXQJmHwu9sAYK9ff4c376
- kHs4HN0JCK69CtVT3oWf0+UNjQWkCgBWjMCpZDq/pkJBsmRiAGDq9JkVV8zNQ8f9mobLg1bG2k8/XkOj
- kgYJP9mhipqBdDiJQEN3BsZiz+72Qcx7sCZzQb9oJ6HPBgeJ29Crnei+3Spl/FnVwJ89ZeFPDQC8UDzn
- omrKJ1r2n1wBSF6tiTdv5X+Lx8xMbjADQoFzsZFIAAG/dujnw8Lu7glr3jjkdZ+L2rXu0IqAIeecGgBw
- a7c/4F6cgmtTOs7kAMDUeZMVY3+Xh04/CjNXI+Y+A8DPBMIMAHwH+9P9EhZ6MkCQiAXVRQruWVCLLX2b
- ao8LQgBAzz2ftOG05XZ12U8E/lrSSC3w1zAA+BL+zSeiaiakDlAkIR4CHyupUIdV85tZYFij2umc7MfD
- VtAe1ub5sBQ5NKEKc2YIOar2I/jz2/D/REhS44NSRRadWwnXrEbPtMikIbFKkKe/Zvbw+TAI8LQTPRAN
- 3RiXGgC0JiXwGF4hW/C0lI7LAgBgOvxjKy67gywBHQT4LrHacelWAANAFY1j1E631pSsgFgs4WSfR6/3
- 4K0Lfemp7NNQ0gGAA3/DrnWg8w9aR1+x1beIRrw1/2hZfakDgMJdgNd8iMDGX5EWJKujiO5Ds46wFHeH
- rYhAoIWDBheZpc8X0nMzS0RWXYJLrCVJ2kdg/tWb8L62FJ5XdiD4rT+8SKeRM05ml1gqFEOwR4CAVxom
- AYBylOAJrEExBqR0XJYAAFOPdVaMuScPFQc0k5fviptOolp3A3hw0csjVTfAknBzUKzLF0HEt4f4sOJG
- D3zpquzTUOIVXJpmJ91jR/819rplP97qq1X4tcYV4FR3AkYb7HK9Q3O/VO0naFH7CkRWGEonkbvx9Svw
- PDgP7hV7oHCeQSaq9Ua6BMKasUn/FoSme3gYWhQnNZ46SBEsxAocj9+mdFwWAQBTz7dtGLXAiXZVWlsr
- tRAHoMcCguod6Uf3LE8HgIa4APz3tiMCWEim/4FU23gZQXQKbTdYcN5sJzrUhkz/UIXf+IKcDgDYSfN8
- F/GXE41K9QpD7CCL3zbmspXAJ/CvGgPXTT9C4eVgsfaeKZdAAIEMAGIa8XkEYBoAYH9lFD2uIxCwpLBJ
- J8sAgH/zmDdtGD3fida1VtU+41lRpcYCNCvgcGgmcrTNQYkEn8ePZUEsml+L7UeZY2WLA3+DZzpw5Oe2
- Ou0vMv60Qh/pB4Dwvf8KPiAuM6/L9FTjZghfcjSKGAT+Dv/T4+G68ScovOSYSRAA6m+MDJ1aCAjE34ac
- QLLkQAuaGwuwlBzhIUkflW0AAG2h/9g1NlwyPw8t/RraufUYAAMA37E+JBr2CCsgkfbn124n+bqz3Pjg
- XL+xMztZopPq9oIVZy52qIG/9nWBP7nCr7EAsIfm+L9I0bHpz6OF3lTUoTPIaDYRCPjfhG/pRLjurA5t
- OsrU3nxLxHOUOxT2nPYfTpZYDorRCUdhER5EB/RM6qgsBAARjjnuaZv/5AccB0thcXIHGDqdvGooVrYE
- jlZ9VVtM4Y8UfBXKCVleGePFM5O9CDbFen8UKtgHnD/RiS57Qmv+ZXrGnz0KADAl3+cvMQAwfUSOFbtW
- h+navxjh5cUzQX4orkWouWEhvKugBd+aAgRikSnyAPjzWtHMX+FY3EuPduie8KhsBQCmIBT7s9hquR8b
- rIrqi9kcxAOSXWcv2NpMQ8FxdrXwaXwXQAT9Ng3w47673fAWNNF1RRKBXP+ldpzwjBb446h/Gz3fX2z1
- TcYCSLQEGM9K+IFO4lOStRIp+FeE8OYimSKy8vZeDddFr8LHjWkztiuvqaghvGW9xcqhlGbLEVhMDkEn
- UobxvimbAYCJ9+auxCYsx3p6zVpBDdzQR5x3o+C8HrC1FysC8ZKBvm8bxLyHa/BzmUnmE51G6VYLhpP2
- bx+W8RcefDMSAPgkPiKWsqTJwT9eFLFnyPyPZAq5IxvPRNXF30HZg/S3oTcVNYS3fAyDgNZAoy264Q+4
- k/7fN6EH05BfMgMAMPlJ9FfgfTxO8zVYV5ba0R+2rjehYLhVr4EYCwRq8hTc8VANdqa7nHdjLpGuYvAN
- Dhy10aZrfy3w1zxC+xoJALsR8H2GgJVMfxtr/5K6pT8Eg6GhkHnOCT2Kl16Sg+6pglJzAMEafu2C4quk
- UUv/Rpek8Gufzn7SVHYCFGc5rIVksbXtCltre5zuPYI+hO+R0aieUx2+C/GQA4GGgisfJ/qnl9LjV5iP
- 35MdMCDqis2hAABMHpoID+F1PId/6gVH2QrIJytgXDfYO0dbDmSz30fQ8NgNHvxthAHlvBtBnd624txb
- HKrWb6/X+Its7SWX6GoMAEQT/gCUwHVwvbMNQTcJZ6sCWAJcQ9IDxUMWgbuaXru01z4SdvcBKO7K8Nz4
- WJ6XTCLpxk5WTf4s5J8whUYiEKAv8z8N963TUfuQGdt6p4saMx1lEChBK3TGdfQ4HeeS7Rge3jpUAIDJ
- TTCwEM9gLTbSNGTT0Hk0bN1uQ8HVFn1SCcHX1m8UvHWBD4/f6FV3GZmFeNnv/HFOHL5bE/52er4/m3XR
- C300ZBUg/jGkZXdcguqXXCFfW2TAiWU4IeiywEd7L1YcVpya2I2XTyBQtAyFQ4bDeayoxhOL6N7V3oya
- Kx6Gdw1M1tY7XdRYfSTcAQ0E8mguTcYEjMRoNU9G0KEEAExVqMZirMSb+FRfoS0kzTK2Lxx6E1GlbpZs
- PSqAexfVoqqkia4jBh37kA0nPW6v0/5t9GW/2Pn+6QUA1vITUf3UG/BvhSb48hBl3GVhjxT8aKAAhM8Y
- /qnIgp1F5GqU/QXNLj8KtopEKUbkVuyejOqRr8LPtQmaqmGNYZQOg1SAgFZBx4G2uAyjMBZXEcuL1E8c
- agDAVEmP27EC/wBPYFtHWDv+HoXTaJYVilm5r3UQixe68XV38/j9TC22WzBssgMdK236mr9FL/SRWmuv
- xgDAq/B+NAWup72ajy26QbHwR9P+qQh/JACI6lVyea4Wx8LW5Tk0G18Ka/N4vFKDtwh8OgJVo7ZB+QaH
- WFAwXR6pQFpmcjHBQTmG4jxcTS5BC5QekgDAtB8HcCuBwCbs4hWB0XCeMwzOM/mUqwkGHprnxienBEzl
- 93Pg75Tb7Dj2XXtYxl/8Cr+WJIQ9+eP2I3jwYlQv/kIrgMkAwIk3ojdEsgIf+RqIPlsEAKiNayCV674A
- jn7LUTQmXiNP7UsV5VMEXrkU1VP2aunCmWpXbzilc2oKEGDTn1dyDsNvcBJuwRy1FHhDv9HMAMB0AAcx
- HY/gS3zfApaWc1FwZVuLpf0LV3rx0pU+48t5p0gV71kx+DYHKryhjL8SfdktVr5/ojTgVACAG2M+APfz
- d9FA/Yawso8tzKZIXz+a7w9E983Fz4qW9aKFl9rDj/6hbCbyz7wJBeckzsJRAu/B99CVcN1WGV5DMqtB
- IN26STBcbRIKZvTh6IW7MQ8d0aNB32Z2AGDaix8xBQ9jN6p6w9ZjwIn20Svu8Dg8RU107jHISaI2eJoD
- 3f4TWvYr0wN/DsQ22RsLALLFsBn+/w5H1d2VvAIYKvcl92lgihfcS5RwGUlyIQ7RtENt5w2tpXfrpSgc
- eSHy+ifiXwCK+zHU3nozPH/0y92sshgEjDJOhdml1dZvQzBwJ27D0WQTpPKb2QIAfI7fYA+ux1OW5iiy
- LcFYf2kKFZMyQXSORz1hwynL7WinhJb9QhV+lThr9umJAXDgbzQJ/3oEOMuOC36Ict/sAoiOONG42xgS
- Py9Kcola/QIEDiMelD+OoktPgr17oqCgH0rVLagd/zA8axECgXScZ5OQkd6pWH7R6usX0ZybgxsxCOcg
- 2Z2E2QIAgr7GPtSSadidrtVkVLzDgvOucaDTfq3IR9u6Cr/azYgEgMYHAcOP4Vp/98H9zAK4X0Co1j+X
- ++IYgGz+G0HxXAHu+1BGPOmwCs3GHQl7+0S33g1l9wRUj1wbvjKQA4AoJJjO2rCl6nJOxeW4COMIGhKX
- wMg2ADApceDvhLvt6LvWrgp++yitvRoDAMlo/w/g3XQJXPcFNOEXrb5Y+8uNWYwuxCGUEgerRUCwTAxy
- 37r+GUWXdZDadsWib+H/+AK4LtmJ4LfI4pWBTEzz8GVCm7pCMASTcQ15YyUJj8wBQOOI+NduvQWD5zhR
- 4dESfsqlfH9rXeQ/PgCkXgsw9F27Efh+BKrmfwOFW7KJSr+y6Z8p4RGBarEsyCDAc1CAQKvTYe+5DEUX
- t4G1ZaIv+xf8z/0W1dftg8KWTFauDGRqmsvLhJxvUo5+OA2zcC2po4q4R+UAoFHkqATOnO5Aj3/bVOFv
- W6/QhxDYWADQuEKgZC7XTkL1A3+DfwNCpj8H/kSp70xvuZVBgC1TDgoyCAh3oPRs2I9ZiqKLWiXOEVD+
- Avcdk1G7JJil6cKZnObCEuCYAKNtxZGdrWNrpmPcrn5BS8wjcgDQcCLe9VhtxcD7HWirhLS/CPyFJ/3E
- CgImtwIQLWjoh+JbiNpnl8OzNqA1+RBlvuXkn0wLjAwCopOvAAFhCZQOg6MPgcBIcpPibtwOQqmZg5rR
- j8D7DrIwXTjTAFBnBXSCpdcU5P9fTUt0eulaL/51dqB+VdwcADSKinYDQyY60eknTfhFcw9R6CNceGNb
- AA0BAF7vXwHPG/eg9nlvSPjZ9OeuzLyO3pTBs8iVAQYB0cpbrA6UjoSj/xIUXViYoPJwJYI7hqHqnC+0
- eEBWBQUz6QLwUFcFiJutZiL/zl6wX1QNxfJDXhBrx/qw7nJ/+IaZHAA0nMgmHXCXHX3X2FSzvx1hLwf+
- ihGe8ZeMC5B84K+Obcor8H44GzUrq4HvEAr6sekvsv6aWlPKKwMyCHBL+Fb6KB0BRz+yBEbkw+KM9UW8
- 8+NzBJ4dgaqpB7WchqyJB2QqCCi0v5qOOQSOoZOQdz+X1+KZwHX399sUrDvbh1dn+uDPl47MAUCD6LDP
- LBg61YnygEVf87epGX/1C32kNwZApLwB3wYS/qcOQGGNyD4/a36R8GN4v7sUSF4ZiAoCFh0E7idLIB4I
- cGffZXDPuAPux012jQkZkInfqMvEItuq4gEUrSZN1FXkdbLN5NKLbb7Y27v73fn+UjQnVyEHAA07dZp6
- 50xwoNtWDvxZVO1fFjXwlygGkHwGoO69KW/B98l0uB6v5D009YVfLPmZSTvKICB2DIa5AzoI9E0EAlVQ
- dl+MqmEbEPgPsqScmNHTXDb9C+hFixnImzkIjmvkD/FsIMgMvkZm4xPw/j3YBS1xNy5AJ1JchypnDKSu
- z1kxaLFDDfjFD/wlcgGSBwBO9CHh33QDap5whbr6Rgq/Wf3jSBAQuwblmEDJUDiOvR+FF5LyKoxe90bB
- FgRevQDVV+3nwkSh7EazXW/YhRv9/cL0b3YMbL3vQgFNT4RlydfQf0/C89qr8K3Xl1MCaEMgcAsuRV/0
- 1JXWocUZg6iARG/YFU502B/a7NNKLbGt9XGP7ccnBwDRrAcO+P0Vvo0zyed3hZb6hM/PEX+xecbMabNi
- rgp3IBIEeJScBfvRS1A4vA1sLaNNEXIFvEvhvukuuB/LhqVBI6e5mC/qeiv9r3QJCh7pDNsp8of2Qtn7
- INzPf4zAF9CSQxg5PerxzckXm4GxOAOD61UZymbOGEWkW3+z0I5+L9nqov6tYY251TdZAIgXA/DQhH8U
- nreWwP26X9P4IsVXFn5Z85tSEBC645EFRGQQ4NhASX/Yfn0fgUB32MqjVRWqQvDrMai++EME/g2TuwJG
- TXN5mYUZWTwcjguvQt4S1LmLULYh8NVSeFbvQHAXtAnDE0dkiLHplEdHl+EqXIIRGE1/ZW6DTRYCQJuP
- LRh8owPt3da6pB8utZ0PS9zGnpqQRwJAYvN/D4I/LUTtyy/D97GiCT9rfSH8bPaz8Jsh4p8sJQKBUn20
- 7AhLu8UoGjoQ9h7WKCDwEXyrR6H6+iqNF2aLe9S7YCO+VwT+mpXD0pHMptXkh3aBxgluxbT+T/C8TL4S
- LxGx0IuJwxaAS2caf0czgpHWOBvnYRqmkjpLmKdtas4YRHYSt0EzHTjiM5ta4SdU4y924C++BRAbAGge
- Bz+B/6t5qH1xK4Lbod07Ifxif7/Q/KY2gaNQLBAQewdUK4AHoULpbBScNg55J3DTGPlLyBVwE38mPQjP
- SwitCpirNBSMmeZy4I81dvNZyJtzKhyT+H1yiqqeI8F/Cb51bm2isMAfREj4eeII34lJ1BYowwCciFn0
- aIOOWckZA6nr81acusSBdgGtxJcI/OXF6Opb/734ACA+T+atayW86/4Mz/sHyH1DyHLjwfdPDvhlm/AL
- igQBnoMibVisEKiWAH2g+Ug4e92JgiGlsBbLX0IW0paLUXXRZs3CNWUA1CgAqEuu6ANbv1tR8CT9UfI9
- gjsegOfRzxDYpWioyJPlZ30If5Hfl1siy7UFytAFR2Ee5qIbemUdZwyiwu+Bwdc60eVbYfrLNf6SXceX
- AaD+MYqu9e+D+6+bENgWCIE2DxG7YctNLPVlq/ALkkFAzGdVoUEDAVFajJ+LjoOt470oHNED9g7iC/jC
- X4HnvkmoudMXShAyFU/SPc3l5ZSCAmLUXSh4sAdsgzfAv/Z+uFcdCEWE+bkSIa0h/MXIfuhyMJEjs6XE
- /i4EAtPJIjgjazhjFJFR2WeZDcetsusZf9aIjL/kmnNGAoD8/k4Ev3sU7g/WwPdpTcjMlwffPxZ+GbxN
- NdEbQZEZg3JxUQECDAiF7WEpmY/CIYPh6G/VS8T7oVSPRfXQv8K/CeEJQqYgIwCAGaVG/ofAfs545P/h
- GXhWkMn/d4924QGEtL8YrDXkopCIwqTwAiMFqMBUXIHhuIT+Jf0rBFkCAKVbLDhnmgMV1ZFbfS1xavwl
- tgD4eScC362A54M34P2iJhTVF6AtrDYWfBm8Iwt1Hgokg4AoMMogIKyBEv11IU3OvMnIH3AD8ofn6xuJ
- diHw7vGoHO3T+Gaq3IB0TvOwDRatYCmbiby5L8L3+gYEvtXf54sW2t+FkNYQ/lEixtQlFUHUFhhGj+sw
- jbC5mWk5YxBZSeROvsWOXuu0fH95q28i7R8DABS6Eb5NZOo/Bc/69fBv94aEvCrKEPEaUc/fsD72JiB5
- fovgoOwStNBf59OHLANhq1iMogkdYe3M/FiM2kn3wLMaJksTNgIA1KBJBSyt6UqdP5LvCFFzUhNy1hQ8
- aSJN/mQZIi8vMtMPw4l6cPCwBlYfNpozRhBx6rD3LL7Bcx2WDkGrtQJWa7ne3CPU2isRACjqiowLinsb
- At+8Df+X78P35fdagQtxj1j4qyOG8PXl+3coC78geV+LHBcQdQaL9b/5fYVcMetCFI45G45zSeJ/PAuV
- p24mdwomCggaBgDSsOsME9rfow/RCKIhJqO4CaEVgh44BrNxE7qjZ1quy+wA8DPxbjI+bbYDlSz8nWB1
- 9oK9eRdYW3IhiyJYnMR4LnivVuPmBpvE7ABH8Q9AqeRU1S8Q2Pctgvs+h/+bytAuPdZQtagPAMLUr0XI
- ahMumym0WYZIxlCe66K6kMgXaKb/zfM+SMz3TIXzN9ej4PoN8L98OVyzvaFYSZPzzSgAEEMIPxNPFJ4w
- kR1g0EAmRAYHW5HzezjmkkNwPAbRvzSuIr+ZAYC59TD+g0exGeGBOLXABjHFWkL+J6kiB1kDdu6w6yb5
- /5k0vSvkg/r1Icx3AcwCAGqk52iC/0vR+rFIzD+R71LXekwfTv3fVau3N92SpSia8kd4lq2Edz1M4jIZ
- FQOw6xcv4k0C6cSkS2eUuC7dGLxCwNWHr8Z4DMfFdGsSFx7NBGfSTTtxEBPwJulkecMNC2kQoYkpeM8k
- N9XgwfyXAYCFWgYA2QpwI2SxiWMSdeT9pZDsEoi4QIE0RHCaeeZuC4syGs5Oy+FZX2OSPoNGAIA8+WJN
- wHRPHrn6cAu6HW1I/C/CREyiW9K8Qd9oVgDgdsOz8QY+wBaE19b36J+woT4AaEeGVmGiAYAMAvIQ1lpk
- kPaXLvyC5Hkv4gL5+rOwAoTFJYPsIQkAMkPk747Vvjnd1xIeHDyDXIHrMYOcg7ZNypl00npspyt6nqbU
- Hmh77hkE2D8PIKSNBAgkYwHIICA/i+CebK3lhD42ySAgYgP8LLZhCBAQ7lZkvkuTnXQmv8voC5WDgxyQ
- KUNP9MUczELnFFuTmREAakk4J+Jx/FfV/typlttrsQsQTfuLTVeyCxZEOAjwEBNRds9y2r5hFLlKIGJg
- YjZFgu8hBQBmITk4qPUnLEd3/A4zcQxOzGrOPI1/YBleo+myC1AHLymx+e9HaOLJ5f5kigYCYkJGc81y
- Qt8wki1g+X5EA+IcABh4XTxEQ0hOH+6k9iEYiCFIpsCI2TizFwcwASvI4OeW2txg43/Qim+w+S8mUCw3
- LFZzzUSNNXPUcKq/iTIEAkymsLDMNs3TTXJwsIRetcGVGItL1dZkceu9m4ozHPibj1fxMt6DpvkZANj8
- F9o/J7zmpGRnUQ4ADL7GUGsyDg6eh7MwDTNQHKe2gJk4s4kE/kasRI0q+DuhaX8O/nE02XR7zHOUPWSm
- aW70dYrahFpwsA+Ow624BeUxaguYhTMuEvIbsQqfgFtqs/Dvghb9540lpkgnzVH2klmmeaaulV0CkT7c
- Ch1wJG7HLByBvvV4YQbOsGi/gA24Fy+SqLPWZwDg6L+I/OeEP0eNIjNM80xfr9hWrNUW4BIj09Xg4GBY
- pPRhM3BmDw5gKh4jb38rQtqfq/CIdf8c5ahRZIZp3hQkQEALDhaRLXA5LsMojKkLDjY1ZwLk2z+It/AU
- 3gTqlv14WzUH/kRTzRzlqFHU1NO8KUls5GAQaAk7ynE+hmASpqjlyJuSMyzan5LGn4EnUVsX+PsaWtqv
- yPnPUY4aTb9kABDXLzoWF6vVtI7DSZiFmTGDg5mgn8nEvxZPYJu6209E/Tnwx0U4cst+OUob/dIBgEnE
- BdTGpeAVgk44Er/DbPRA74xziE3/xViDF/ABNMHfBW3Nn4t0cOAvp/1zlDbKAYBG9QuPtiQLYB7m4HgM
- hCVDfOKEn4fI71+J9+gVR/sZAESHXTb9c4G/HKWVcgAQTnJwsJTgoByTcSVG4lJ619nI745PLtLuj+Ad
- rMI6aOY++/xC+HOmf44MoRwA1CeRPhzKHDwdg8gnvwZtUJF2a4C1/nbswSKsxefqch8v87Hgi/baLPyi
- ik+OcpRWygFAdAoPDnJcoC1+jXG4BKeSS9BCrb3ZON5xL+n9qMZL2IjnsB4H1f39vLmHBZ9BgFttcZmv
- nN+fI8MoBwCxSQ4OanEBi5o21AODcRpOxgC0J1hwqEV4kycfmfLfkXC/j814HZ9hl+rrc4CPs/tEa20u
- 8cXJPjnNnyNDKQcA8UnOHBS94dTGkGQDlBMYdCUgOAadcTg6kqvQHEUEF/nkQGiNIgP08JAQu1BLHv0B
- bMP/8CEZ/DsJAn5SBZ7Ne9EYVTTX5PdEb8Sc8OfIUMoBQHIkkobk/nDFEGWgrTS4JnEB/e0kELDpteCC
- 9PDRw02PH0mw/XUFNkW5bbnTjmi0YZqa8Tk69CkHAMmTXPVY1IIvlAb/LQpBiqrIogCEXBJdAIA8RDdd
- udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl
- 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA
- AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA
- AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG
- AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL
- AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
- ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/
- ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA
- ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH
- AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA
- AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv
- AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA
- AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA
- AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA
- ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A
- vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA
- ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA
- AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A
- xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA
- ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA
- oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA
- ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA
- AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB
- ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A
- 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
- ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6
- Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA
- Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA
- DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG
- AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A
- zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA
- 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A
- wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A
- yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA
- AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA
- 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA
- 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA
- m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA
- MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA
- 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA
- 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE
- Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA
- 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA
- AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
- AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A
- 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA
- ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA
- 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA
- 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA
- AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr
- AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A
- 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA
- m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA
- 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A
- qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA
- 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx
- AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc
- dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA
- m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA
- t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA
- 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A
- rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA
- 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX
- AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA
- qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG
- AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA
- 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA
- o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A
- sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA
- 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA
- DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA
- f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO
- ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA
- 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
- ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A
- tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA
- 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA
- AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A
- tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA
- 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA
- ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A
- 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A
- uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA
- mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A
- wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A
- vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA
- 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A
- 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A
- vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA
- 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA
- 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A
- xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A
- vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA
- 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA
- tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A
- v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA
- mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA
- 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA
- AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A
- yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A
- v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA
- 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA
- AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA
- AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A
- wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A
- xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA
- ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA
- 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A
- 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA
- dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A
- wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA
- 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA
- AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA
- ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A
- xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A
- x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA
- QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA
- 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A
- 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA
- DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A
- xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI
- AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA
- 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A
- y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA
- f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A
- yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A
- yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA
- 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
- 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A
- y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A
- x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9
- Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA
- mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
- 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A
- 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A
- zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A
- yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA
- rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA
- 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A
- 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A
- yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A
- 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA
- cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA
- orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A
- 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A
- y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA
- 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA
- AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA
- AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A
- zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A
- 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA
- ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA
- 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A
- zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA
- 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA
- 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA
- 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA
- 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA
- ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA
- 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA
- 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA
- 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD
- AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA
- rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA
- AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA
- sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA
- 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA
- 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A
- uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA
- ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA
- bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA
- Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA
- AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA
- AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA
- BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA
- AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA
- AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd
- 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi
- ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs
- AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
- BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA
- AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA
- ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI
- AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA
- BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM
- WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI
- AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA
- AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG
- MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe
- 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6
- AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL
- WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd
- 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA
- ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI
- AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO
- b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb
- y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx
- AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO
- bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA
- AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA
- ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe
- 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN
- Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA
- ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP
- AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA
- ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ
- vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
- AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH
- PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL
- WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH
- AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA
- AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA
- AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA
- AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC
- EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe
- 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA
- AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF
- JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA
- AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA
- ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA
- ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA
- AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd
- 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA
- AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe
- 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd
- 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd
- AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
- 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe
- 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe
- 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3
- ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
- 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP
- dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK
- UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc
- 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA
- ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1
- AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA
- D//////////////////AAAf/////////////////gAAD/////////////////wAAA///////////////
- //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g
- ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/
- ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA
- AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4
- AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/
- ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA
- AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA
- AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A
- AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA
- f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA
- Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA
- AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH//////
- wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A
- ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA
- Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA
- AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH//////
- wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/
- //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA
- AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A
- AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP///////
- ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/
- /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/
- //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf///////////
- wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB//////
- /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD
- //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA
- ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A
- D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP////
- //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP//
- A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP//////////////
- wAH//+B///////////////gP///wf///////////////////+D////////////////////g/////////
- ///////////8H////////////////////h////////////////////8f////////////////////////
- ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA
- AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG
- AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A
- 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A
- 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX
- T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY
- PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA
- AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG
- AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A
- 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG
- AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI
- JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA
- AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG
- AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH
- AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP////
- ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA
- AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/
- ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI
- AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/
- /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+
- D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z
- /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR
- AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA
- LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
- AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH
- AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA
- AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA
- JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH
- AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA
- 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH
- ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz
- C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI
- AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A
- vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA
- ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A
- xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A
- w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA
- meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA
- 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA
- nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA
- XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA
- 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
- rEE=
-</value>
- </data>
+<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="stateViewMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>267, 17</value> + </metadata> + <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>152, 17</value> + </metadata> + <metadata name="openModelFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>422, 17</value> + </metadata> + <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA + CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw + AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA + BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA + wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA + AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ + AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR + kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA + AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA + AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ + AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA + dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA + AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A + B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9/// + +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA + AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI + CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA + AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP + ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1 + OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn + XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29 + DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf + LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG + AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1 + WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm + nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A + vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq + vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/ + AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc + AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP// + AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP// + AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/ + AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4 + //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI + YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj + GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8 + OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin + aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A + vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k + lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw + 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 + udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl + 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA + AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG + AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL + AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA + ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/ + ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA + ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH + AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA + AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv + AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA + AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA + AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA + ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A + vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA + ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA + AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A + xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA + ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA + oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA + ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA + AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB + ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A + 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6 + Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA + Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA + DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG + AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A + zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA + 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A + wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A + yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA + AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA + 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA + 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA + m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA + MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA + 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA + 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE + Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA + 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA + AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI + AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A + 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA + ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA + 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA + 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA + AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr + AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A + 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA + m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA + 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A + qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA + 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx + AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc + dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA + m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA + t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA + 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A + rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA + 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX + AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA + qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG + AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA + 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA + o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A + sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA + 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA + DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA + f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO + ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA + 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A + tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA + 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA + AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A + tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA + 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA + ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A + 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A + uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA + mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A + wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A + vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA + 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A + 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A + vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA + 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA + 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A + xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A + vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA + 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA + tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A + v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA + mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA + 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA + AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A + yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A + v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA + 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA + AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA + AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A + wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A + xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA + ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA + 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A + 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA + dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A + wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA + 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA + AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA + ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A + xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A + x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA + QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA + 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A + 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA + DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A + xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI + AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA + 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A + y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA + f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A + yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A + yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA + 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA + 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A + y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A + x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9 + Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA + mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA + 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A + 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A + zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A + yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA + rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA + 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A + 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A + yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A + 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA + cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA + orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A + 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A + y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA + 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA + AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA + AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A + zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A + 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA + ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA + 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A + zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA + 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgFAFJGAwAwTwAA + ADoAAAAzAAAAHwAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAWAwAsXg8A2f4QANj/EADX/xAA1f8PANT/DwDT/w8A0/8PANL/DwDR/w8A + 0P8PAND/DwDQ/w8Az/8PAM//DwDP/w8Az/8PAM//DwDP/w8Az/8PAND/DwDQ/w8A0P8PANH/DwDS/w8A + 0/8PANP/EADU/xAA1f8QANb/DwDX/xAA2f8OEMX/Aa4Z/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AL0F/wgYcf8NALv/EQDp/xAA5+oAAAwmAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAgAAAAOgAA + AFQBABBmCgCXthEA8PgEAEZFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABxcMAL3CBwB2mwAAB1QAAABCAAAAKAAAABMAAAAGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEBABRADwDY/BAA + 2f8QANj/EADX/xAA1v8QANX/DwDU/w8A0/8PANP/DwDS/w8A0v8PANH/DwDR/w8A0f8PANH/DwDQ/w8A + 0P8PANH/DwDR/w8A0f8PANH/DwDS/w8A0v8PANP/DwDU/xAA1f8QANX/EADW/xAA1/8PANj/EADa/xAA + 2/8MKav/AMAH/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AoMm/woA + lv8PANP/DQDG0QAAABoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAYAAAASAAAAKQAAAEYAAABiBAA7jg8A1ekSAPT/CgCWjgAAAAgAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQMA + NEQPAOb2DAC72AIAJncAAABPAAAAMgAAABkAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAOAMrnEADa/xAA2f8QANj/EADX/xAA1v8QANX/EADV/w8A + 1P8PANP/DwDT/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0/8PANP/DwDT/w8A + 1P8QANX/EADW/xAA1v8QANf/EADY/w8A2f8QANr/EADc/w8A3P8JT4L/AMYB/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxgD/BjJd/wwAsf8KAJizAAAAFQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAFgAAADAAAABQAAAFbwgA + d7YRAO77EgD0/w4A0s8BAA8UAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEAgAhY8QAOz/DwDe9AUAVJwAAABaAAAAOgAA + AB4AAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAJwsA + osYQANz/EADb/xAA2f8QANn/EADX/xAA1/8QANb/EADV/xAA1f8PANT/DwDU/w8A0/8PANP/DwDT/w8A + 0/8PANP/DwDT/w8A0/8PANP/DwDU/w8A1P8QANX/EADV/xAA1v8QANf/EADX/xAA2P8QANn/DwDa/xAA + 2/8QANz/EADe/w8B3P8FeVX/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8BohX/CgWL/wYAYZoAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAACAAAABkAAAA1AAAAVwEAF4AMALLaEQDz/xIA9P8RAO30AwA7OwAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAGAAAMHw0Ax9AQAOz/EADq/gkAj8MAAApnAAAAQQAAACIAAAANAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAeCAB6nxAA3f8QANz/EADb/xAA2v8QANn/EADY/xAA + 1/8QANf/EADW/xAA1f8QANX/EADV/xAA1P8QANT/EADU/xAA1P8QANT/EADU/xAA1f8QANX/EADV/xAA + 1v8QANb/EADX/xAA2P8QANj/EADZ/xAA2v8PANv/EADc/xAA3f8QAN//EADg/w8I1P8Cni3/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8EVEb/AwAsjAAAAB8AAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAkAAAAbAAAAOAAAAFwDADSSDwDX7hIA + 9P8SAPT/EQDz/ggAgnsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAwA3Rg8A5/cQAOz/EADs/w0A + v+ECAB93AAAARgAAACQAAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + ABUFAEpwEADe/xAA3f8QANz/EADb/xAA2v8QANr/EADZ/xAA2P8QANf/EADX/xAA1v8QANb/EADW/xAA + 1v8QANX/EADV/xAA1f8QANb/EADW/xAA1v8QANb/EADX/xAA1/8QANj/EADZ/xAA2f8QANr/EADb/w8A + 3P8QAN3/EADe/xAA3/8QAOH/EADi/w4awf8BuBD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wC3CP4AFAaTAAAAOgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAJAAAAHAAAADoAAABeBQBInRAA5/gSAPT/EgD0/xIA8/8NAL65AAAIDQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAPCAB+hRAA7P8QAOz/EADs/w4A1vADAC+CAAAASAAAACYAAAAPAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAFD0PAN36EADf/xAA3v8QAN3/EADc/xAA + 2/8QANr/EADZ/xAA2f8QANj/EADY/xAA2P8QANf/EADX/xAA1/8QANf/EADX/xAA1/8QANf/EADX/xAA + 2P8QANj/EADZ/xAA2f8QANr/EADb/xAA2/8QANz/DwDd/xAA3v8QAN//EADg/xAA4f8RAOP/EQDk/ws4 + oP8AxAP/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wB8ANAAAABeAAAAIAAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABwAAAA7AAAAYAYAV6YRAO78EgD0/xIA + 9P8SAPT/EADg4AIAHx8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA + 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA + 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA + 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA + ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA + 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA + 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA + 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD + AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA + 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA + rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA + AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA + sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA + 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI + AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA + 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A + uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA + bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA + Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA + AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI + AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA + AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA + BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI + AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA + AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA + AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd + 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi + ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs + AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA + BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA + AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA + ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI + AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA + BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM + WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI + AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA + AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG + MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe + 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6 + AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL + WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd + 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA + ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI + AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO + b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb + y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx + AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO + bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA + AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe + 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN + Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA + ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP + AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA + ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ + vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA + AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH + PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL + WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH + AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA + AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA + AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC + EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe + 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA + AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF + JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA + AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA + ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA + ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA + AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd + 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA + AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe + 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd + 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd + AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe + 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe + 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe + 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 + ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe + 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP + dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK + UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc + 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA + ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1 + AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA + D//////////////////AAAf/////////////////gAAD/////////////////wAAA/////////////// + //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g + ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/ + ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA + AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4 + AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/ + ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA + AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA + AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A + AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA + f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA + Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA + AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH////// + wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A + ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA + Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA + AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH////// + wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/ + //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA + AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A + AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP/////// + ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/ + /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/ + //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf/////////// + wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB////// + /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD + //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA + ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A + D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP//// + //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP// + A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP////////////// + wAH//+B///////////////gP///wf///////////////////+D////////////////////g///////// + ///////////8H////////////////////h////////////////////8f//////////////////////// + ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG + AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA + AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG + AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A + 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A + 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX + T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH + AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH + AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY + PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA + AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG + AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A + 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG + AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI + JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA + AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG + AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH + AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP//// + ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA + AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/ + ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI + AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/ + /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+ + D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z + /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR + AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI + AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA + LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI + AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH + AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA + AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH + AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA + JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH + AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA + 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH + ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz + C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA + AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI + AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A + vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA + ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A + xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A + w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA + meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA + 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA + nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA + XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA + MF8AAAAJAAAAAAAAAAAAAAcTDwDU+g8A1f8PANL/DwDR/w8A0f8PANP/DwDV/w8B2P8EikP/AMgA/wDI + AP8GYVX/BABFNwAAAAAAAAAAAAAAAwAADToKAI6zAwAzHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAIDCwCitAYAXI0AAAANAAAAAAAAAAUMALHTEADb/xAA2P8QANb/EADW/xAA1/8QANr/DwDd/w8M + 0/8CqiD/AMgA/wC/BP8AHANLAAAAAAAAAAMBABpLDgDK5QcAaFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAACAB8YDQDN3gYAYpAAAAAJAAAAAQgAdI0QAOD/EADd/xAA3P8QANv/EADc/xAA + 3v8QAOH/EADl/w0jv/8Avwn/AMgA/wCFAMoAAAAbAQAURA8A0OkJAIqAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMsDgDa7QYAXJQDADJuBgBbmRAA5f8QAOP/EADh/xAA + 4P8QAOH/EADi/xAA5f8RAOn/EQDt/wtHmv8AxwD/AMcA/wQyRtQOAMvpCwCfnQAAAgEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAExFDQDK1g4A1+MOAMjUDQDE2hEA + 6P8RAOb/EQDm/xEA5v8RAOf/EADp/xEA7f8RAPH/DgDCyQCEC6EAyAD/AaQV/AcDZHoBABUFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABABgRDAC32A0Awf8QAOX/EQDr/xEA7P8QAOb/DQC8/w4Ayu8EAD4oADMABgCqAMcAyAD/AFYAlgAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEGAFWWDgDG/w8A2/8RAPD/EQDx/w8A1P8NALz/CgCXvAAAAAIAAAAAAFoAHAC5 + AOkAugD2ABQAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAcYYQAN/9CAB3iAoCpqkLAaqqBwBrgg4AzucJAIyRAAAAAAAA + AAAAAAAAAG8AQwDGAPwAdwC7AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAgMAMxoABzZlAAg/NQABCREADmqXAAAECQAA + AAAAAAAAAAAAAAAAAAAAAAAAAIsAeQDFAP4AKgBbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHQAVnsoAAAUGAAAAAgAU + lLYABi5VAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAABAKQAsQCYANoAAQAVAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACk+EABKFmwAA + AAAAAAAAAApQXQAYtN4AAAUaAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAQALIA3ABHAIQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIKgAa + vuoACD0yAAAAAAAAAAAAAAYIABm42AAObp4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAwAKwA5gAM + ACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AA8AD3KsABSWrQAAAAEAAAAAAAAAAAAAAAAACEJFAB3X+gAIP3EAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgQBgAGgArAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + BisAAAA0AApKjQAbzO4ABi8gAAAAAAAAAAAAAAAAAAAAAAAAAAEADm57ABzT+QAIQXoAAAAXAAAADgAA + AAUAAAAAAAAAAAAAAAAAkQCWAB8ASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACABORtgAczvgAHdX3AApQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAD3SAAB3Z/QAU + mdIAEYLBAAg/YAAAAAAAAAAAAAAAAAA5AAgAbACXAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABzwcABWiWgAKUSYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAC1ZAABampQAYsrEAC1dEAAAAAAAAAAAAAAAAAAAAAABcACAALgBQAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ACUABgAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ + AAEAAAAA/wf///4D///MAD/PwAAfj8AADw/AAAYfgAAAP4AAAGeAAADHwAADh8MAAw/gAAAf8AAAH+AA + AA/jAAMP4QACH/AAAD/4AAA//AAAf//AAH//wAh//+AcP//gPj//8B4f/+MfD//jD4//w4fH/geA5/4P + wOP/H/Dx////+f////0oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAQB0AHMAkQDIAEYARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAwSABAACQCOAKAAxwD/AMgA/wCmAOMFBEx4AwAyQAAAAAEAAAAAAAAAAAAAAAMCACApAAAAAAAA + AAAAAAAAAhgtOwCTDNwAxwD/AMcA/wDGAP4AyAD/Blhd/w8A0f0GAF90AAAAAAAAAAIHAGSCBwBrNAAA + AAAAAAAAAFYAFgCsANoAxwD/AMcA/wKFIvMIO2z1AMYB/wC8Bv8MErL/DwDZ+AgAfqwJAIiuCQCNZAAA + AAAAAAACAAAAAAA+AAwDXy+8AJEApwCZAJMHBWSMDQC2/wZjW/8AyAD/BHw//xAA4P8JAIV6AgAsAwAA + AAEEAEJWAwA3HQAAAAAAAAAABgBYNwcAY4QAAAALCAB2mQ4AwP8NAb7/BI05/wDGAP8LK57/CwCksgAA + BB0FAEddCgCScwAAAAAAAAAAAAAAAAAAAAMHAGlbCgCSngwAq9YOAMv/DgDJ/w0NwP8CrRz/Ap4i/w4B + w9QPAM6LDACodAAACg8AAAAAAAAAAAAAAAACACcSBQBUagAAAAMJAIZ5DwDW/w8A1P8PANb/DCWz/wDA + CP8CWiegAAAAAQUASFsHAGpLAAAAAAAAAAAAAAAAAAAAAAcAbkkHAHGHBQBPZRAA4f8QAN7/EADf/xAA + 5f8KSpT/ALcA8gUNT4cLAJ+CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQCPRw4Aym4MAK+xDwDd/xEA + 6f8PAN7/DQC6uACjA5sCcx3DAAALAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBTRw0A + vuEOAc3UDACy2ggAelQAWgAHALIAxwA9AD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAACEdZAAMaEwALU2sAAAAAAAAAAAB9AB8AjQC5AAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAULABB5jwAAAAAAEYKHAAYvMAAAAAAAAAAAAJEARwBXAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAMYAA5qjQANZDMAAAAAAAc0EQAUlrgAAx0mAAAABQAAAAAAegBoABYAFAAAAAAAAAAAAAAAAAAA + AAAAAAABABWciQASiFoAAAAAAAAAAAAAAAAAC1MhABairQAPc4UAAAAAADkAAgBBAEUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAJAAkAAuH/ + rEGAM6xBgCOsQQAFrEEAAaxBgAOsQYADrEGAA6xBwAesQeAHrEH4B6xB/GOsQfkzrEHxCaxB44msQf/8 + rEE= +</value> + </data> </root>
\ No newline at end of file diff --git a/Source/ModelViewer/ModelViewer.csproj b/Source/ModelViewer/ModelViewer.csproj index 50ca7c1c..b6f47b00 100644 --- a/Source/ModelViewer/ModelViewer.csproj +++ b/Source/ModelViewer/ModelViewer.csproj @@ -1,212 +1,212 @@ -<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace>
- <AssemblyName>ModelViewer</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <FileAlignment>512</FileAlignment>
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup>
- <ApplicationIcon>bvdicon.ico</ApplicationIcon>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\BVD.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup>
- <StartupObject />
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Data" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Deployment" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Windows.Forms" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="BaseProvider.cs" />
- <Compile Include="BCTProvider.cs" />
- <Compile Include="DafnyProvider.cs" />
- <Compile Include="DataModel.cs" />
- <Compile Include="Main.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="Main.Designer.cs">
- <DependentUpon>Main.cs</DependentUpon>
- </Compile>
- <Compile Include="Namer.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="SourceView.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="SourceView.Designer.cs">
- <DependentUpon>SourceView.cs</DependentUpon>
- </Compile>
- <Compile Include="TreeSkeleton.cs" />
- <Compile Include="VccProvider.cs" />
- <EmbeddedResource Include="Main.resx">
- <DependentUpon>Main.cs</DependentUpon>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="Properties\Resources.resx">
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <Compile Include="Properties\Resources.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Resources.resx</DependentUpon>
- <DesignTime>True</DesignTime>
- </Compile>
- <EmbeddedResource Include="SourceView.resx">
- <DependentUpon>SourceView.cs</DependentUpon>
- </EmbeddedResource>
- <None Include="Properties\Settings.settings">
- <Generator>SettingsSingleFileGenerator</Generator>
- <LastGenOutput>Settings.Designer.cs</LastGenOutput>
- </None>
- <Compile Include="Properties\Settings.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Settings.settings</DependentUpon>
- <DesignTimeSharedInput>True</DesignTimeSharedInput>
- </Compile>
- <Compile Include="..\version.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
- <Visible>False</Visible>
- <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <Content Include="bvdicon.ico" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{acef88d5-dadd-46da-bae1-2144d63f4c83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">x86</Platform> + <ProductVersion>8.0.30703</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace> + <AssemblyName>ModelViewer</AssemblyName> + <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> + <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile> + <FileAlignment>512</FileAlignment> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\..\Binaries\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\..\Binaries\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup> + <SignAssembly>true</SignAssembly> + </PropertyGroup> + <PropertyGroup> + <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile> + </PropertyGroup> + <PropertyGroup> + <ApplicationIcon>bvdicon.ico</ApplicationIcon> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'"> + <DebugSymbols>true</DebugSymbols> + <OutputPath>..\..\Binaries\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <DebugType>full</DebugType> + <PlatformTarget>AnyCPU</PlatformTarget> + <CodeAnalysisLogFile>..\..\Binaries\BVD.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile> + <ErrorReport>prompt</ErrorReport> + <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking> + <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> + <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> + <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> + <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers> + <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> + <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> + <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> + <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> + <CodeContractsEnumObligations>False</CodeContractsEnumObligations> + <CodeContractsPointerObligations>False</CodeContractsPointerObligations> + <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> + <CodeContractsRunInBackground>True</CodeContractsRunInBackground> + <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies> + <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> + <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> + <CodeContractsCustomRewriterAssembly /> + <CodeContractsCustomRewriterClass /> + <CodeContractsLibPaths /> + <CodeContractsExtraRewriteOptions /> + <CodeContractsExtraAnalysisOptions /> + <CodeContractsBaseLineFile /> + <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults> + <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel> + <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly> + <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel> + <WarningLevel>4</WarningLevel> + <Optimize>false</Optimize> + </PropertyGroup> + <PropertyGroup> + <StartupObject /> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'"> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\QED\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <DebugType>full</DebugType> + <PlatformTarget>AnyCPU</PlatformTarget> + <ErrorReport>prompt</ErrorReport> + <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Data" /> + <Reference Include="System.Numerics" /> + <Reference Include="System.Deployment" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + </ItemGroup> + <ItemGroup> + <Compile Include="BaseProvider.cs" /> + <Compile Include="BCTProvider.cs" /> + <Compile Include="DafnyProvider.cs" /> + <Compile Include="DataModel.cs" /> + <Compile Include="Main.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Main.Designer.cs"> + <DependentUpon>Main.cs</DependentUpon> + </Compile> + <Compile Include="Namer.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="SourceView.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="SourceView.Designer.cs"> + <DependentUpon>SourceView.cs</DependentUpon> + </Compile> + <Compile Include="TreeSkeleton.cs" /> + <Compile Include="VccProvider.cs" /> + <EmbeddedResource Include="Main.resx"> + <DependentUpon>Main.cs</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Properties\Resources.resx"> + <Generator>ResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.cs</LastGenOutput> + <SubType>Designer</SubType> + </EmbeddedResource> + <Compile Include="Properties\Resources.Designer.cs"> + <AutoGen>True</AutoGen> + <DependentUpon>Resources.resx</DependentUpon> + <DesignTime>True</DesignTime> + </Compile> + <EmbeddedResource Include="SourceView.resx"> + <DependentUpon>SourceView.cs</DependentUpon> + </EmbeddedResource> + <None Include="Properties\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <LastGenOutput>Settings.Designer.cs</LastGenOutput> + </None> + <Compile Include="Properties\Settings.Designer.cs"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="..\version.cs" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client"> + <Visible>False</Visible> + <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <Content Include="bvdicon.ico" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Model\Model.csproj"> + <Project>{acef88d5-dadd-46da-bae1-2144d63f4c83}</Project> + <Name>Model</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> </Project>
\ No newline at end of file diff --git a/Source/ModelViewer/Namer.cs b/Source/ModelViewer/Namer.cs index 0eb2418e..3adf0a11 100644 --- a/Source/ModelViewer/Namer.cs +++ b/Source/ModelViewer/Namer.cs @@ -1,580 +1,580 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Numerics;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public enum NameSeqSuffix
- {
- None,
- WhenNonZero,
- Always
- }
-
- public abstract class LanguageModel : ILanguageSpecificModel
- {
- protected Dictionary<string, int> baseNameUse = new Dictionary<string, int>();
- protected Dictionary<Model.Element, string> canonicalName = new Dictionary<Model.Element, string>();
- protected Dictionary<string, Model.Element> invCanonicalName = new Dictionary<string, Model.Element>();
- protected Dictionary<Model.Element, string> localValue = new Dictionary<Model.Element, string>();
- protected Dictionary<string, SourceViewState> sourceLocations = new Dictionary<string, SourceViewState>();
- public readonly Model model;
-
- protected virtual bool UseLocalsForCanonicalNames
- {
- get { return false; }
- }
-
- public readonly ViewOptions viewOpts;
- public LanguageModel(Model model, ViewOptions opts)
- {
- this.model = model;
- viewOpts = opts;
- }
-
- public string AsPow2(Model.Integer elt)
- {
- var n = BigInteger.Parse(elt.Numeral);
- var pow = new BigInteger(4096*4);
- var k = 14;
- var neg = false;
-
- if (n < 0) {
- n = -n;
- neg = true;
- }
-
- while (k < 150) {
- var diff = pow / 1000;
- if (pow - diff < n && n < pow + diff) {
- diff = n - pow;
- var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff);
- if (neg) res = "-(" + res + ")";
- return res;
- }
- if (n < pow) break;
- k++;
- pow *= 2;
- }
-
- return elt.ToString();
- }
-
- // Elements (other than integers and Booleans) get canonical names of the form
- // "<base>'<idx>", where <base> is returned by this function, and <idx> is given
- // starting with 0, and incrementing when there are conflicts between bases.
- //
- // This function needs to return an appropriate base name for the element. It is given
- // the element.
- //
- // A reasonable strategy is to check if it's a name of the local, and if so return it,
- // and otherwise use the type of element (e.g., return "seq" for elements representing
- // sequences). It is also possible to return "" in such cases.
- //
- // The suff output parameter specifies whether the number sequence suffix should be
- // always added, only when it's non-zero, or never.
- protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- string res;
- if (elt is Model.Integer || elt is Model.Boolean) {
- suff = NameSeqSuffix.None;
- return elt.ToString();
- }
- suff = NameSeqSuffix.Always;
- if (UseLocalsForCanonicalNames) {
- if (localValue.TryGetValue(elt, out res))
- return res;
- }
- return "";
- }
-
- public virtual void RegisterLocalValue(string name, Model.Element elt)
- {
- string curr;
- if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0)
- return;
- localValue[elt] = name;
- }
-
- protected virtual string AppendSuffix(string baseName, int id)
- {
- return baseName + "'" + id.ToString();
- }
-
- public virtual string CanonicalName(Model.Element elt)
- {
- string res;
- if (elt == null) return "?";
- if (canonicalName.TryGetValue(elt, out res)) return res;
- NameSeqSuffix suff;
- var baseName = CanonicalBaseName(elt, out suff);
- if (baseName == "")
- suff = NameSeqSuffix.Always;
-
- if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) {
- baseName += string.Format("({0})", elt);
- suff = NameSeqSuffix.WhenNonZero;
- }
-
- int cnt;
- if (!baseNameUse.TryGetValue(baseName, out cnt))
- cnt = -1;
- cnt++;
-
- if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero))
- res = AppendSuffix(baseName, cnt);
- else
- res = baseName;
-
- baseNameUse[baseName] = cnt;
- canonicalName.Add(elt, res);
- invCanonicalName[res.Replace(" ", "")] = elt;
- return res;
- }
-
- public virtual Model.Element FindElement(string canonicalName)
- {
- Model.Element res;
- if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res))
- return res;
- return null;
- }
-
- public virtual string PathName(IEnumerable<IDisplayNode> path)
- {
- return path.Select(n => n.Name).Concat(".");
- }
-
- public abstract IEnumerable<IState> States { get; }
-
- /// <summary>
- /// Walks each input tree in BFS order, and force evaluation of Name and Value properties
- /// (to get reasonable numbering of canonical values).
- /// </summary>
- public void Flush(IEnumerable<IDisplayNode> roots)
- {
- var workList = new Queue<IDisplayNode>();
-
- Action<IEnumerable<IDisplayNode>> addList = (IEnumerable<IDisplayNode> nodes) =>
- {
- var ch = new Dictionary<string, IDisplayNode>();
- foreach (var x in nodes) {
- if (ch.ContainsKey(x.Name)) {
- // throw new System.InvalidOperationException("duplicated model entry: " + x.Name);
- }
- ch[x.Name] = x;
- }
- foreach (var k in SortFields(nodes))
- workList.Enqueue(ch[k]);
- };
-
- addList(roots);
-
- var visited = new HashSet<Model.Element>();
- while (workList.Count > 0) {
- var n = workList.Dequeue();
-
- var dummy1 = n.Name;
- var dummy2 = n.Value;
-
- if (n.Element != null) {
- if (visited.Contains(n.Element))
- continue;
- visited.Add(n.Element);
- }
-
- addList(n.Children);
- }
- }
-
- #region field name sorting
- /*
- static bool HasSpecialChars(string s)
- {
- for (int i = 0; i < s.Length; ++i)
- switch (s[i]) {
- case '[':
- case '<':
- case '>':
- case ']':
- case '#':
- case '\\':
- case '(':
- case ')':
- return true;
- }
- return false;
- }
- */
-
- static ulong GetNumber(string s, int beg)
- {
- ulong res = 0;
- while (beg < s.Length) {
- var c = s[beg];
- if ('0' <= c && c <= '9') {
- res *= 10;
- res += (uint)c - (uint)'0';
- }
- beg++;
- }
- return res;
- }
-
- public virtual int CompareFieldNames(string f1, string f2)
- {
- /*
- bool s1 = HasSpecialChars(f1);
- bool s2 = HasSpecialChars(f2);
- if (s1 && !s2)
- return 1;
- if (!s1 && s2)
- return -1; */
- var len = Math.Min(f1.Length, f2.Length);
- var numberPos = -1;
- for (int i = 0; i < len; ++i) {
- var c1 = f1[i];
- var c2 = f2[i];
- if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') {
- numberPos = i;
- break;
- }
- if (c1 != c2)
- break;
- }
-
- if (numberPos >= 0) {
- var v1 = GetNumber(f1, numberPos);
- var v2 = GetNumber(f2, numberPos);
-
- if (v1 < v2) return -1;
- else if (v1 > v2) return 1;
- }
-
- return string.CompareOrdinal(f1, f2);
- }
-
- public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2)
- {
- var diff = (int)n1.Category - (int)n2.Category;
- if (diff != 0) return diff;
- else return CompareFieldNames(n1.Name, n2.Name);
- }
-
- public virtual IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields_)
- {
- var fields = new List<IDisplayNode>(fields_);
- fields.Sort(CompareFields);
- return fields.Select(f => f.Name);
- }
- #endregion
-
- #region Displaying source code
- class Position : IComparable<Position>
- {
- public int Line, Column, Index;
- public int CharPos;
- public string Name;
-
- public int CompareTo(Position other)
- {
- if (this.Line == other.Line)
- return this.Column - other.Column;
- return this.Line - other.Line;
- }
- }
-
- public class SourceLocation
- {
- public string Filename;
- public string AddInfo;
- public int Line;
- public int Column;
- }
-
- public SourceViewState GetSourceLocation(string name)
- {
- SourceViewState res;
- sourceLocations.TryGetValue(name, out res);
- return res;
- }
-
- // example parsed token: @"c:\users\foo\bar.c(12,10) : random string"
- // the ": random string" part is optional
- public virtual SourceLocation TryParseSourceLocation(string name)
- {
- var par = name.LastIndexOf('(');
- if (par <= 0) return null;
-
- var res = new SourceLocation() { Filename = name.Substring(0, par) };
-
- var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray();
- if (words.Length < 2) return null;
-
- if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null;
-
- var colon = name.IndexOf(':', par);
- if (colon > 0)
- res.AddInfo = name.Substring(colon + 1).Trim();
- else
- res.AddInfo = "";
-
- return res;
- }
-
- static char[] dirSeps = new char[] { '\\', '/' };
- public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo)
- {
- var loc = TryParseSourceLocation(tok);
-
- if (loc != null) {
- var fn = loc.Filename;
- var idx = fn.LastIndexOfAny(dirSeps);
- if (idx > 0)
- fn = fn.Substring(idx + 1);
- if (fn.Length > fnLimit) {
- fn = fn.Substring(0, fnLimit) + "..";
- }
- var addInfo = addAddInfo ? loc.AddInfo : "";
- if (addInfo != "")
- addInfo = ":" + addInfo;
- return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo);
- } else {
- return tok;
- }
- }
-
- protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos)
- {
- pos++;
- switch (c) {
- case '\r': pos--; break;
- case '\\': sb.Append("\\\\"); break;
- case '\n': sb.Append("\\par\n"); break;
- case '{': sb.Append("\\{"); break;
- case '}': sb.Append("\\}"); break;
- default: sb.Append(c); break;
- }
- }
-
- protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos)
- {
- label += ".";
- pos += label.Length;
- sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}");
- }
-
- protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos)
- {
- string n = string.Format("{0:0000}: ", num);
- pos += n.Length;
- sb.Append(@"{\cf6 ").Append(n).Append("}");
- }
-
- protected virtual void GenerateSourceLocations(IEnumerable<NamedState> states)
- {
- sourceLocations = new Dictionary<string, SourceViewState>();
-
- var files = new Dictionary<string, List<Position>>();
- var sIdx = -1;
-
- foreach (var s in states) {
- var sn = s.CapturedStateName;
- sIdx++;
- var loc = TryParseSourceLocation(sn);
- if (loc == null) continue;
-
- List<Position> positions;
- if (!files.TryGetValue(loc.Filename, out positions)) {
- positions = new List<Position>();
- files[loc.Filename] = positions;
- }
- positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx });
- }
-
- foreach (var kv in files) {
- var positions = kv.Value;
- positions.Sort();
-
- string content = "";
- if (System.IO.File.Exists(kv.Key)) {
- try {
- content = System.IO.File.ReadAllText(kv.Key);
- } catch {
- continue;
- }
- } else {
- continue;
- }
-
- var pos = new Position() { Line = 1, Column = 1 };
- var currPosIdx = 0;
- var output = new StringBuilder();
- RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
-
- foreach (var c in content) {
- if (c == '\n') {
- pos.Column = int.MaxValue; // flush remaining positions in this line
- }
-
- while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) {
- positions[currPosIdx].CharPos = pos.CharPos;
- RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos);
- currPosIdx++;
- }
-
- RtfAppend(output, c, ref pos.CharPos);
-
- if (c == '\n') {
- pos.Line++;
- pos.Column = 1;
- RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
- } else {
- pos.Column++;
- }
- }
-
- var resStr = output.ToString();
- foreach (var p in positions) {
- sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr };
- }
- }
- }
- #endregion
- }
-
- public abstract class NamedState : IState
- {
- protected Model.CapturedState state;
- private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel
-
- public NamedState(Model.CapturedState s, LanguageModel lm)
- {
- this.state = s;
- this.langModel = lm;
- }
-
- public Model.CapturedState State
- {
- get { return state; }
- }
-
- public virtual string Name
- {
- get
- {
- return langModel.ShortenToken(state.Name, 20, true);
- }
- }
-
- // by overriding this, one state can masqureade another
- public virtual string CapturedStateName
- {
- get { return State.Name; }
- }
-
- public virtual SourceViewState ShowSource()
- {
- return langModel.GetSourceLocation(CapturedStateName);
- }
-
- public abstract IEnumerable<IDisplayNode> Nodes { get; }
- }
-
- public class EdgeName
- {
- ILanguageSpecificModel langModel;
- string format;
- string cachedName;
- Model.Element[] args;
-
- public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args)
- {
- this.langModel = n;
- this.format = format;
- this.args = args.ToArray();
- }
-
- public EdgeName(string name) : this(null, name)
- {
- Util.Assert(name != null);
- }
-
- public override string ToString()
- {
- if (cachedName != null)
- return cachedName;
- cachedName = Format();
- return cachedName;
- }
-
- public override int GetHashCode()
- {
- int res = format.GetHashCode();
- foreach (var c in args) {
- res += c.GetHashCode();
- res *= 13;
- }
- return res;
- }
-
- public override bool Equals(object obj)
- {
- EdgeName e = obj as EdgeName;
- if (e == null) return false;
- if (e == this) return true;
- if (e.format != this.format || e.args.Length != this.args.Length)
- return false;
- for (int i = 0; i < this.args.Length; ++i)
- if (this.args[i] != e.args[i])
- return false;
- return true;
- }
-
- protected virtual string Format()
- {
- if (args == null || args.Length == 0)
- return format;
-
- var res = new StringBuilder(format.Length);
- for (int i = 0; i < format.Length; ++i) {
- var c = format[i];
-
- /*
- var canonical = false;
- if (c == '%' && i < format.Length - 1) {
- if (format[i + 1] == 'c') {
- ++i;
- canonical = true;
- }
- }
- */
-
- if (c == '%' && i < format.Length - 1) {
- var j = i + 1;
- while (j < format.Length && char.IsDigit(format[j]))
- j++;
- var len = j - i - 1;
- if (len > 0) {
- var idx = int.Parse(format.Substring(i + 1, len));
- res.Append(langModel.CanonicalName(args[idx]));
- i = j - 1;
- continue;
- }
- }
-
- res.Append(c);
- }
-
- return res.ToString();
- }
-
- public virtual IEnumerable<Model.Element> Dependencies
- {
- get { return args; }
- }
- }
-
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Numerics; + +namespace Microsoft.Boogie.ModelViewer +{ + public enum NameSeqSuffix + { + None, + WhenNonZero, + Always + } + + public abstract class LanguageModel : ILanguageSpecificModel + { + protected Dictionary<string, int> baseNameUse = new Dictionary<string, int>(); + protected Dictionary<Model.Element, string> canonicalName = new Dictionary<Model.Element, string>(); + protected Dictionary<string, Model.Element> invCanonicalName = new Dictionary<string, Model.Element>(); + protected Dictionary<Model.Element, string> localValue = new Dictionary<Model.Element, string>(); + protected Dictionary<string, SourceViewState> sourceLocations = new Dictionary<string, SourceViewState>(); + public readonly Model model; + + protected virtual bool UseLocalsForCanonicalNames + { + get { return false; } + } + + public readonly ViewOptions viewOpts; + public LanguageModel(Model model, ViewOptions opts) + { + this.model = model; + viewOpts = opts; + } + + public string AsPow2(Model.Integer elt) + { + var n = BigInteger.Parse(elt.Numeral); + var pow = new BigInteger(4096*4); + var k = 14; + var neg = false; + + if (n < 0) { + n = -n; + neg = true; + } + + while (k < 150) { + var diff = pow / 1000; + if (pow - diff < n && n < pow + diff) { + diff = n - pow; + var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff); + if (neg) res = "-(" + res + ")"; + return res; + } + if (n < pow) break; + k++; + pow *= 2; + } + + return elt.ToString(); + } + + // Elements (other than integers and Booleans) get canonical names of the form + // "<base>'<idx>", where <base> is returned by this function, and <idx> is given + // starting with 0, and incrementing when there are conflicts between bases. + // + // This function needs to return an appropriate base name for the element. It is given + // the element. + // + // A reasonable strategy is to check if it's a name of the local, and if so return it, + // and otherwise use the type of element (e.g., return "seq" for elements representing + // sequences). It is also possible to return "" in such cases. + // + // The suff output parameter specifies whether the number sequence suffix should be + // always added, only when it's non-zero, or never. + protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + string res; + if (elt is Model.Integer || elt is Model.Boolean) { + suff = NameSeqSuffix.None; + return elt.ToString(); + } + suff = NameSeqSuffix.Always; + if (UseLocalsForCanonicalNames) { + if (localValue.TryGetValue(elt, out res)) + return res; + } + return ""; + } + + public virtual void RegisterLocalValue(string name, Model.Element elt) + { + string curr; + if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0) + return; + localValue[elt] = name; + } + + protected virtual string AppendSuffix(string baseName, int id) + { + return baseName + "'" + id.ToString(); + } + + public virtual string CanonicalName(Model.Element elt) + { + string res; + if (elt == null) return "?"; + if (canonicalName.TryGetValue(elt, out res)) return res; + NameSeqSuffix suff; + var baseName = CanonicalBaseName(elt, out suff); + if (baseName == "") + suff = NameSeqSuffix.Always; + + if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) { + baseName += string.Format("({0})", elt); + suff = NameSeqSuffix.WhenNonZero; + } + + int cnt; + if (!baseNameUse.TryGetValue(baseName, out cnt)) + cnt = -1; + cnt++; + + if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero)) + res = AppendSuffix(baseName, cnt); + else + res = baseName; + + baseNameUse[baseName] = cnt; + canonicalName.Add(elt, res); + invCanonicalName[res.Replace(" ", "")] = elt; + return res; + } + + public virtual Model.Element FindElement(string canonicalName) + { + Model.Element res; + if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res)) + return res; + return null; + } + + public virtual string PathName(IEnumerable<IDisplayNode> path) + { + return path.Select(n => n.Name).Concat("."); + } + + public abstract IEnumerable<IState> States { get; } + + /// <summary> + /// Walks each input tree in BFS order, and force evaluation of Name and Value properties + /// (to get reasonable numbering of canonical values). + /// </summary> + public void Flush(IEnumerable<IDisplayNode> roots) + { + var workList = new Queue<IDisplayNode>(); + + Action<IEnumerable<IDisplayNode>> addList = (IEnumerable<IDisplayNode> nodes) => + { + var ch = new Dictionary<string, IDisplayNode>(); + foreach (var x in nodes) { + if (ch.ContainsKey(x.Name)) { + // throw new System.InvalidOperationException("duplicated model entry: " + x.Name); + } + ch[x.Name] = x; + } + foreach (var k in SortFields(nodes)) + workList.Enqueue(ch[k]); + }; + + addList(roots); + + var visited = new HashSet<Model.Element>(); + while (workList.Count > 0) { + var n = workList.Dequeue(); + + var dummy1 = n.Name; + var dummy2 = n.Value; + + if (n.Element != null) { + if (visited.Contains(n.Element)) + continue; + visited.Add(n.Element); + } + + addList(n.Children); + } + } + + #region field name sorting + /* + static bool HasSpecialChars(string s) + { + for (int i = 0; i < s.Length; ++i) + switch (s[i]) { + case '[': + case '<': + case '>': + case ']': + case '#': + case '\\': + case '(': + case ')': + return true; + } + return false; + } + */ + + static ulong GetNumber(string s, int beg) + { + ulong res = 0; + while (beg < s.Length) { + var c = s[beg]; + if ('0' <= c && c <= '9') { + res *= 10; + res += (uint)c - (uint)'0'; + } + beg++; + } + return res; + } + + public virtual int CompareFieldNames(string f1, string f2) + { + /* + bool s1 = HasSpecialChars(f1); + bool s2 = HasSpecialChars(f2); + if (s1 && !s2) + return 1; + if (!s1 && s2) + return -1; */ + var len = Math.Min(f1.Length, f2.Length); + var numberPos = -1; + for (int i = 0; i < len; ++i) { + var c1 = f1[i]; + var c2 = f2[i]; + if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') { + numberPos = i; + break; + } + if (c1 != c2) + break; + } + + if (numberPos >= 0) { + var v1 = GetNumber(f1, numberPos); + var v2 = GetNumber(f2, numberPos); + + if (v1 < v2) return -1; + else if (v1 > v2) return 1; + } + + return string.CompareOrdinal(f1, f2); + } + + public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2) + { + var diff = (int)n1.Category - (int)n2.Category; + if (diff != 0) return diff; + else return CompareFieldNames(n1.Name, n2.Name); + } + + public virtual IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields_) + { + var fields = new List<IDisplayNode>(fields_); + fields.Sort(CompareFields); + return fields.Select(f => f.Name); + } + #endregion + + #region Displaying source code + class Position : IComparable<Position> + { + public int Line, Column, Index; + public int CharPos; + public string Name; + + public int CompareTo(Position other) + { + if (this.Line == other.Line) + return this.Column - other.Column; + return this.Line - other.Line; + } + } + + public class SourceLocation + { + public string Filename; + public string AddInfo; + public int Line; + public int Column; + } + + public SourceViewState GetSourceLocation(string name) + { + SourceViewState res; + sourceLocations.TryGetValue(name, out res); + return res; + } + + // example parsed token: @"c:\users\foo\bar.c(12,10) : random string" + // the ": random string" part is optional + public virtual SourceLocation TryParseSourceLocation(string name) + { + var par = name.LastIndexOf('('); + if (par <= 0) return null; + + var res = new SourceLocation() { Filename = name.Substring(0, par) }; + + var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray(); + if (words.Length < 2) return null; + + if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null; + + var colon = name.IndexOf(':', par); + if (colon > 0) + res.AddInfo = name.Substring(colon + 1).Trim(); + else + res.AddInfo = ""; + + return res; + } + + static char[] dirSeps = new char[] { '\\', '/' }; + public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo) + { + var loc = TryParseSourceLocation(tok); + + if (loc != null) { + var fn = loc.Filename; + var idx = fn.LastIndexOfAny(dirSeps); + if (idx > 0) + fn = fn.Substring(idx + 1); + if (fn.Length > fnLimit) { + fn = fn.Substring(0, fnLimit) + ".."; + } + var addInfo = addAddInfo ? loc.AddInfo : ""; + if (addInfo != "") + addInfo = ":" + addInfo; + return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo); + } else { + return tok; + } + } + + protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos) + { + pos++; + switch (c) { + case '\r': pos--; break; + case '\\': sb.Append("\\\\"); break; + case '\n': sb.Append("\\par\n"); break; + case '{': sb.Append("\\{"); break; + case '}': sb.Append("\\}"); break; + default: sb.Append(c); break; + } + } + + protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos) + { + label += "."; + pos += label.Length; + sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}"); + } + + protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos) + { + string n = string.Format("{0:0000}: ", num); + pos += n.Length; + sb.Append(@"{\cf6 ").Append(n).Append("}"); + } + + protected virtual void GenerateSourceLocations(IEnumerable<NamedState> states) + { + sourceLocations = new Dictionary<string, SourceViewState>(); + + var files = new Dictionary<string, List<Position>>(); + var sIdx = -1; + + foreach (var s in states) { + var sn = s.CapturedStateName; + sIdx++; + var loc = TryParseSourceLocation(sn); + if (loc == null) continue; + + List<Position> positions; + if (!files.TryGetValue(loc.Filename, out positions)) { + positions = new List<Position>(); + files[loc.Filename] = positions; + } + positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx }); + } + + foreach (var kv in files) { + var positions = kv.Value; + positions.Sort(); + + string content = ""; + if (System.IO.File.Exists(kv.Key)) { + try { + content = System.IO.File.ReadAllText(kv.Key); + } catch { + continue; + } + } else { + continue; + } + + var pos = new Position() { Line = 1, Column = 1 }; + var currPosIdx = 0; + var output = new StringBuilder(); + RtfAppendLineNo(output, pos.Line, ref pos.CharPos); + + foreach (var c in content) { + if (c == '\n') { + pos.Column = int.MaxValue; // flush remaining positions in this line + } + + while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) { + positions[currPosIdx].CharPos = pos.CharPos; + RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos); + currPosIdx++; + } + + RtfAppend(output, c, ref pos.CharPos); + + if (c == '\n') { + pos.Line++; + pos.Column = 1; + RtfAppendLineNo(output, pos.Line, ref pos.CharPos); + } else { + pos.Column++; + } + } + + var resStr = output.ToString(); + foreach (var p in positions) { + sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr }; + } + } + } + #endregion + } + + public abstract class NamedState : IState + { + protected Model.CapturedState state; + private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel + + public NamedState(Model.CapturedState s, LanguageModel lm) + { + this.state = s; + this.langModel = lm; + } + + public Model.CapturedState State + { + get { return state; } + } + + public virtual string Name + { + get + { + return langModel.ShortenToken(state.Name, 20, true); + } + } + + // by overriding this, one state can masqureade another + public virtual string CapturedStateName + { + get { return State.Name; } + } + + public virtual SourceViewState ShowSource() + { + return langModel.GetSourceLocation(CapturedStateName); + } + + public abstract IEnumerable<IDisplayNode> Nodes { get; } + } + + public class EdgeName + { + ILanguageSpecificModel langModel; + string format; + string cachedName; + Model.Element[] args; + + public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args) + { + this.langModel = n; + this.format = format; + this.args = args.ToArray(); + } + + public EdgeName(string name) : this(null, name) + { + Util.Assert(name != null); + } + + public override string ToString() + { + if (cachedName != null) + return cachedName; + cachedName = Format(); + return cachedName; + } + + public override int GetHashCode() + { + int res = format.GetHashCode(); + foreach (var c in args) { + res += c.GetHashCode(); + res *= 13; + } + return res; + } + + public override bool Equals(object obj) + { + EdgeName e = obj as EdgeName; + if (e == null) return false; + if (e == this) return true; + if (e.format != this.format || e.args.Length != this.args.Length) + return false; + for (int i = 0; i < this.args.Length; ++i) + if (this.args[i] != e.args[i]) + return false; + return true; + } + + protected virtual string Format() + { + if (args == null || args.Length == 0) + return format; + + var res = new StringBuilder(format.Length); + for (int i = 0; i < format.Length; ++i) { + var c = format[i]; + + /* + var canonical = false; + if (c == '%' && i < format.Length - 1) { + if (format[i + 1] == 'c') { + ++i; + canonical = true; + } + } + */ + + if (c == '%' && i < format.Length - 1) { + var j = i + 1; + while (j < format.Length && char.IsDigit(format[j])) + j++; + var len = j - i - 1; + if (len > 0) { + var idx = int.Parse(format.Substring(i + 1, len)); + res.Append(langModel.CanonicalName(args[idx])); + i = j - 1; + continue; + } + } + + res.Append(c); + } + + return res.ToString(); + } + + public virtual IEnumerable<Model.Element> Dependencies + { + get { return args; } + } + } + +} diff --git a/Source/ModelViewer/Properties/AssemblyInfo.cs b/Source/ModelViewer/Properties/AssemblyInfo.cs index 0cb39b63..033d856d 100644 --- a/Source/ModelViewer/Properties/AssemblyInfo.cs +++ b/Source/ModelViewer/Properties/AssemblyInfo.cs @@ -1,25 +1,25 @@ -using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ModelViewer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft")]
-[assembly: AssemblyProduct("ModelViewer")]
-[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")]
-
-
+using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ModelViewer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("ModelViewer")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")] + + diff --git a/Source/ModelViewer/Properties/Resources.Designer.cs b/Source/ModelViewer/Properties/Resources.Designer.cs index 2a56d355..933cc4bf 100644 --- a/Source/ModelViewer/Properties/Resources.Designer.cs +++ b/Source/ModelViewer/Properties/Resources.Designer.cs @@ -1,63 +1,63 @@ -//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.1
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie.ModelViewer.Properties {
- using System;
-
-
- /// <summary>
- /// A strongly-typed resource class, for looking up localized strings, etc.
- /// </summary>
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- /// <summary>
- /// Returns the cached ResourceManager instance used by this class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- /// <summary>
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace Microsoft.Boogie.ModelViewer.Properties { + using System; + + + /// <summary> + /// A strongly-typed resource class, for looking up localized strings, etc. + /// </summary> + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// <summary> + /// Returns the cached ResourceManager instance used by this class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// <summary> + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Source/ModelViewer/Properties/Resources.resx b/Source/ModelViewer/Properties/Resources.resx index ffecec85..af7dbebb 100644 --- a/Source/ModelViewer/Properties/Resources.resx +++ b/Source/ModelViewer/Properties/Resources.resx @@ -1,117 +1,117 @@ -<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
+<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> </root>
\ No newline at end of file diff --git a/Source/ModelViewer/Properties/Settings.Designer.cs b/Source/ModelViewer/Properties/Settings.Designer.cs index d210a94e..4b60c7cc 100644 --- a/Source/ModelViewer/Properties/Settings.Designer.cs +++ b/Source/ModelViewer/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.1
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie.ModelViewer.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
+//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace Microsoft.Boogie.ModelViewer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Source/ModelViewer/Properties/Settings.settings b/Source/ModelViewer/Properties/Settings.settings index abf36c5d..39645652 100644 --- a/Source/ModelViewer/Properties/Settings.settings +++ b/Source/ModelViewer/Properties/Settings.settings @@ -1,7 +1,7 @@ -<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
- <Profiles>
- <Profile Name="(Default)" />
- </Profiles>
- <Settings />
-</SettingsFile>
+<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Source/ModelViewer/SourceView.Designer.cs b/Source/ModelViewer/SourceView.Designer.cs index 55ca2e37..30bc5408 100644 --- a/Source/ModelViewer/SourceView.Designer.cs +++ b/Source/ModelViewer/SourceView.Designer.cs @@ -1,63 +1,63 @@ -namespace Microsoft.Boogie.ModelViewer
-{
- partial class SourceView
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null)) {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.richTextBox1 = new System.Windows.Forms.RichTextBox();
- this.SuspendLayout();
- //
- // richTextBox1
- //
- this.richTextBox1.DetectUrls = false;
- this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.richTextBox1.HideSelection = false;
- this.richTextBox1.Location = new System.Drawing.Point(0, 0);
- this.richTextBox1.Name = "richTextBox1";
- this.richTextBox1.ReadOnly = true;
- this.richTextBox1.Size = new System.Drawing.Size(715, 582);
- this.richTextBox1.TabIndex = 0;
- this.richTextBox1.Text = "#include <vcc.h>\n\nint main()\n{\n\\foo\n}";
- this.richTextBox1.WordWrap = false;
- //
- // SourceView
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(715, 582);
- this.Controls.Add(this.richTextBox1);
- this.Name = "SourceView";
- this.Text = "SourceView";
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.RichTextBox richTextBox1;
- }
+namespace Microsoft.Boogie.ModelViewer +{ + partial class SourceView + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.DetectUrls = false; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBox1.HideSelection = false; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(715, 582); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = "#include <vcc.h>\n\nint main()\n{\n\\foo\n}"; + this.richTextBox1.WordWrap = false; + // + // SourceView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(715, 582); + this.Controls.Add(this.richTextBox1); + this.Name = "SourceView"; + this.Text = "SourceView"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } }
\ No newline at end of file diff --git a/Source/ModelViewer/SourceView.cs b/Source/ModelViewer/SourceView.cs index d520ede5..a40950b6 100644 --- a/Source/ModelViewer/SourceView.cs +++ b/Source/ModelViewer/SourceView.cs @@ -1,52 +1,52 @@ -using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public partial class SourceView : Form
- {
- public bool largeFont;
- bool prevLarge;
-
- public SourceView()
- {
- InitializeComponent();
- //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit);
- richTextBox1.BackColor = Color.White;
- }
-
- string prevRtf;
-
- string prefix =
- @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" +
- @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" +
- @"\viewkind4\uc1\pard\f0";
-
- internal void SetSourceLocation(SourceViewState r)
- {
- if (r.RichTextContent != prevRtf || prevLarge != largeFont) {
- richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n";
- prevRtf = r.RichTextContent;
- prevLarge = largeFont;
- }
-
- richTextBox1.Select(r.Location, 9);
-
- this.Text = r.Header;
- this.Show();
- }
-
- protected override void OnClosing(CancelEventArgs e)
- {
- base.OnClosing(e);
- e.Cancel = true;
- Hide();
- }
- }
-}
+using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Microsoft.Boogie.ModelViewer +{ + public partial class SourceView : Form + { + public bool largeFont; + bool prevLarge; + + public SourceView() + { + InitializeComponent(); + //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit); + richTextBox1.BackColor = Color.White; + } + + string prevRtf; + + string prefix = + @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" + + @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" + + @"\viewkind4\uc1\pard\f0"; + + internal void SetSourceLocation(SourceViewState r) + { + if (r.RichTextContent != prevRtf || prevLarge != largeFont) { + richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n"; + prevRtf = r.RichTextContent; + prevLarge = largeFont; + } + + richTextBox1.Select(r.Location, 9); + + this.Text = r.Header; + this.Show(); + } + + protected override void OnClosing(CancelEventArgs e) + { + base.OnClosing(e); + e.Cancel = true; + Hide(); + } + } +} diff --git a/Source/ModelViewer/SourceView.resx b/Source/ModelViewer/SourceView.resx index 29dcb1b3..1af7de15 100644 --- a/Source/ModelViewer/SourceView.resx +++ b/Source/ModelViewer/SourceView.resx @@ -1,120 +1,120 @@ -<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
+<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> </root>
\ No newline at end of file diff --git a/Source/ModelViewer/TreeSkeleton.cs b/Source/ModelViewer/TreeSkeleton.cs index 543788a8..c3dee44f 100644 --- a/Source/ModelViewer/TreeSkeleton.cs +++ b/Source/ModelViewer/TreeSkeleton.cs @@ -1,205 +1,205 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- internal class SkeletonItem
- {
- readonly string name;
- readonly List<SkeletonItem> children = new List<SkeletonItem>();
- internal readonly IDisplayNode[] displayNodes;
- internal bool[] isPrimary;
- internal readonly SkeletonItem parent;
- internal readonly Main main;
- internal readonly int level;
- internal bool expanded, wasExpanded;
- internal bool isMatch;
-
- public void Iter(Action<SkeletonItem> handler)
- {
- handler(this);
- children.ForEach(u => u.Iter(handler));
- }
-
- public IEnumerable<SkeletonItem> RecChildren
- {
- get
- {
- if (expanded) {
- foreach (var c in children) {
- yield return c;
- foreach (var ch in c.RecChildren)
- yield return ch;
- }
- }
- }
- }
-
- public SkeletonItem[] PopulateRoot(IEnumerable<IState> states)
- {
- var i = 0;
- foreach (var s in states) {
- displayNodes[i++] = new ContainerNode<IDisplayNode>(this.name, x => x, s.Nodes);
- }
-
- return BfsExpand(this);
- }
-
- public SkeletonItem(Main m, int stateCount)
- {
- name = "";
- main = m;
- displayNodes = new IDisplayNode[stateCount];
- isPrimary = new bool[stateCount];
- }
-
- internal SkeletonItem(string n, SkeletonItem par)
- : this(par.main, par.displayNodes.Length)
- {
- parent = par;
- name = n;
- level = par.level + 1;
- }
-
- public bool Expandable
- {
- get {
- if (wasExpanded)
- return children.Count > 0;
- return displayNodes.Any(d => d != null && d.Children.Count() > 0);
- }
- }
-
- public bool Expanded
- {
- get { return expanded; }
- set
- {
- expanded = value;
- if (expanded)
- ComputeChildren();
- }
- }
-
- static SkeletonItem[] BfsExpand(SkeletonItem skel)
- {
- for (int i = 0; i < skel.displayNodes.Length; ++i)
- BfsExpandCore(skel, i);
-
- var workItems = new Stack<SkeletonItem>();
- var allNodes = new List<SkeletonItem>();
- workItems.Push(skel);
-
- while (workItems.Count > 0) {
- var s = workItems.Pop();
- if (!s.isPrimary.Any())
- continue;
- allNodes.Add(s);
- s.children.Iter(workItems.Push);
- }
-
- return allNodes.ToArray();
- }
-
- static void BfsExpandCore(SkeletonItem skel, int idx)
- {
- var visited = new HashSet<Model.Element>();
- var workItems = new Queue<SkeletonItem>();
-
- workItems.Enqueue(skel);
- while (workItems.Count > 0) {
- var s = workItems.Dequeue();
- if (s.displayNodes[idx] == null)
- continue;
- var e = s.displayNodes[idx].Element;
- s.isPrimary[idx] = true;
- if (e != null) {
- if (visited.Contains(e))
- continue;
- visited.Add(e);
- }
- s.ComputeChildren();
- s.children.Iter(workItems.Enqueue);
- }
- }
-
- private void ComputeChildren()
- {
- if (wasExpanded) return;
- wasExpanded = true;
-
- var created = new Dictionary<string, SkeletonItem>();
- var names = new List<IDisplayNode>();
- for (int i = 0; i < displayNodes.Length; ++i) {
- var dn = displayNodes[i];
- if (dn == null) continue;
- foreach (var child in dn.Children) {
- if (child.ViewLevel > main.viewOpts.ViewLevel)
- continue;
- SkeletonItem skelChild;
- var name = child.Name;
- if (!created.TryGetValue(name, out skelChild)) {
- skelChild = new SkeletonItem(child.Name, this);
- created.Add(name, skelChild);
- names.Add(child);
- }
- skelChild.displayNodes[i] = child;
- }
- }
-
- foreach (var name in main.LangModel.SortFields(names)) {
- children.Add(created[name]);
- }
- }
-
- public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId)
- {
- var node = displayNodes[stateId];
- if (node == null)
- return false;
- var s1 = LongName(stateId).ToLower();
- var s2 = node.Value.ToLower();
-
- if (eq != null && node.Element != eq)
- return false;
-
- foreach (var w in words) {
- if (!s1.Contains(w) && !s2.Contains(w))
- return false;
- }
-
- foreach (var e in elts) {
- if (!node.References.Contains(e))
- return false;
- }
-
- return true;
- }
-
- public string LongName(int stateId)
- {
- var parents = new List<IDisplayNode>();
- for (var curr = this; curr != null; curr = curr.parent) {
- if (curr.parent != null) // skip the root
- parents.Add(curr.displayNodes[stateId]);
- }
- parents.Reverse();
- return main.LangModel.PathName(parents);
- }
-
- public void SyncWith(Dictionary<SkeletonItem, SkeletonItem> mapping, SkeletonItem old)
- {
- mapping[old] = this;
- Expanded = old.Expanded;
- var oldCh = old.children.ToDictionary(c => c.name);
- foreach (var c in children) {
- SkeletonItem oc;
- if (oldCh.TryGetValue(c.name, out oc))
- c.SyncWith(mapping, oc);
- }
- }
- }
-
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer +{ + internal class SkeletonItem + { + readonly string name; + readonly List<SkeletonItem> children = new List<SkeletonItem>(); + internal readonly IDisplayNode[] displayNodes; + internal bool[] isPrimary; + internal readonly SkeletonItem parent; + internal readonly Main main; + internal readonly int level; + internal bool expanded, wasExpanded; + internal bool isMatch; + + public void Iter(Action<SkeletonItem> handler) + { + handler(this); + children.ForEach(u => u.Iter(handler)); + } + + public IEnumerable<SkeletonItem> RecChildren + { + get + { + if (expanded) { + foreach (var c in children) { + yield return c; + foreach (var ch in c.RecChildren) + yield return ch; + } + } + } + } + + public SkeletonItem[] PopulateRoot(IEnumerable<IState> states) + { + var i = 0; + foreach (var s in states) { + displayNodes[i++] = new ContainerNode<IDisplayNode>(this.name, x => x, s.Nodes); + } + + return BfsExpand(this); + } + + public SkeletonItem(Main m, int stateCount) + { + name = ""; + main = m; + displayNodes = new IDisplayNode[stateCount]; + isPrimary = new bool[stateCount]; + } + + internal SkeletonItem(string n, SkeletonItem par) + : this(par.main, par.displayNodes.Length) + { + parent = par; + name = n; + level = par.level + 1; + } + + public bool Expandable + { + get { + if (wasExpanded) + return children.Count > 0; + return displayNodes.Any(d => d != null && d.Children.Count() > 0); + } + } + + public bool Expanded + { + get { return expanded; } + set + { + expanded = value; + if (expanded) + ComputeChildren(); + } + } + + static SkeletonItem[] BfsExpand(SkeletonItem skel) + { + for (int i = 0; i < skel.displayNodes.Length; ++i) + BfsExpandCore(skel, i); + + var workItems = new Stack<SkeletonItem>(); + var allNodes = new List<SkeletonItem>(); + workItems.Push(skel); + + while (workItems.Count > 0) { + var s = workItems.Pop(); + if (!s.isPrimary.Any()) + continue; + allNodes.Add(s); + s.children.Iter(workItems.Push); + } + + return allNodes.ToArray(); + } + + static void BfsExpandCore(SkeletonItem skel, int idx) + { + var visited = new HashSet<Model.Element>(); + var workItems = new Queue<SkeletonItem>(); + + workItems.Enqueue(skel); + while (workItems.Count > 0) { + var s = workItems.Dequeue(); + if (s.displayNodes[idx] == null) + continue; + var e = s.displayNodes[idx].Element; + s.isPrimary[idx] = true; + if (e != null) { + if (visited.Contains(e)) + continue; + visited.Add(e); + } + s.ComputeChildren(); + s.children.Iter(workItems.Enqueue); + } + } + + private void ComputeChildren() + { + if (wasExpanded) return; + wasExpanded = true; + + var created = new Dictionary<string, SkeletonItem>(); + var names = new List<IDisplayNode>(); + for (int i = 0; i < displayNodes.Length; ++i) { + var dn = displayNodes[i]; + if (dn == null) continue; + foreach (var child in dn.Children) { + if (child.ViewLevel > main.viewOpts.ViewLevel) + continue; + SkeletonItem skelChild; + var name = child.Name; + if (!created.TryGetValue(name, out skelChild)) { + skelChild = new SkeletonItem(child.Name, this); + created.Add(name, skelChild); + names.Add(child); + } + skelChild.displayNodes[i] = child; + } + } + + foreach (var name in main.LangModel.SortFields(names)) { + children.Add(created[name]); + } + } + + public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId) + { + var node = displayNodes[stateId]; + if (node == null) + return false; + var s1 = LongName(stateId).ToLower(); + var s2 = node.Value.ToLower(); + + if (eq != null && node.Element != eq) + return false; + + foreach (var w in words) { + if (!s1.Contains(w) && !s2.Contains(w)) + return false; + } + + foreach (var e in elts) { + if (!node.References.Contains(e)) + return false; + } + + return true; + } + + public string LongName(int stateId) + { + var parents = new List<IDisplayNode>(); + for (var curr = this; curr != null; curr = curr.parent) { + if (curr.parent != null) // skip the root + parents.Add(curr.displayNodes[stateId]); + } + parents.Reverse(); + return main.LangModel.PathName(parents); + } + + public void SyncWith(Dictionary<SkeletonItem, SkeletonItem> mapping, SkeletonItem old) + { + mapping[old] = this; + Expanded = old.Expanded; + var oldCh = old.children.ToDictionary(c => c.name); + foreach (var c in children) { + SkeletonItem oc; + if (oldCh.TryGetValue(c.name, out oc)) + c.SyncWith(mapping, oc); + } + } + } + +} diff --git a/Source/ModelViewer/VccProvider.cs b/Source/ModelViewer/VccProvider.cs index ae062c93..345dfda5 100644 --- a/Source/ModelViewer/VccProvider.cs +++ b/Source/ModelViewer/VccProvider.cs @@ -1,1526 +1,1526 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.Vcc
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- var vm = new VccModel(m, opts);
- return vm;
- }
- }
-
- enum DataKind
- {
- Flat,
- PhysPtr,
- SpecPtr,
- Object,
- Ptrset,
- Map
- }
-
- class VccModel : LanguageModel
- {
- public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field,
- f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr,
- f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state,
- f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx,
- f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field,
- f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index,
- f_dot, f_prim_emb;
- public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp;
- public readonly Model.Element elt_me, elt_null;
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- Dictionary<Model.Element, string> literalName = new Dictionary<Model.Element, string>();
- Dictionary<Model.Element, Model.Element> guessedType = new Dictionary<Model.Element,Model.Element>();
- public List<StateNode> states = new List<StateNode>();
- public Dictionary<string, string> localVariableNames = new Dictionary<string, string>();
-
- Dictionary<Model.Element, string> datatypeLongName = new Dictionary<Model.Element, string>();
-
- Dictionary<int, string> fileNameMapping = new Dictionary<int, string>();
-
- public const string selfMarker = "\\self";
- public const int maxDatatypeNameLength = 5;
-
- public VccModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- f_ptr_to = m.MkFunc("$ptr_to", 1);
- f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1);
- f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2);
- f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2);
- f_mathint = m.MkFunc("^^mathint", 0);
- f_local_value_is = m.MkFunc("$local_value_is", 5);
- f_heap = m.MkFunc("$heap", 1);
- f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2);
- f_select_value = m.MkFunc("Select_[$ptr]$int", 2);
- f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2);
- f_select_int = m.MkFunc("Select_[$ptr]$int", 2);
- f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2);
- f_owners = m.MkFunc("$f_owner", 1);
- f_closed = m.MkFunc("$f_closed", 1);
- f_roots = m.MkFunc("$roots", 1);
- f_timestamps = m.MkFunc("$f_timestamp", 1);
- f_active_option = m.MkFunc("$f_active_option", 1);
- f_field = m.MkFunc("$field", 1);
- f_field_type = m.MkFunc("$field_type", 1);
- f_int_to_ptr = m.MkFunc("$int_to_ptr", 1);
- f_ptr_to_int = m.MkFunc("$ptr_to_int", 1);
- f_ptr = m.MkFunc("$ptr", 2);
- f_dot = m.MkFunc("$dot", 2);
- f_map_t = m.MkFunc("$map_t", 2);
- f_is_null = m.MkFunc("$is_null", 1);
- f_good_state = m.MkFunc("$good_state", 1);
- f_int_to_version = m.MkFunc("$int_to_version", 1);
- f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1);
- f_int_to_field = m.MkFunc("$int_to_field", 1);
- f_set_in0 = m.MkFunc("$set_in0", 2);
- f_is_ghost_field = m.MkFunc("$is_ghost_field", 1);
- f_is_phys_field = m.MkFunc("$is_phys_field", 1);
- f_idx = m.MkFunc("$idx", 2);
- f_is_sequential_field = m.MkFunc("$is_sequential_field", 1);
- f_is_volatile_field = m.MkFunc("$is_volatile_field", 1);
- f_type_project_0 = m.MkFunc("$type_project_0", 1);
- f_array = m.MkFunc("$array", 2);
- f_blob_type = m.MkFunc("$blob_type", 1);
- f_array_emb = m.MkFunc("$array_emb", 2);
- f_addr = m.MkFunc("$addr", 1);
- f_base = m.MkFunc("$base", 1);
- f_prim_emb = m.MkFunc("$prim_emb", 1);
- f_address_root = m.MkFunc("$address_root", 2);
- f_field_arr_index = m.MkFunc("$field_arr_index", 1);
- f_field_arr_size = m.MkFunc("$field_arr_size", 1);
- f_field_arr_root = m.MkFunc("$field_arr_root", 1);
-
- tp_bool = m.GetFunc("^^bool").GetConstant();
- tp_mathint = m.GetFunc("^^mathint").GetConstant();
- tp_object = m.GetFunc("^^object").GetConstant();
- tp_state = m.GetFunc("^$#state_t").GetConstant();
- tp_ptrset = m.GetFunc("^$#ptrset").GetConstant();
-
- tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant();
-
- elt_me = m.GetFunc("$me").GetConstant();
- elt_null = m.GetFunc("$null").GetConstant();
-
- literalName[elt_me] = "\\me";
- literalName[elt_null] = "NULL";
- foreach (var tpl in f_phys_ptr_cast.Apps) {
- if (tpl.Args[0] == elt_null)
- literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL";
- }
- foreach (var tpl in f_spec_ptr_cast.Apps) {
- if (tpl.Args[0] == elt_null)
- literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL";
- }
- foreach (var fn in model.Functions) {
- if (fn.Arity == 0 && fn.Name.StartsWith("l#"))
- literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2);
- }
-
- DecodeFileNames();
- ComputeLocalVariableNames();
-
- foreach (var s in m.States) {
- var sn = new StateNode(this, s);
- sn.SetupVars();
- states.Add(sn);
- }
-
- var allStates = states.ToArray();
- if (allStates.Length == 1 && allStates[0].vars.Count == 0) {
- throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?");
- }
- states.Clear();
- var i = 0;
- while (i < allStates.Length) {
- var lastGoodName = allStates[i].State.Name;
-
- var userVars = new HashSet<string>(allStates[i].State.Variables.Where(localVariableNames.ContainsKey));
- i++;
- while (i < allStates.Length) {
- foreach (var v in allStates[i].State.Variables) {
- if (v == "$s" || userVars.Contains(v)) goto stop;
- if (localVariableNames.ContainsKey(v))
- userVars.Add(v);
- }
-
- var curName = TryParseSourceLocation(allStates[i].State.Name);
- if (!IsBadName(curName))
- lastGoodName = allStates[i].State.Name;
- i++;
- }
-
- stop:
-
- var lastState = allStates[i - 1];
- lastState.capturedStateName = lastGoodName;
- lastState.index = states.Count;
- states.Add(lastState);
- lastState.SetupVars();
- }
-
- foreach (var s in states) {
- var elt = s.State.TryGet("$s");
- if (elt != null)
- literalName[elt] = "\\state'" + s.index;
- }
-
- GenerateSourceLocations(states);
- }
-
-
- bool IsBadName(SourceLocation l)
- {
- return l == null || l.Filename.StartsWith("<");
- }
-
- private void ComputeLocalVariableNames()
- {
- var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct();
- Func<string, string> simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); };
- var userVars = vars.Where(s => simpleName(s) != null);
- var conflictsName = Conflicts(userVars, simpleName).ToArray();
- Func<string, string> qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; };
- var conflictsKind = Conflicts(conflictsName, qName).ToArray();
-
- var conflictsNameH = new HashSet<string>(conflictsName);
- var conflictsKindH = new HashSet<string>(conflictsKind);
-
- foreach (var v in userVars) {
- if (conflictsKindH.Contains(v)) continue;
- if (conflictsNameH.Contains(v))
- localVariableNames[v] = qName(v);
- else
- localVariableNames[v] = simpleName(v);
- }
-
- var idx = 0;
- foreach (var v in conflictsKind) {
- localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++);
- }
- }
-
- static IEnumerable<A> Conflicts<A, B>(IEnumerable<A> input, Func<A, B> f)
- {
- var revMap = new Dictionary<B, A>();
- var reported = new HashSet<A>();
-
- foreach (var k in input) {
- if (reported.Contains(k)) continue;
- var v = f(k);
- A tmp;
- if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) {
- if (!reported.Contains(tmp)) {
- yield return tmp;
- reported.Add(tmp);
- }
- yield return k;
- reported.Add(k);
- } else {
- revMap[v] = k;
- }
- }
- }
-
- #region Function name scoring
- static string[][] prefixes = new string[][] {
- new string[] { "F#", "$eq.$map", "Q#", },
- new string[] { "F#lambda", },
- new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", },
- };
-
- static string[][] totals = new string[][] {
- new string[] {
- "$current_timestamp",
- "$full_stop", "$function_entry", "$ptr_to_i4",
- "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8",
- "$span", "$sizeof", "$in_domain",
- "$inv2",
- "$is_claimable",
- "$set_cardinality", "$set_difference", "$set_union",
- "$thread_local", "$unchecked", "$writes_at",
- "$array_range", "$arrays_disjoint",
- "$byte_ptr_subtraction",
- },
-
- new string[] {
- "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr",
- "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field",
- "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state",
- "$is_primitive",
- "$spec_ptr_cast",
- "$phys_ptr_cast",
- "$is_null",
- "$in_domain_lab",
- "$inv_lab",
- "$set_in0",
- },
-
- new string[] {
- "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t",
- "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor",
- "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset",
- "$field_parent_type", "$field_type", "$file_name_is", "$good_state",
- "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain",
- "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2",
- "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic",
- "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap",
- "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots",
- "$timestamp", "$type_branch", "$type_code_is", "$type_project_0",
- "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state",
- "$set_singleton",
- "$f_owner", "$f_closed", "$f_timestamps",
- "$local_value_is",
- "$field_arr_ctor",
- "$idx",
- },
- };
-
- string[] state_props = new string[] { };
-
- Dictionary<string, int> functionScores = new Dictionary<string, int>();
-
- int FunctionScore(string name)
- {
- if (functionScores.Count == 0) {
- for (int i = 0; i < totals.Length; ++i)
- foreach (var s in totals[i])
- functionScores[s] = i;
- }
-
- int res;
- if (functionScores.TryGetValue(name, out res))
- return res;
-
- res = -1;
- if (name[0] == '$' && name.EndsWith("_to_int"))
- res = 1;
- else if (name.EndsWith("#frame"))
- res = 2;
- else if (name.Contains("#limited#"))
- res = 2;
- else {
- for (int i = 0; i < prefixes.Length; ++i)
- foreach (var p in prefixes[i])
- if (name.StartsWith(p)) {
- res = i;
- //goto stop;
- }
- //stop: ;
- }
-
- if (res == -1)
- res = 1; // default
-
- functionScores[name] = res;
- return res;
- }
- #endregion
-
- private void DecodeFileNames()
- {
- var fis = model.GetFunc("$file_name_is");
- foreach (var f in model.Functions) {
- if (f.Arity == 0 && f.Name.StartsWith("#file^")) {
- var sb = new StringBuilder();
- var idx = 6;
- var name = f.Name;
- while (idx < name.Length) {
- if (name[idx] == '?') {
- var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber);
- sb.Append(c);
- idx += 3;
- } else {
- sb.Append(name[idx++]);
- }
- }
- name = sb.ToString();
-
- foreach (var app in fis.AppsWithArg(1, f.GetConstant()))
- fileNameMapping[app.Args[0].AsInt()] = name;
- }
- }
- }
-
- private Model.Element DecodeDT(string dt)
- {
- if (dt.StartsWith("dt")) {
- var tpName = dt.Replace("dt", "#distTp");
- var f = model.TryGetFunc(tpName);
- if (f != null) {
- return f.GetConstant();
- //var res = f_type_project_0.TryEval(ptr);
- //if (res != null)
- // tp = res;
- }
- }
- return null;
- }
-
- private string DecodeToken(string name, ref Model.Element tp)
- {
- var idx = name.LastIndexOf("$");
- if (idx < 0) return null;
- var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@');
- if (words.Length > 3)
- tp = DecodeDT(words[3]);
- return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]);
- }
-
- public string GetUserVariableName(string name)
- {
- string res;
- localVariableNames.TryGetValue(name, out res);
- return res;
- }
-
-
- string GetUserVariableNameCore(string name, out string kind)
- {
- if (name.StartsWith("L#")) {
- kind = "local";
- return name.Substring(2);
- }
-
- if (name.StartsWith("P#")) {
- kind = "in-param";
- return name.Substring(2);
- }
-
- if (name.StartsWith("OP#")) {
- kind = "out-param";
- return name.Substring(3);
- }
-
- if (name.StartsWith("SL#")) {
- kind = "spec local";
- return name.Substring(3);
- }
-
- if (name.StartsWith("SP#")) {
- kind = "spec in-param";
- return name.Substring(3);
- }
-
- if (name.StartsWith("local.")) {
- kind = "param copied to local";
- return name.Substring(6);
- }
-
- if (name.StartsWith("addr.")) {
- kind = "stack-allocated struct";
- return name.Substring(5);
- }
-
- if (name == "$result") {
- kind = "function return value";
- return "\\result";
- }
-
- if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) {
- kind = "call result";
- return name;
- }
-
- if (name == "$s" && viewOpts.ViewLevel >= 1) {
- kind = "current state";
- return "\\now";
- }
-
- kind = null;
- return null;
- }
-
-
- private string LiteralName(Model.Element elt)
- {
- string r;
-
- if (literalName.TryGetValue(elt, out r))
- return r;
-
- r = TryTypeName(elt);
- if (r != null) {
- literalName[elt] = r;
- return r;
- }
-
- var i = elt as Model.Integer;
- if (i != null)
- return AsPow2(i);
-
- var bv = elt as Model.BitVector;
- if (bv != null)
- return bv.Numeral + "bv" + bv.Size.ToString();
-
- return null;
- }
-
- public Model.Element LocalType(string localName)
- {
- string dummy;
- var v = GetUserVariableNameCore(localName, out dummy);
- if (v == null) v = localName;
- var c = model.TryGetFunc("#loc." + v);
- if (c != null) {
- var localIs = f_local_value_is.AppWithArg(2, c.GetConstant());
- if (localIs != null)
- return localIs.Args[4];
- }
- foreach (var s in model.States.Reverse()) {
- var val = s.TryGet(localName);
- var tp = GuessType(val);
- if (tp != tp_mathint)
- return tp;
- }
- return tp_mathint;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f)
- {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- string TypeNameCore(Model.Element elt)
- {
- var deref = Image(elt, f_ptr_to);
- if (deref != null)
- return TypeName(deref) + "*";
- deref = Image(elt, f_spec_ptr_to);
- if (deref != null)
- return TypeName(deref) + "^";
- deref = Image(elt, f_blob_type);
- if (deref != null)
- return "_(blob " + CanonicalName(deref) + ")";
- var mapt = f_map_t.AppWithResult(elt);
- if (mapt != null)
- return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1]));
-
- var arr = f_array.AppWithResult(elt);
- if (arr != null) {
- return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString());
- }
-
- foreach (var app in elt.Names)
- if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) {
- var n = app.Func.Name.Substring(1);
- switch (n) {
- case "^i1": return "int8_t";
- case "^u1": return "uint8_t";
- case "^i2": return "int16_t";
- case "^u2": return "uint16_t";
- case "^i4": return "int32_t";
- case "^u4": return "uint32_t";
- case "^i8": return "int64_t";
- case "^u8": return "uint64_t";
- case "^bool": return "bool";
- default:
- var pref = "_vcc_math_type_";
- if (n.StartsWith(pref)) n = n.Substring(pref.Length);
- return n;
- }
- }
-
- return null;
- }
-
- public string TypeName(Model.Element elt)
- {
- var r = TryTypeName(elt);
- if (r == null)
- return elt.ToString();
- else return r;
- }
-
- public string TryTypeName(Model.Element elt)
- {
- string res;
- if (!typeName.TryGetValue(elt, out res)) {
- typeName[elt] = elt.ToString(); // avoid infinite recursion
- res = TypeNameCore(elt);
- typeName[elt] = res;
- }
- return res;
- }
-
- public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" };
-
- public string ConstantFieldName(Model.Element elt)
- {
- string res;
- IsConstantField(elt, out res);
- return res;
- }
-
- public bool IsConstantField(Model.Element elt)
- {
- string dummy;
- return IsConstantField(elt, out dummy);
- }
-
- public bool IsConstantField(Model.Element elt, out string theName)
- {
- var bestScore = int.MinValue;
- string bestName = null;
-
- foreach (var t in elt.Names) {
- var score = int.MinValue;
- string name = null;
- if (t.Args.Length == 0) {
- name = t.Func.Name;
- score = 0;
- var dotIdx = name.IndexOf('.');
- if (dotIdx > 0) {
- score += 10;
- name = name.Substring(dotIdx + 1);
- }
- if (name.Contains('#')) score -= 1;
- } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) {
- name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0]));
- score = 6;
- } else if (t.Func == f_array_emb) {
- name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString());
- score = 5;
- }
- if (score > bestScore) {
- bestScore = score;
- bestName = name;
- }
- }
-
- theName = bestName;
- return bestScore >= 5;
- }
-
- bool IsSomeState(Model.Element elt)
- {
- var tp = GuessType(elt);
- return tp == tp_state || tp == tp_heaptp;
- }
-
- bool IsThisState(Model.Element st, Model.Element elt)
- {
- return elt == st || elt == f_heap.TryEval(st);
- }
-
- Model.Element GuessType(Model.Element element)
- {
- Model.Element res;
- if (!guessedType.TryGetValue(element, out res)) {
- res = GuessTypeCore(element);
- guessedType[element] = res;
- }
- return res;
- }
-
- Model.Element GuessTypeCore(Model.Element element)
- {
- if (element is Model.Boolean)
- return tp_bool;
-
- var fld = f_field.TryEval(element);
- if (fld != null) {
- var tp = f_field_type.TryEval(fld);
- if (tp != null) {
- var ptp = f_ptr_to.TryEval(tp);
- if (ptp != null)
- return ptp;
- ptp = f_spec_ptr_to.TryEval(tp);
- if (ptp != null)
- return ptp;
- }
- return tp_object;
- }
-
- foreach (var tpl in element.References) {
- if (element == tpl.Result) {
- if (tpl.Func == f_ptr)
- return tp_object;
- if (tpl.Func == f_heap)
- return tp_heaptp;
- }
-
- if (tpl.Args.Length >= 1 && tpl.Args[0] == element) {
- if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state)
- return tp_state;
- }
-
- if (tpl.Func == f_select_bool)
- if (tpl.Args[0] == element)
- return tp_ptrset;
- else if (tpl.Args[1] == element)
- return tp_object;
-
- var fname = tpl.Func.Name;
-
- if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) {
- var mt = model.TryGetFunc("MT#" + fname);
- if (mt != null && mt.Arity == 0)
- return mt.GetConstant();
- var t1 = GuessType(tpl.Args[1]);
- var t2 = GuessType(tpl.Result);
- var t = f_map_t.TryEval(t1, t2);
- if (t != null)
- return t;
- }
-
- var tpName = DataTypeName(element, tpl);
- if (tpName != null) {
- var tp = model.TryGetFunc("^$#" + tpName);
- if (tp != null)
- return tp.GetConstant();
- }
- }
-
- return tp_mathint;
- }
-
- string DataTypeName(Model.Element elt, Model.FuncTuple tpl)
- {
- var fname = tpl.Func.Name;
- if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) {
- var fldName = tpl.Func.Name.Substring(3);
- var idx = fldName.LastIndexOf('.');
- if (idx > 0) {
- return fldName.Substring(0, idx).Replace("_vcc_math_type_", "");
- }
- }
-
- if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) {
- return fname.Substring(4).Replace("_vcc_math_type_", "");
- }
- return null;
- }
-
- public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl)
- {
- tpl = null;
-
- if (tp == tp_object)
- return DataKind.Object;
- else if (tp == tp_ptrset)
- return DataKind.Ptrset;
-
- tpl = f_ptr_to.AppWithResult(tp);
- if (tpl != null) return DataKind.PhysPtr;
- tpl = f_spec_ptr_to.AppWithResult(tp);
- if (tpl != null) return DataKind.SpecPtr;
- tpl = f_map_t.AppWithResult(tp);
- if (tpl != null) return DataKind.Map;
-
- return DataKind.Flat;
- }
-
- public DataKind GetKind(Model.Element tp)
- {
- Model.FuncTuple dummy;
- return GetKind(tp, out dummy);
- }
-
-
- public Model.Element WrapForUse(Model.Element elt, Model.Element tp)
- {
- Model.FuncTuple tpl;
- var kind = GetKind(tp, out tpl);
-
- if (kind == DataKind.Flat) {
- if (elt.Kind == Model.ElementKind.Integer) {
- var tpname = TypeName(tp);
- if(tpname.StartsWith("$")) tpname = tpname.Substring(1);
- if (tpname.StartsWith("#")) {
- foreach (var tupl in elt.References) {
- if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) {
- return tupl.Result;
- }
- }
- }
- }
- return elt;
- }
-
- if (kind == DataKind.Map) {
- if (elt.Kind == Model.ElementKind.Integer) {
- Model.Element theMap = null;
- foreach (var conv in model.Functions)
- // really, we should reconstruct the name of this function, but this is painful
- if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) {
- var app = conv.AppWithArg(0, elt);
- if (app != null) {
- theMap = app.Result;
- break;
- }
- }
- if (theMap == null) return elt;
- return theMap;
- }
- return elt;
- } else if (kind == DataKind.Ptrset) {
- var tmp = f_int_to_ptrset.TryEval(elt);
- if (tmp != null)
- return tmp;
- return elt;
- }
-
- if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
- if (elt.Kind == Model.ElementKind.Integer) {
- var tmp = f_int_to_ptr.TryEval(elt);
- if (tmp != null)
- elt = tmp;
- }
- }
-
- if (kind == DataKind.Object)
- return elt;
-
- if (kind == DataKind.PhysPtr)
- return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
-
- if (kind == DataKind.SpecPtr)
- return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
-
- Util.Assert(false);
- return elt;
- }
-
- void AddSpecialField(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func select_map)
- {
- if (elt == null) return;
-
- var map = state.State.TryGet("$s");
- if (map != null)
- map = select_map.TryEval(map);
- if (map != null) {
- var model = elt.Model;
- Model.Element val = f_select_bool.TryEval(map, elt);
- Model.Element tp = tp_bool;
- if (val == null) {
- val = f_select_ptr.TryEval(map, elt);
- tp = tp_object;
- }
- if (val == null) {
- val = f_select_int.TryEval(map, elt);
- tp = tp_mathint;
- }
- if (val != null) {
- res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
- }
- }
- }
-
- void AddPointerFunction(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func fn, Model.Element tp)
- {
- if (elt == null) return;
-
- var val = fn.TryEval(elt);
- if (val != null) {
- res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
- }
- }
-
- void AddPtrType(StateNode state, Model.Element elt, List<ElementNode> res)
- {
- var f = f_field.TryEval(elt);
- if (f == null) return;
-
- var tp = f_field_type.TryEval(f);
-
- var seq = "";
-
- var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean;
- var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean;
-
- if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) {
- seq = " (volatile/sequential mismatch)";
- } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) {
- seq = " (sequential)";
- } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) {
- seq = " (volatile)";
- }
-
- if (tp != null || seq != "") {
- res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty });
- }
- }
-
- string SkolemName(Model.Func f, ref Model.Element tp)
- {
- if (f.Name.IndexOf('!') > 0) {
- var tok = DecodeToken(f.Name, ref tp);
- if (tok != null) {
- var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$'));
- if (baseName.StartsWith("Q#"))
- baseName = baseName.Substring(2);
- return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false));
- }
- }
- return null;
- }
-
- string GlobalName(Model.Func f, ref Model.Element tp)
- {
- if (f.Name.StartsWith("G#")) {
- var idx = f.Name.LastIndexOf("#dt");
- if (idx < 0) return null;
- var name = f.Name.Substring(2, idx - 2);
- tp = DecodeDT(f.Name.Substring(idx + 1));
- return string.Format("::{0}", name);
- }
- return null;
- }
-
-
- public IEnumerable<ElementNode> CommonNodes(StateNode state)
- {
- var skolems = new List<ElementNode>();
-
- Model.Element tp = null;
-
- foreach (var f in model.Functions) {
- if (f.Arity != 0) continue;
- var s = SkolemName(f, ref tp);
- if (s == null)
- s = GlobalName(f, ref tp);
- if (s != null) {
- if (tp == null)
- tp = GuessType(f.GetConstant());
- var val = WrapForUse(f.GetConstant(), tp);
- skolems.Add(new VariableNode(state, s, val, tp));
- }
- }
-
- return skolems;
- }
-
- private Model.Element GuessPtrTo(Model.Element tp)
- {
- var p = f_ptr_to.TryEval(tp);
- if (p != null) return p;
- p = f_spec_ptr_to.TryEval(tp);
- if (p != null) return p;
- var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant();
- f_ptr_to.AddApp(nm, tp);
- return f_ptr_to.TryEval(tp);
- }
-
- private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to)
- {
- var p = f_ptr_to.TryEval(tp);
- if (p != null) return p;
- var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant();
- f_ptr_to.AddApp(nm, tp);
- return f_ptr_to.TryEval(tp);
- }
-
- private bool IsArrayField(Model.Element ptr)
- {
- return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null;
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt, Model.Element tp)
- {
- List<ElementNode> result = new List<ElementNode>();
- Model.FuncTuple tpl;
-
- if (elt == null) return result;
-
- var kind = GetKind(tp, out tpl);
- if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
- var heap = state.State.TryGet("$s");
- if (heap != null)
- heap = f_heap.TryEval(heap);
- var addresses = new HashSet<Model.Element>();
-
- if (heap != null) {
- var basePtr = f_base.TryEval(elt);
- foreach (var fld in f_select_field.AppsWithArg(0, heap)) {
- var val = f_select_value.TryEval(fld.Result, elt);
- if (val != null) {
- var field = fld.Args[1];
- if (!IsConstantField(field) && viewOpts.ViewLevel <= 2)
- continue;
- var addr = f_dot.TryEval(elt, field);
- if (addr != null) addresses.Add(addr);
- var node = ComputeUnionActiveOption(state, elt, val, field);
- if (node != null)
- result.Add(node);
- else
- BuildFieldNode(result, state, addr, field, val, addr);
- }
- }
- //result.Sort(CompareFields);
- }
-
- {
- foreach (var app in f_idx.AppsWithArg(0, elt)) {
- var addr = app.Result;
- Model.Element val = null, atp = tp;
-
- addresses.Add(addr);
-
- foreach (var papp in f_dot.AppsWithResult(addr)) {
- var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]);
- if (tmp != null) {
- val = tmp;
- var tt = f_field_type.TryEval(papp.Args[1]);
- if (tt != null) atp = tt;
- }
- }
-
- if (val != null)
- val = WrapForUse(val, atp);
- result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet });
- if (addr != null)
- result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet });
- }
- }
-
- foreach (var ptr in f_dot.AppsWithArg(0, elt)) {
- if (addresses.Contains(ptr.Result)) continue;
- var fld = ptr.Args[1];
- var idx = f_field_arr_index.TryEval(fld);
- if (idx != null) {
- var xtp = f_field_type.TryEval(fld);
- result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet });
- }
- if (!IsConstantField(ptr.Args[1])) continue;
- BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result);
- }
-
- AddSpecialField(state, elt, result, "\\closed", f_closed);
- AddSpecialField(state, elt, result, "\\owner", f_owners);
- AddSpecialField(state, elt, result, "\\root", f_roots);
- AddSpecialField(state, elt, result, "\\timestamp", f_timestamps);
- AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object);
- AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint);
-
- if (viewOpts.ViewLevel >= 1) {
- AddPtrType(state, elt, result);
- AddCasts(state, elt, result);
- var sets = new SetsNode(state, elt);
- if (!sets.IsEmpty)
- result.Add(sets);
- }
-
- } else if (kind == DataKind.Map) {
- var elTp = tpl.Args[1];
- foreach (var sel in model.Functions)
- if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) {
- foreach (var app in sel.AppsWithArg(0, elt)) {
- var val = WrapForUse(app.Result, elTp);
- var edgname = new EdgeName(this, "[%0]", app.Args[1]);
- result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet });
- }
- }
- } else if (kind == DataKind.Ptrset) {
- foreach (var sel in f_select_bool.AppsWithArg(0, elt)) {
- var edgname = new EdgeName(this, "[%0]", sel.Args[1]);
- result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet });
- }
- } else if (kind == DataKind.Flat) {
- foreach (var tupl in elt.References) {
- if (tupl.Args.Length == 1 && tupl.Args[0] == elt) {
- var fname = tupl.Func.Name;
- var idx = fname.LastIndexOf('.');
- if (fname.StartsWith("RF#") && idx > 0) {
- fname = fname.Substring(idx + 1);
- } else if (fname.StartsWith("DP#p")) {
- fname = fname.Substring(4);
- idx = fname.IndexOf('#');
- if (idx > 0)
- fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx);
- } else {
- fname = null;
- }
-
- if (fname != null)
- result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField });
- }
- }
- }
-
- if (!(elt is Model.Boolean)) {
- var curState = state.State.TryGet("$s");
-
- foreach (var tupl in elt.References) {
- {
- var seenSelf = false;
- var seenState = false;
- var seenThisState = false;
- var args = tupl.Args;
- for (int i = 0; i < args.Length; ++i) {
- if (args[i] == elt) seenSelf = true;
- if (IsThisState(curState, args[i])) seenThisState = true;
- else if (IsSomeState(args[i])) seenState = true;
- }
- if (!seenSelf) continue; // not looking for aliases (maybe we should?)
- if (seenState && !seenThisState) continue;
- }
-
- var argsFmt = new StringBuilder();
- var name = tupl.Func.Name;
-
- var score = FunctionScore(name);
- if (score >= viewOpts.ViewLevel)
- continue;
-
- var retTp = GuessType(tupl.Result);
- var retVal = tupl.Result;
-
- var cat = NodeCategory.MethodologyProperty;
- if (name.StartsWith("F#")) {
- name = name.Substring(2);
- cat = NodeCategory.UserFunction;
- }
-
- if (name.StartsWith("DF#")) {
- name = name.Substring(3);
- cat = NodeCategory.UserFunction;
- }
-
- if (name.StartsWith("$eq.$"))
- name = "EQ";
-
- {
- Model.Element sktp = null;
- var sk = SkolemName(tupl.Func, ref sktp);
- if (sk != null) {
- name = sk;
- if (sktp != null)
- retVal = WrapForUse(tupl.Result, sktp);
- cat = NodeCategory.Maplet;
- }
- }
-
- {
- argsFmt.Append(name).Append("(");
- var args = new List<Model.Element>();
- foreach (var a in tupl.Args) {
- if (IsThisState(curState, a))
- argsFmt.Append("\\now, ");
- else if (a == elt)
- argsFmt.Append(selfMarker + ", ");
- else {
- argsFmt.AppendFormat("%{0}, ", args.Count);
- args.Add(a);
- }
- }
- argsFmt.Length -= 2;
- argsFmt.Append(")");
- var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray());
- result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat });
- }
-
- }
- }
-
- return result;
- }
-
- private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field)
- {
- if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) {
- var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val));
- if (activeOpt != null) {
- var nm = ConstantFieldName(field);
- var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty };
- return fieldNode;
- }
- }
- return null;
- }
-
- private void AddCasts(StateNode state, Model.Element elt, List<ElementNode> result)
- {
- foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) {
- if (app.Result != elt)
- result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to)));
- }
- foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) {
- if (app.Result != elt)
- result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to)));
- }
- var addr = f_addr.TryEval(elt);
- if (addr != null) {
- foreach (var app in f_blob_type.Apps) {
- var blob = f_address_root.TryEval(addr, app.Result);
- if (blob != null) {
- result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result));
- }
- }
- }
- }
-
- private void BuildFieldNode(List<ElementNode> result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr)
- {
- var ftp = f_field_type.TryEval(field);
- if (val != null)
- val = WrapForUse(val, ftp);
-
- if (IsArrayField(ptr)) {
- val = addr;
- addr = null;
- ftp = GuessPtrTo(ftp);
- }
-
- var nm = ConstantFieldName(field);
- var edgname = nm == null ? field.ToString() : nm;
-
- var cat = NodeCategory.PhysField;
- if (f_is_ghost_field.IsTrue(field))
- cat = NodeCategory.SpecField;
- if (nm != null && nm.Contains("<"))
- cat = NodeCategory.MethodologyProperty;
-
- var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat};
- result.Add(fieldNode);
-
- if (addr != null) {
- result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat });
- }
- }
-
- public override IEnumerable<IState> States
- {
- get
- {
- return states;
- }
- }
-
- private int DataTypeToString(StringBuilder sb, int level, Model.Element elt)
- {
- Model.FuncTuple ctor = null;
- int len = 1;
- string dataTypeType = null;
- foreach (var app in elt.References) {
- var n = app.Func.Name;
- if (app.Result == elt && n.StartsWith("DF#")) {
- ctor = app;
- }
- var tmp = DataTypeName(elt, app);
- if (tmp != null) dataTypeType = tmp;
- }
-
- if (dataTypeType != null) {
- if (ctor != null)
- sb.Append(ctor.Func.Name.Substring(3));
- else
- sb.Append(DataTypeShortName(elt, dataTypeType));
- if (ctor != null && ctor.Args.Length > 0) {
- if (level <= 0) sb.Append("(...)");
- else {
- sb.Append("(");
- for (int i = 0; i < ctor.Args.Length; ++i) {
- if (i != 0) sb.Append(", ");
- len += DataTypeToString(sb, level - 1, ctor.Args[i]);
- }
- sb.Append(")");
- }
- }
- } else {
- sb.Append(CanonicalName(elt));
- }
- return len;
- }
-
- private string DataTypeShortName(Model.Element elt, string tp)
- {
- var baseName = tp;
-
- var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt);
- if (hd != null) {
- foreach (var nm in hd.References) {
- if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#"))
- baseName = nm.Func.Name.Substring(3);
- }
- }
-
- return baseName;
- }
-
- private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff)
- {
- var vm = this;
-
- if (name.Contains("[") || name.Contains("'"))
- name = "";
-
- if (name != "")
- return name;
-
- var isNull = false;
- foreach (var tpl in elt.References) {
- var fn = tpl.Func;
- if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt)
- return "map";
- if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt)
- return "map";
-
- if (fn.Arity >= 1 && tpl.Args[0] == elt) {
- if (fn == f_select_bool)
- return "ptrset";
- }
-
- if (tpl.Result == elt)
- if (fn == f_int_to_version)
- return "version";
-
- if (fn == f_is_null && tpl.Result == model.True)
- isNull = true;
-
- var dtpName = DataTypeName(elt, tpl);
- if (dtpName != null) {
- var sb = new StringBuilder();
- string prev = null;
- datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen)
- for (int lev = 0; lev < 10; lev++) {
- sb.Length = 0;
- var len = DataTypeToString(sb, lev, elt);
- if (prev == null || len <= maxDatatypeNameLength)
- prev = sb.ToString();
- }
-
- datatypeLongName[elt] = prev;
- suff = NameSeqSuffix.WhenNonZero;
- return prev;
- }
- }
-
- var fld = vm.f_field.TryEval(elt);
- if (fld != null) {
- var tp = vm.f_field_type.TryEval(fld);
- if (tp != null) {
- var n = vm.TryTypeName(tp);
- if (n != null) {
- if (isNull)
- return "(" + n + "*)NULL";
- return n;
- }
- }
- }
-
- return "";
- }
-
- protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- var lit = this.LiteralName(elt);
- if (lit != null) {
- suff = NameSeqSuffix.None;
- return lit;
- }
- if (datatypeLongName.TryGetValue(elt, out lit)) {
- suff = NameSeqSuffix.WhenNonZero;
- return lit;
- }
-
- var name = base.CanonicalBaseName(elt, out suff);
- name = CanonicalBaseNameCore(name, elt, true, ref suff);
-
- return name;
- }
-
- public override string PathName(IEnumerable<IDisplayNode> path)
- {
- var sb = new StringBuilder();
- foreach (var d in path) {
- var name = d.Name;
- if (name == "") continue; // can that happen?
- if (name.Contains("(") && name.Contains(selfMarker)) {
- var repl = name.Replace(selfMarker, sb.ToString());
- sb.Length = 0;
- sb.Append(repl);
- } else {
- if (sb.Length > 0 && name[0] != '[')
- sb.Append("->");
- sb.Append(d.Name);
- }
- }
-
- return sb.ToString();
- }
- }
-
- class StateNode : NamedState
- {
- internal VccModel vm;
- internal List<VariableNode> vars;
- internal List<ElementNode> commons;
- internal int index;
- internal string capturedStateName;
-
- public StateNode(VccModel parent, Model.CapturedState s)
- : base(s, parent)
- {
- this.capturedStateName = s.Name;
- this.vm = parent;
- }
-
- internal void SetupVars()
- {
- if (vars != null) return;
- vars = new List<VariableNode>();
-
- var names = Util.Empty<string>();
-
- if (vm.states.Count > 0) {
- var prev = vm.states.Last();
- names = prev.vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- var localName = vm.GetUserVariableName(v);
- if (localName != null) {
- var tp = vm.LocalType(v);
- var val = state.TryGet(v);
- val = vm.WrapForUse(val, tp);
- var vn = new VariableNode(this, v, val, tp) { ShortName = localName };
- vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- vm.RegisterLocalValue(vn.Name, val);
- vars.Add(vn);
- }
- }
-
- vm.Flush(vars);
-
- commons = new List<ElementNode>();
- commons.AddRange(vm.CommonNodes(this));
- }
-
- public override IEnumerable<IDisplayNode> Nodes
- {
- get {
- return vars.Concat(commons);
- }
- }
-
- public override string CapturedStateName
- {
- get
- {
- return this.capturedStateName;
- }
- }
- }
-
- class ElementNode : DisplayNode
- {
- protected StateNode stateNode;
- protected Model.Element tp;
- protected VccModel vm { get { return stateNode.vm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp)
- : base(st.vm, name, elt)
- {
- this.stateNode = st;
- this.tp = tp;
- }
-
- protected override void ComputeChildren()
- {
- children.AddRange(vm.GetExpansion(stateNode, element, tp));
- }
-
- public override string ToolTip
- {
- get
- {
- var sb = new StringBuilder();
- if (tp != null)
- sb.AppendFormat("Type: {0}\n", vm.TypeName(tp));
- var i = element as Model.Integer;
- if (i != null) {
- var n = System.Numerics.BigInteger.Parse(i.Numeral);
- sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n);
- } else if (element != null) {
- sb.AppendFormat("Value: {0}\n", element);
- }
- return sb.ToString();
- }
- }
- }
-
- class SetsNode : ElementNode
- {
- List<Model.Element> refs = new List<Model.Element>();
-
- public SetsNode(StateNode par, Model.Element elt)
- : base(par, new EdgeName("\\in ..."), null, null)
- {
- children = new List<IDisplayNode>();
- foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) {
- children.Add(
- new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty });
- refs.Add(app.Args[0]);
- }
- Category = NodeCategory.MethodologyProperty;
- }
-
- public override IEnumerable<Model.Element> References
- {
- get
- {
- return refs;
- }
- }
-
- public bool IsEmpty { get { return children.Count == 0; } }
- }
-
-
- class FieldNode : ElementNode
- {
- public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
- : base(par, realName, elt, tp)
- {
- }
- }
-
- class MapletNode : ElementNode
- {
- public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
- : base(par, realName, elt, tp)
- {
- }
- }
-
- class VariableNode : ElementNode
- {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp)
- : base(par, new EdgeName(realName), elt, tp)
- {
- this.realName = realName;
- }
-
- public override string ShortName
- {
- set { this.name = new EdgeName(value); }
- get { return this.name.ToString(); }
- }
- }
-}
+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Boogie.ModelViewer.Vcc +{ + public class Provider : ILanguageProvider + { + public static Provider Instance = new Provider(); + private Provider() { } + + public bool IsMyModel(Model m) + { + return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null; + } + + public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) + { + var vm = new VccModel(m, opts); + return vm; + } + } + + enum DataKind + { + Flat, + PhysPtr, + SpecPtr, + Object, + Ptrset, + Map + } + + class VccModel : LanguageModel + { + public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field, + f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr, + f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state, + f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx, + f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field, + f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index, + f_dot, f_prim_emb; + public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp; + public readonly Model.Element elt_me, elt_null; + Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>(); + Dictionary<Model.Element, string> literalName = new Dictionary<Model.Element, string>(); + Dictionary<Model.Element, Model.Element> guessedType = new Dictionary<Model.Element,Model.Element>(); + public List<StateNode> states = new List<StateNode>(); + public Dictionary<string, string> localVariableNames = new Dictionary<string, string>(); + + Dictionary<Model.Element, string> datatypeLongName = new Dictionary<Model.Element, string>(); + + Dictionary<int, string> fileNameMapping = new Dictionary<int, string>(); + + public const string selfMarker = "\\self"; + public const int maxDatatypeNameLength = 5; + + public VccModel(Model m, ViewOptions opts) + : base(m, opts) + { + f_ptr_to = m.MkFunc("$ptr_to", 1); + f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1); + f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2); + f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2); + f_mathint = m.MkFunc("^^mathint", 0); + f_local_value_is = m.MkFunc("$local_value_is", 5); + f_heap = m.MkFunc("$heap", 1); + f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2); + f_select_value = m.MkFunc("Select_[$ptr]$int", 2); + f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2); + f_select_int = m.MkFunc("Select_[$ptr]$int", 2); + f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2); + f_owners = m.MkFunc("$f_owner", 1); + f_closed = m.MkFunc("$f_closed", 1); + f_roots = m.MkFunc("$roots", 1); + f_timestamps = m.MkFunc("$f_timestamp", 1); + f_active_option = m.MkFunc("$f_active_option", 1); + f_field = m.MkFunc("$field", 1); + f_field_type = m.MkFunc("$field_type", 1); + f_int_to_ptr = m.MkFunc("$int_to_ptr", 1); + f_ptr_to_int = m.MkFunc("$ptr_to_int", 1); + f_ptr = m.MkFunc("$ptr", 2); + f_dot = m.MkFunc("$dot", 2); + f_map_t = m.MkFunc("$map_t", 2); + f_is_null = m.MkFunc("$is_null", 1); + f_good_state = m.MkFunc("$good_state", 1); + f_int_to_version = m.MkFunc("$int_to_version", 1); + f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1); + f_int_to_field = m.MkFunc("$int_to_field", 1); + f_set_in0 = m.MkFunc("$set_in0", 2); + f_is_ghost_field = m.MkFunc("$is_ghost_field", 1); + f_is_phys_field = m.MkFunc("$is_phys_field", 1); + f_idx = m.MkFunc("$idx", 2); + f_is_sequential_field = m.MkFunc("$is_sequential_field", 1); + f_is_volatile_field = m.MkFunc("$is_volatile_field", 1); + f_type_project_0 = m.MkFunc("$type_project_0", 1); + f_array = m.MkFunc("$array", 2); + f_blob_type = m.MkFunc("$blob_type", 1); + f_array_emb = m.MkFunc("$array_emb", 2); + f_addr = m.MkFunc("$addr", 1); + f_base = m.MkFunc("$base", 1); + f_prim_emb = m.MkFunc("$prim_emb", 1); + f_address_root = m.MkFunc("$address_root", 2); + f_field_arr_index = m.MkFunc("$field_arr_index", 1); + f_field_arr_size = m.MkFunc("$field_arr_size", 1); + f_field_arr_root = m.MkFunc("$field_arr_root", 1); + + tp_bool = m.GetFunc("^^bool").GetConstant(); + tp_mathint = m.GetFunc("^^mathint").GetConstant(); + tp_object = m.GetFunc("^^object").GetConstant(); + tp_state = m.GetFunc("^$#state_t").GetConstant(); + tp_ptrset = m.GetFunc("^$#ptrset").GetConstant(); + + tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant(); + + elt_me = m.GetFunc("$me").GetConstant(); + elt_null = m.GetFunc("$null").GetConstant(); + + literalName[elt_me] = "\\me"; + literalName[elt_null] = "NULL"; + foreach (var tpl in f_phys_ptr_cast.Apps) { + if (tpl.Args[0] == elt_null) + literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL"; + } + foreach (var tpl in f_spec_ptr_cast.Apps) { + if (tpl.Args[0] == elt_null) + literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL"; + } + foreach (var fn in model.Functions) { + if (fn.Arity == 0 && fn.Name.StartsWith("l#")) + literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2); + } + + DecodeFileNames(); + ComputeLocalVariableNames(); + + foreach (var s in m.States) { + var sn = new StateNode(this, s); + sn.SetupVars(); + states.Add(sn); + } + + var allStates = states.ToArray(); + if (allStates.Length == 1 && allStates[0].vars.Count == 0) { + throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?"); + } + states.Clear(); + var i = 0; + while (i < allStates.Length) { + var lastGoodName = allStates[i].State.Name; + + var userVars = new HashSet<string>(allStates[i].State.Variables.Where(localVariableNames.ContainsKey)); + i++; + while (i < allStates.Length) { + foreach (var v in allStates[i].State.Variables) { + if (v == "$s" || userVars.Contains(v)) goto stop; + if (localVariableNames.ContainsKey(v)) + userVars.Add(v); + } + + var curName = TryParseSourceLocation(allStates[i].State.Name); + if (!IsBadName(curName)) + lastGoodName = allStates[i].State.Name; + i++; + } + + stop: + + var lastState = allStates[i - 1]; + lastState.capturedStateName = lastGoodName; + lastState.index = states.Count; + states.Add(lastState); + lastState.SetupVars(); + } + + foreach (var s in states) { + var elt = s.State.TryGet("$s"); + if (elt != null) + literalName[elt] = "\\state'" + s.index; + } + + GenerateSourceLocations(states); + } + + + bool IsBadName(SourceLocation l) + { + return l == null || l.Filename.StartsWith("<"); + } + + private void ComputeLocalVariableNames() + { + var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct(); + Func<string, string> simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); }; + var userVars = vars.Where(s => simpleName(s) != null); + var conflictsName = Conflicts(userVars, simpleName).ToArray(); + Func<string, string> qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; }; + var conflictsKind = Conflicts(conflictsName, qName).ToArray(); + + var conflictsNameH = new HashSet<string>(conflictsName); + var conflictsKindH = new HashSet<string>(conflictsKind); + + foreach (var v in userVars) { + if (conflictsKindH.Contains(v)) continue; + if (conflictsNameH.Contains(v)) + localVariableNames[v] = qName(v); + else + localVariableNames[v] = simpleName(v); + } + + var idx = 0; + foreach (var v in conflictsKind) { + localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++); + } + } + + static IEnumerable<A> Conflicts<A, B>(IEnumerable<A> input, Func<A, B> f) + { + var revMap = new Dictionary<B, A>(); + var reported = new HashSet<A>(); + + foreach (var k in input) { + if (reported.Contains(k)) continue; + var v = f(k); + A tmp; + if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) { + if (!reported.Contains(tmp)) { + yield return tmp; + reported.Add(tmp); + } + yield return k; + reported.Add(k); + } else { + revMap[v] = k; + } + } + } + + #region Function name scoring + static string[][] prefixes = new string[][] { + new string[] { "F#", "$eq.$map", "Q#", }, + new string[] { "F#lambda", }, + new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", }, + }; + + static string[][] totals = new string[][] { + new string[] { + "$current_timestamp", + "$full_stop", "$function_entry", "$ptr_to_i4", + "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8", + "$span", "$sizeof", "$in_domain", + "$inv2", + "$is_claimable", + "$set_cardinality", "$set_difference", "$set_union", + "$thread_local", "$unchecked", "$writes_at", + "$array_range", "$arrays_disjoint", + "$byte_ptr_subtraction", + }, + + new string[] { + "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr", + "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field", + "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state", + "$is_primitive", + "$spec_ptr_cast", + "$phys_ptr_cast", + "$is_null", + "$in_domain_lab", + "$inv_lab", + "$set_in0", + }, + + new string[] { + "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t", + "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor", + "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset", + "$field_parent_type", "$field_type", "$file_name_is", "$good_state", + "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain", + "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2", + "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic", + "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap", + "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots", + "$timestamp", "$type_branch", "$type_code_is", "$type_project_0", + "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state", + "$set_singleton", + "$f_owner", "$f_closed", "$f_timestamps", + "$local_value_is", + "$field_arr_ctor", + "$idx", + }, + }; + + string[] state_props = new string[] { }; + + Dictionary<string, int> functionScores = new Dictionary<string, int>(); + + int FunctionScore(string name) + { + if (functionScores.Count == 0) { + for (int i = 0; i < totals.Length; ++i) + foreach (var s in totals[i]) + functionScores[s] = i; + } + + int res; + if (functionScores.TryGetValue(name, out res)) + return res; + + res = -1; + if (name[0] == '$' && name.EndsWith("_to_int")) + res = 1; + else if (name.EndsWith("#frame")) + res = 2; + else if (name.Contains("#limited#")) + res = 2; + else { + for (int i = 0; i < prefixes.Length; ++i) + foreach (var p in prefixes[i]) + if (name.StartsWith(p)) { + res = i; + //goto stop; + } + //stop: ; + } + + if (res == -1) + res = 1; // default + + functionScores[name] = res; + return res; + } + #endregion + + private void DecodeFileNames() + { + var fis = model.GetFunc("$file_name_is"); + foreach (var f in model.Functions) { + if (f.Arity == 0 && f.Name.StartsWith("#file^")) { + var sb = new StringBuilder(); + var idx = 6; + var name = f.Name; + while (idx < name.Length) { + if (name[idx] == '?') { + var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber); + sb.Append(c); + idx += 3; + } else { + sb.Append(name[idx++]); + } + } + name = sb.ToString(); + + foreach (var app in fis.AppsWithArg(1, f.GetConstant())) + fileNameMapping[app.Args[0].AsInt()] = name; + } + } + } + + private Model.Element DecodeDT(string dt) + { + if (dt.StartsWith("dt")) { + var tpName = dt.Replace("dt", "#distTp"); + var f = model.TryGetFunc(tpName); + if (f != null) { + return f.GetConstant(); + //var res = f_type_project_0.TryEval(ptr); + //if (res != null) + // tp = res; + } + } + return null; + } + + private string DecodeToken(string name, ref Model.Element tp) + { + var idx = name.LastIndexOf("$"); + if (idx < 0) return null; + var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@'); + if (words.Length > 3) + tp = DecodeDT(words[3]); + return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]); + } + + public string GetUserVariableName(string name) + { + string res; + localVariableNames.TryGetValue(name, out res); + return res; + } + + + string GetUserVariableNameCore(string name, out string kind) + { + if (name.StartsWith("L#")) { + kind = "local"; + return name.Substring(2); + } + + if (name.StartsWith("P#")) { + kind = "in-param"; + return name.Substring(2); + } + + if (name.StartsWith("OP#")) { + kind = "out-param"; + return name.Substring(3); + } + + if (name.StartsWith("SL#")) { + kind = "spec local"; + return name.Substring(3); + } + + if (name.StartsWith("SP#")) { + kind = "spec in-param"; + return name.Substring(3); + } + + if (name.StartsWith("local.")) { + kind = "param copied to local"; + return name.Substring(6); + } + + if (name.StartsWith("addr.")) { + kind = "stack-allocated struct"; + return name.Substring(5); + } + + if (name == "$result") { + kind = "function return value"; + return "\\result"; + } + + if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) { + kind = "call result"; + return name; + } + + if (name == "$s" && viewOpts.ViewLevel >= 1) { + kind = "current state"; + return "\\now"; + } + + kind = null; + return null; + } + + + private string LiteralName(Model.Element elt) + { + string r; + + if (literalName.TryGetValue(elt, out r)) + return r; + + r = TryTypeName(elt); + if (r != null) { + literalName[elt] = r; + return r; + } + + var i = elt as Model.Integer; + if (i != null) + return AsPow2(i); + + var bv = elt as Model.BitVector; + if (bv != null) + return bv.Numeral + "bv" + bv.Size.ToString(); + + return null; + } + + public Model.Element LocalType(string localName) + { + string dummy; + var v = GetUserVariableNameCore(localName, out dummy); + if (v == null) v = localName; + var c = model.TryGetFunc("#loc." + v); + if (c != null) { + var localIs = f_local_value_is.AppWithArg(2, c.GetConstant()); + if (localIs != null) + return localIs.Args[4]; + } + foreach (var s in model.States.Reverse()) { + var val = s.TryGet(localName); + var tp = GuessType(val); + if (tp != tp_mathint) + return tp; + } + return tp_mathint; + } + + public Model.Element Image(Model.Element elt, Model.Func f) + { + var r = f.AppWithResult(elt); + if (r != null) + return r.Args[0]; + return null; + } + + string TypeNameCore(Model.Element elt) + { + var deref = Image(elt, f_ptr_to); + if (deref != null) + return TypeName(deref) + "*"; + deref = Image(elt, f_spec_ptr_to); + if (deref != null) + return TypeName(deref) + "^"; + deref = Image(elt, f_blob_type); + if (deref != null) + return "_(blob " + CanonicalName(deref) + ")"; + var mapt = f_map_t.AppWithResult(elt); + if (mapt != null) + return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1])); + + var arr = f_array.AppWithResult(elt); + if (arr != null) { + return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString()); + } + + foreach (var app in elt.Names) + if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) { + var n = app.Func.Name.Substring(1); + switch (n) { + case "^i1": return "int8_t"; + case "^u1": return "uint8_t"; + case "^i2": return "int16_t"; + case "^u2": return "uint16_t"; + case "^i4": return "int32_t"; + case "^u4": return "uint32_t"; + case "^i8": return "int64_t"; + case "^u8": return "uint64_t"; + case "^bool": return "bool"; + default: + var pref = "_vcc_math_type_"; + if (n.StartsWith(pref)) n = n.Substring(pref.Length); + return n; + } + } + + return null; + } + + public string TypeName(Model.Element elt) + { + var r = TryTypeName(elt); + if (r == null) + return elt.ToString(); + else return r; + } + + public string TryTypeName(Model.Element elt) + { + string res; + if (!typeName.TryGetValue(elt, out res)) { + typeName[elt] = elt.ToString(); // avoid infinite recursion + res = TypeNameCore(elt); + typeName[elt] = res; + } + return res; + } + + public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" }; + + public string ConstantFieldName(Model.Element elt) + { + string res; + IsConstantField(elt, out res); + return res; + } + + public bool IsConstantField(Model.Element elt) + { + string dummy; + return IsConstantField(elt, out dummy); + } + + public bool IsConstantField(Model.Element elt, out string theName) + { + var bestScore = int.MinValue; + string bestName = null; + + foreach (var t in elt.Names) { + var score = int.MinValue; + string name = null; + if (t.Args.Length == 0) { + name = t.Func.Name; + score = 0; + var dotIdx = name.IndexOf('.'); + if (dotIdx > 0) { + score += 10; + name = name.Substring(dotIdx + 1); + } + if (name.Contains('#')) score -= 1; + } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) { + name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0])); + score = 6; + } else if (t.Func == f_array_emb) { + name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString()); + score = 5; + } + if (score > bestScore) { + bestScore = score; + bestName = name; + } + } + + theName = bestName; + return bestScore >= 5; + } + + bool IsSomeState(Model.Element elt) + { + var tp = GuessType(elt); + return tp == tp_state || tp == tp_heaptp; + } + + bool IsThisState(Model.Element st, Model.Element elt) + { + return elt == st || elt == f_heap.TryEval(st); + } + + Model.Element GuessType(Model.Element element) + { + Model.Element res; + if (!guessedType.TryGetValue(element, out res)) { + res = GuessTypeCore(element); + guessedType[element] = res; + } + return res; + } + + Model.Element GuessTypeCore(Model.Element element) + { + if (element is Model.Boolean) + return tp_bool; + + var fld = f_field.TryEval(element); + if (fld != null) { + var tp = f_field_type.TryEval(fld); + if (tp != null) { + var ptp = f_ptr_to.TryEval(tp); + if (ptp != null) + return ptp; + ptp = f_spec_ptr_to.TryEval(tp); + if (ptp != null) + return ptp; + } + return tp_object; + } + + foreach (var tpl in element.References) { + if (element == tpl.Result) { + if (tpl.Func == f_ptr) + return tp_object; + if (tpl.Func == f_heap) + return tp_heaptp; + } + + if (tpl.Args.Length >= 1 && tpl.Args[0] == element) { + if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state) + return tp_state; + } + + if (tpl.Func == f_select_bool) + if (tpl.Args[0] == element) + return tp_ptrset; + else if (tpl.Args[1] == element) + return tp_object; + + var fname = tpl.Func.Name; + + if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) { + var mt = model.TryGetFunc("MT#" + fname); + if (mt != null && mt.Arity == 0) + return mt.GetConstant(); + var t1 = GuessType(tpl.Args[1]); + var t2 = GuessType(tpl.Result); + var t = f_map_t.TryEval(t1, t2); + if (t != null) + return t; + } + + var tpName = DataTypeName(element, tpl); + if (tpName != null) { + var tp = model.TryGetFunc("^$#" + tpName); + if (tp != null) + return tp.GetConstant(); + } + } + + return tp_mathint; + } + + string DataTypeName(Model.Element elt, Model.FuncTuple tpl) + { + var fname = tpl.Func.Name; + if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) { + var fldName = tpl.Func.Name.Substring(3); + var idx = fldName.LastIndexOf('.'); + if (idx > 0) { + return fldName.Substring(0, idx).Replace("_vcc_math_type_", ""); + } + } + + if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) { + return fname.Substring(4).Replace("_vcc_math_type_", ""); + } + return null; + } + + public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl) + { + tpl = null; + + if (tp == tp_object) + return DataKind.Object; + else if (tp == tp_ptrset) + return DataKind.Ptrset; + + tpl = f_ptr_to.AppWithResult(tp); + if (tpl != null) return DataKind.PhysPtr; + tpl = f_spec_ptr_to.AppWithResult(tp); + if (tpl != null) return DataKind.SpecPtr; + tpl = f_map_t.AppWithResult(tp); + if (tpl != null) return DataKind.Map; + + return DataKind.Flat; + } + + public DataKind GetKind(Model.Element tp) + { + Model.FuncTuple dummy; + return GetKind(tp, out dummy); + } + + + public Model.Element WrapForUse(Model.Element elt, Model.Element tp) + { + Model.FuncTuple tpl; + var kind = GetKind(tp, out tpl); + + if (kind == DataKind.Flat) { + if (elt.Kind == Model.ElementKind.Integer) { + var tpname = TypeName(tp); + if(tpname.StartsWith("$")) tpname = tpname.Substring(1); + if (tpname.StartsWith("#")) { + foreach (var tupl in elt.References) { + if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) { + return tupl.Result; + } + } + } + } + return elt; + } + + if (kind == DataKind.Map) { + if (elt.Kind == Model.ElementKind.Integer) { + Model.Element theMap = null; + foreach (var conv in model.Functions) + // really, we should reconstruct the name of this function, but this is painful + if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) { + var app = conv.AppWithArg(0, elt); + if (app != null) { + theMap = app.Result; + break; + } + } + if (theMap == null) return elt; + return theMap; + } + return elt; + } else if (kind == DataKind.Ptrset) { + var tmp = f_int_to_ptrset.TryEval(elt); + if (tmp != null) + return tmp; + return elt; + } + + if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { + if (elt.Kind == Model.ElementKind.Integer) { + var tmp = f_int_to_ptr.TryEval(elt); + if (tmp != null) + elt = tmp; + } + } + + if (kind == DataKind.Object) + return elt; + + if (kind == DataKind.PhysPtr) + return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt); + + if (kind == DataKind.SpecPtr) + return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt); + + Util.Assert(false); + return elt; + } + + void AddSpecialField(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func select_map) + { + if (elt == null) return; + + var map = state.State.TryGet("$s"); + if (map != null) + map = select_map.TryEval(map); + if (map != null) { + var model = elt.Model; + Model.Element val = f_select_bool.TryEval(map, elt); + Model.Element tp = tp_bool; + if (val == null) { + val = f_select_ptr.TryEval(map, elt); + tp = tp_object; + } + if (val == null) { + val = f_select_int.TryEval(map, elt); + tp = tp_mathint; + } + if (val != null) { + res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); + } + } + } + + void AddPointerFunction(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func fn, Model.Element tp) + { + if (elt == null) return; + + var val = fn.TryEval(elt); + if (val != null) { + res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty }); + } + } + + void AddPtrType(StateNode state, Model.Element elt, List<ElementNode> res) + { + var f = f_field.TryEval(elt); + if (f == null) return; + + var tp = f_field_type.TryEval(f); + + var seq = ""; + + var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean; + var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean; + + if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) { + seq = " (volatile/sequential mismatch)"; + } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) { + seq = " (sequential)"; + } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) { + seq = " (volatile)"; + } + + if (tp != null || seq != "") { + res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty }); + } + } + + string SkolemName(Model.Func f, ref Model.Element tp) + { + if (f.Name.IndexOf('!') > 0) { + var tok = DecodeToken(f.Name, ref tp); + if (tok != null) { + var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$')); + if (baseName.StartsWith("Q#")) + baseName = baseName.Substring(2); + return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false)); + } + } + return null; + } + + string GlobalName(Model.Func f, ref Model.Element tp) + { + if (f.Name.StartsWith("G#")) { + var idx = f.Name.LastIndexOf("#dt"); + if (idx < 0) return null; + var name = f.Name.Substring(2, idx - 2); + tp = DecodeDT(f.Name.Substring(idx + 1)); + return string.Format("::{0}", name); + } + return null; + } + + + public IEnumerable<ElementNode> CommonNodes(StateNode state) + { + var skolems = new List<ElementNode>(); + + Model.Element tp = null; + + foreach (var f in model.Functions) { + if (f.Arity != 0) continue; + var s = SkolemName(f, ref tp); + if (s == null) + s = GlobalName(f, ref tp); + if (s != null) { + if (tp == null) + tp = GuessType(f.GetConstant()); + var val = WrapForUse(f.GetConstant(), tp); + skolems.Add(new VariableNode(state, s, val, tp)); + } + } + + return skolems; + } + + private Model.Element GuessPtrTo(Model.Element tp) + { + var p = f_ptr_to.TryEval(tp); + if (p != null) return p; + p = f_spec_ptr_to.TryEval(tp); + if (p != null) return p; + var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant(); + f_ptr_to.AddApp(nm, tp); + return f_ptr_to.TryEval(tp); + } + + private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to) + { + var p = f_ptr_to.TryEval(tp); + if (p != null) return p; + var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant(); + f_ptr_to.AddApp(nm, tp); + return f_ptr_to.TryEval(tp); + } + + private bool IsArrayField(Model.Element ptr) + { + return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null; + } + + public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt, Model.Element tp) + { + List<ElementNode> result = new List<ElementNode>(); + Model.FuncTuple tpl; + + if (elt == null) return result; + + var kind = GetKind(tp, out tpl); + if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) { + var heap = state.State.TryGet("$s"); + if (heap != null) + heap = f_heap.TryEval(heap); + var addresses = new HashSet<Model.Element>(); + + if (heap != null) { + var basePtr = f_base.TryEval(elt); + foreach (var fld in f_select_field.AppsWithArg(0, heap)) { + var val = f_select_value.TryEval(fld.Result, elt); + if (val != null) { + var field = fld.Args[1]; + if (!IsConstantField(field) && viewOpts.ViewLevel <= 2) + continue; + var addr = f_dot.TryEval(elt, field); + if (addr != null) addresses.Add(addr); + var node = ComputeUnionActiveOption(state, elt, val, field); + if (node != null) + result.Add(node); + else + BuildFieldNode(result, state, addr, field, val, addr); + } + } + //result.Sort(CompareFields); + } + + { + foreach (var app in f_idx.AppsWithArg(0, elt)) { + var addr = app.Result; + Model.Element val = null, atp = tp; + + addresses.Add(addr); + + foreach (var papp in f_dot.AppsWithResult(addr)) { + var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]); + if (tmp != null) { + val = tmp; + var tt = f_field_type.TryEval(papp.Args[1]); + if (tt != null) atp = tt; + } + } + + if (val != null) + val = WrapForUse(val, atp); + result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet }); + if (addr != null) + result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet }); + } + } + + foreach (var ptr in f_dot.AppsWithArg(0, elt)) { + if (addresses.Contains(ptr.Result)) continue; + var fld = ptr.Args[1]; + var idx = f_field_arr_index.TryEval(fld); + if (idx != null) { + var xtp = f_field_type.TryEval(fld); + result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet }); + } + if (!IsConstantField(ptr.Args[1])) continue; + BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result); + } + + AddSpecialField(state, elt, result, "\\closed", f_closed); + AddSpecialField(state, elt, result, "\\owner", f_owners); + AddSpecialField(state, elt, result, "\\root", f_roots); + AddSpecialField(state, elt, result, "\\timestamp", f_timestamps); + AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object); + AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint); + + if (viewOpts.ViewLevel >= 1) { + AddPtrType(state, elt, result); + AddCasts(state, elt, result); + var sets = new SetsNode(state, elt); + if (!sets.IsEmpty) + result.Add(sets); + } + + } else if (kind == DataKind.Map) { + var elTp = tpl.Args[1]; + foreach (var sel in model.Functions) + if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) { + foreach (var app in sel.AppsWithArg(0, elt)) { + var val = WrapForUse(app.Result, elTp); + var edgname = new EdgeName(this, "[%0]", app.Args[1]); + result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet }); + } + } + } else if (kind == DataKind.Ptrset) { + foreach (var sel in f_select_bool.AppsWithArg(0, elt)) { + var edgname = new EdgeName(this, "[%0]", sel.Args[1]); + result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet }); + } + } else if (kind == DataKind.Flat) { + foreach (var tupl in elt.References) { + if (tupl.Args.Length == 1 && tupl.Args[0] == elt) { + var fname = tupl.Func.Name; + var idx = fname.LastIndexOf('.'); + if (fname.StartsWith("RF#") && idx > 0) { + fname = fname.Substring(idx + 1); + } else if (fname.StartsWith("DP#p")) { + fname = fname.Substring(4); + idx = fname.IndexOf('#'); + if (idx > 0) + fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx); + } else { + fname = null; + } + + if (fname != null) + result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField }); + } + } + } + + if (!(elt is Model.Boolean)) { + var curState = state.State.TryGet("$s"); + + foreach (var tupl in elt.References) { + { + var seenSelf = false; + var seenState = false; + var seenThisState = false; + var args = tupl.Args; + for (int i = 0; i < args.Length; ++i) { + if (args[i] == elt) seenSelf = true; + if (IsThisState(curState, args[i])) seenThisState = true; + else if (IsSomeState(args[i])) seenState = true; + } + if (!seenSelf) continue; // not looking for aliases (maybe we should?) + if (seenState && !seenThisState) continue; + } + + var argsFmt = new StringBuilder(); + var name = tupl.Func.Name; + + var score = FunctionScore(name); + if (score >= viewOpts.ViewLevel) + continue; + + var retTp = GuessType(tupl.Result); + var retVal = tupl.Result; + + var cat = NodeCategory.MethodologyProperty; + if (name.StartsWith("F#")) { + name = name.Substring(2); + cat = NodeCategory.UserFunction; + } + + if (name.StartsWith("DF#")) { + name = name.Substring(3); + cat = NodeCategory.UserFunction; + } + + if (name.StartsWith("$eq.$")) + name = "EQ"; + + { + Model.Element sktp = null; + var sk = SkolemName(tupl.Func, ref sktp); + if (sk != null) { + name = sk; + if (sktp != null) + retVal = WrapForUse(tupl.Result, sktp); + cat = NodeCategory.Maplet; + } + } + + { + argsFmt.Append(name).Append("("); + var args = new List<Model.Element>(); + foreach (var a in tupl.Args) { + if (IsThisState(curState, a)) + argsFmt.Append("\\now, "); + else if (a == elt) + argsFmt.Append(selfMarker + ", "); + else { + argsFmt.AppendFormat("%{0}, ", args.Count); + args.Add(a); + } + } + argsFmt.Length -= 2; + argsFmt.Append(")"); + var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray()); + result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat }); + } + + } + } + + return result; + } + + private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field) + { + if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) { + var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val)); + if (activeOpt != null) { + var nm = ConstantFieldName(field); + var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty }; + return fieldNode; + } + } + return null; + } + + private void AddCasts(StateNode state, Model.Element elt, List<ElementNode> result) + { + foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) { + if (app.Result != elt) + result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to))); + } + foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) { + if (app.Result != elt) + result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to))); + } + var addr = f_addr.TryEval(elt); + if (addr != null) { + foreach (var app in f_blob_type.Apps) { + var blob = f_address_root.TryEval(addr, app.Result); + if (blob != null) { + result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result)); + } + } + } + } + + private void BuildFieldNode(List<ElementNode> result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr) + { + var ftp = f_field_type.TryEval(field); + if (val != null) + val = WrapForUse(val, ftp); + + if (IsArrayField(ptr)) { + val = addr; + addr = null; + ftp = GuessPtrTo(ftp); + } + + var nm = ConstantFieldName(field); + var edgname = nm == null ? field.ToString() : nm; + + var cat = NodeCategory.PhysField; + if (f_is_ghost_field.IsTrue(field)) + cat = NodeCategory.SpecField; + if (nm != null && nm.Contains("<")) + cat = NodeCategory.MethodologyProperty; + + var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat}; + result.Add(fieldNode); + + if (addr != null) { + result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat }); + } + } + + public override IEnumerable<IState> States + { + get + { + return states; + } + } + + private int DataTypeToString(StringBuilder sb, int level, Model.Element elt) + { + Model.FuncTuple ctor = null; + int len = 1; + string dataTypeType = null; + foreach (var app in elt.References) { + var n = app.Func.Name; + if (app.Result == elt && n.StartsWith("DF#")) { + ctor = app; + } + var tmp = DataTypeName(elt, app); + if (tmp != null) dataTypeType = tmp; + } + + if (dataTypeType != null) { + if (ctor != null) + sb.Append(ctor.Func.Name.Substring(3)); + else + sb.Append(DataTypeShortName(elt, dataTypeType)); + if (ctor != null && ctor.Args.Length > 0) { + if (level <= 0) sb.Append("(...)"); + else { + sb.Append("("); + for (int i = 0; i < ctor.Args.Length; ++i) { + if (i != 0) sb.Append(", "); + len += DataTypeToString(sb, level - 1, ctor.Args[i]); + } + sb.Append(")"); + } + } + } else { + sb.Append(CanonicalName(elt)); + } + return len; + } + + private string DataTypeShortName(Model.Element elt, string tp) + { + var baseName = tp; + + var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt); + if (hd != null) { + foreach (var nm in hd.References) { + if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#")) + baseName = nm.Func.Name.Substring(3); + } + } + + return baseName; + } + + private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff) + { + var vm = this; + + if (name.Contains("[") || name.Contains("'")) + name = ""; + + if (name != "") + return name; + + var isNull = false; + foreach (var tpl in elt.References) { + var fn = tpl.Func; + if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt) + return "map"; + if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt) + return "map"; + + if (fn.Arity >= 1 && tpl.Args[0] == elt) { + if (fn == f_select_bool) + return "ptrset"; + } + + if (tpl.Result == elt) + if (fn == f_int_to_version) + return "version"; + + if (fn == f_is_null && tpl.Result == model.True) + isNull = true; + + var dtpName = DataTypeName(elt, tpl); + if (dtpName != null) { + var sb = new StringBuilder(); + string prev = null; + datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen) + for (int lev = 0; lev < 10; lev++) { + sb.Length = 0; + var len = DataTypeToString(sb, lev, elt); + if (prev == null || len <= maxDatatypeNameLength) + prev = sb.ToString(); + } + + datatypeLongName[elt] = prev; + suff = NameSeqSuffix.WhenNonZero; + return prev; + } + } + + var fld = vm.f_field.TryEval(elt); + if (fld != null) { + var tp = vm.f_field_type.TryEval(fld); + if (tp != null) { + var n = vm.TryTypeName(tp); + if (n != null) { + if (isNull) + return "(" + n + "*)NULL"; + return n; + } + } + } + + return ""; + } + + protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff) + { + var lit = this.LiteralName(elt); + if (lit != null) { + suff = NameSeqSuffix.None; + return lit; + } + if (datatypeLongName.TryGetValue(elt, out lit)) { + suff = NameSeqSuffix.WhenNonZero; + return lit; + } + + var name = base.CanonicalBaseName(elt, out suff); + name = CanonicalBaseNameCore(name, elt, true, ref suff); + + return name; + } + + public override string PathName(IEnumerable<IDisplayNode> path) + { + var sb = new StringBuilder(); + foreach (var d in path) { + var name = d.Name; + if (name == "") continue; // can that happen? + if (name.Contains("(") && name.Contains(selfMarker)) { + var repl = name.Replace(selfMarker, sb.ToString()); + sb.Length = 0; + sb.Append(repl); + } else { + if (sb.Length > 0 && name[0] != '[') + sb.Append("->"); + sb.Append(d.Name); + } + } + + return sb.ToString(); + } + } + + class StateNode : NamedState + { + internal VccModel vm; + internal List<VariableNode> vars; + internal List<ElementNode> commons; + internal int index; + internal string capturedStateName; + + public StateNode(VccModel parent, Model.CapturedState s) + : base(s, parent) + { + this.capturedStateName = s.Name; + this.vm = parent; + } + + internal void SetupVars() + { + if (vars != null) return; + vars = new List<VariableNode>(); + + var names = Util.Empty<string>(); + + if (vm.states.Count > 0) { + var prev = vm.states.Last(); + names = prev.vars.Map(v => v.realName); + } + + names = names.Concat(state.Variables).Distinct(); + + var curVars = state.Variables.ToDictionary(x => x); + foreach (var v in names) { + var localName = vm.GetUserVariableName(v); + if (localName != null) { + var tp = vm.LocalType(v); + var val = state.TryGet(v); + val = vm.WrapForUse(val, tp); + var vn = new VariableNode(this, v, val, tp) { ShortName = localName }; + vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v); + if (curVars.ContainsKey(v)) + vm.RegisterLocalValue(vn.Name, val); + vars.Add(vn); + } + } + + vm.Flush(vars); + + commons = new List<ElementNode>(); + commons.AddRange(vm.CommonNodes(this)); + } + + public override IEnumerable<IDisplayNode> Nodes + { + get { + return vars.Concat(commons); + } + } + + public override string CapturedStateName + { + get + { + return this.capturedStateName; + } + } + } + + class ElementNode : DisplayNode + { + protected StateNode stateNode; + protected Model.Element tp; + protected VccModel vm { get { return stateNode.vm; } } + + public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp) + : base(st.vm, name, elt) + { + this.stateNode = st; + this.tp = tp; + } + + protected override void ComputeChildren() + { + children.AddRange(vm.GetExpansion(stateNode, element, tp)); + } + + public override string ToolTip + { + get + { + var sb = new StringBuilder(); + if (tp != null) + sb.AppendFormat("Type: {0}\n", vm.TypeName(tp)); + var i = element as Model.Integer; + if (i != null) { + var n = System.Numerics.BigInteger.Parse(i.Numeral); + sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n); + } else if (element != null) { + sb.AppendFormat("Value: {0}\n", element); + } + return sb.ToString(); + } + } + } + + class SetsNode : ElementNode + { + List<Model.Element> refs = new List<Model.Element>(); + + public SetsNode(StateNode par, Model.Element elt) + : base(par, new EdgeName("\\in ..."), null, null) + { + children = new List<IDisplayNode>(); + foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) { + children.Add( + new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty }); + refs.Add(app.Args[0]); + } + Category = NodeCategory.MethodologyProperty; + } + + public override IEnumerable<Model.Element> References + { + get + { + return refs; + } + } + + public bool IsEmpty { get { return children.Count == 0; } } + } + + + class FieldNode : ElementNode + { + public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) + : base(par, realName, elt, tp) + { + } + } + + class MapletNode : ElementNode + { + public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp) + : base(par, realName, elt, tp) + { + } + } + + class VariableNode : ElementNode + { + public bool updatedHere; + public string realName; + + public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp) + : base(par, new EdgeName(realName), elt, tp) + { + this.realName = realName; + } + + public override string ShortName + { + set { this.name = new EdgeName(value); } + get { return this.name.ToString(); } + } + } +} |