Showing preview only (316K chars total). Download the full file or copy to clipboard to get everything.
Repository: SirMangler/PrimeHack-Updater
Branch: master
Commit: 1beaf97e224d
Files: 20
Total size: 304.4 KB
Directory structure:
gitextract_nkdwtkcl/
├── .gitattributes
├── .gitignore
├── LICENSE
├── PrimeHack Updater/
│ ├── App.config
│ ├── ILMerge.props
│ ├── PrimeHack Updater.csproj
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ └── app.manifest
│ ├── Source/
│ │ ├── CfgManager.cs
│ │ ├── TimedWebClient.cs
│ │ ├── Updater.cs
│ │ ├── VersionCheck.cs
│ │ └── WinForms/
│ │ ├── UpdateUI.Designer.cs
│ │ ├── UpdateUI.cs
│ │ └── UpdateUI.resx
│ └── packages.config
├── PrimeHack Updater.sln
└── README.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
/PrimeHackSettings/Properties/Settings.settings
/PrimeHackSettings/Properties/Settings.Designer.cs
/PrimeHackSettings/Properties/Resources.resx
/PrimeHackSettings/Properties/Resources.Designer.cs
/PrimeHackSettings/Properties/AssemblyInfo.cs
/PrimeHackSettings/Program.cs
/PrimeHackSettings/PrimeHackSettings.csproj
*.ini
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: PrimeHack Updater/App.config
================================================
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
================================================
FILE: PrimeHack Updater/ILMerge.props
================================================
<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- -->
<!-- ILMerge project-specific settings. Almost never need to be set explicitly. -->
<!-- for details, see http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx -->
<!-- -->
<!-- *** set this file to Type=None, CopyToOutput=Never *** -->
<!-- If True, all copy local dependencies will also be merged from referenced projects whether they are referenced in the current project explicitly or not -->
<ILMergeTransitive>true</ILMergeTransitive>
<!-- Extra ILMerge library paths (semicolon-separated). Dont put your package dependencies here, they will be added automagically -->
<ILMergeLibraryPath></ILMergeLibraryPath>
<!-- The solution NuGet package directory if not standard 'SOLUTION\packages' -->
<ILMergePackagesPath></ILMergePackagesPath>
<!-- The merge order file name if differs from standard 'ILMergeOrder.txt' -->
<ILMergeOrderFile></ILMergeOrderFile>
<!-- The strong key file name if not specified in the project -->
<ILMergeKeyFile></ILMergeKeyFile>
<!-- The assembly version if differs for the version of the main assembly -->
<ILMergeAssemblyVersion></ILMergeAssemblyVersion>
<!-- added in Version 1.0.4 -->
<ILMergeFileAlignment></ILMergeFileAlignment>
<!-- added in Version 1.0.4, default=none -->
<ILMergeAllowDuplicateType></ILMergeAllowDuplicateType>
<!-- If the <see cref="CopyAttributes"/> is also set, any assembly-level attributes names that have the same type are copied over into the target assembly -->
<ILMergeAllowMultipleAssemblyLevelAttributes></ILMergeAllowMultipleAssemblyLevelAttributes>
<!-- See ILMerge documentation -->
<ILMergeAllowZeroPeKind></ILMergeAllowZeroPeKind>
<!-- The assembly level attributes of each input assembly are copied over into the target assembly -->
<ILMergeCopyAttributes></ILMergeCopyAttributes>
<!-- Creates a .pdb file for the output assembly and merges into it any .pdb files found for input assemblies, default=true -->
<ILMergeDebugInfo></ILMergeDebugInfo>
<!-- Target assembly will be delay signed -->
<ILMergeDelaySign></ILMergeDelaySign>
<!-- Types in assemblies other than the primary assembly have their visibility modified -->
<ILMergeInternalize></ILMergeInternalize>
<!-- The path name of the file that will be used to identify types that are not to have their visibility modified -->
<ILMergeInternalizeExcludeFile></ILMergeInternalizeExcludeFile>
<!-- XML documentation files are merged to produce an XML documentation file for the target assembly -->
<ILMergeXmlDocumentation></ILMergeXmlDocumentation>
<!-- External assembly references in the manifest of the target assembly will use full public keys (false) or public key tokens (true, default value) -->
<ILMergePublicKeyTokens></ILMergePublicKeyTokens>
<!-- Types with the same name are all merged into a single type in the target assembly -->
<ILMergeUnionMerge></ILMergeUnionMerge>
<!-- The version of the target framework, default 40 (works for 45 too) -->
<ILTargetPlatform></ILTargetPlatform>
</PropertyGroup>
</Project>
================================================
FILE: PrimeHack Updater/PrimeHack Updater.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props" Condition="Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props')" />
<Import Project="..\packages\ILMerge.3.0.29\build\ILMerge.props" Condition="Exists('..\packages\ILMerge.3.0.29\build\ILMerge.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BC203460-914A-46A0-90E3-97897438CE4E}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>PrimeHack_Updater</RootNamespace>
<AssemblyName>PrimeHack Updater</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<IsWebBootstrapper>false</IsWebBootstrapper>
<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>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup>
<StartupObject>PrimeHack_Updater.Updater</StartupObject>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>metroid_prime.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>PrimeHack.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>7687A0E9F25BEFCB5EE943B02778E8E3F6308A33</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>PrimeHack Updater_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<TargetZone>Internet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Source\CfgManager.cs" />
<Compile Include="Source\Updater.cs" />
<Compile Include="Source\VersionCheck.cs" />
<Compile Include="Source\WinForms\UpdateUI.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Source\WinForms\UpdateUI.Designer.cs">
<DependentUpon>UpdateUI.cs</DependentUpon>
</Compile>
<Compile Include="Source\TimedWebClient.cs">
<SubType>Component</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="ILMerge.props" />
<None Include="packages.config" />
<None Include="PrimeHack.pfx" />
<None Include="Properties\app.manifest">
<SubType>Designer</SubType>
</None>
<None Include="Resources\Deface_Regular_v1.ttf" />
</ItemGroup>
<ItemGroup>
<Content Include="metroid_prime.ico" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Source\WinForms\UpdateUI.resx">
<DependentUpon>UpdateUI.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\ILMerge.3.0.29\build\ILMerge.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.3.0.29\build\ILMerge.props'))" />
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props'))" />
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets'))" />
</Target>
<UsingTask TaskName="ILMerge.MSBuild.Tasks.ILMerge" AssemblyFile="$(SolutionDir)\packages\ILMerge.MSBuild.Tasks.1.0.0.3\tools\ILMerge.MSBuild.Tasks.dll" />
<Target Name="AfterBuild">
<ItemGroup>
<MergeAsm Include="$(OutputPath)$(TargetFileName)" />
<MergeAsm Include="$(OutputPath)Newtonsoft.Json.dll" />
</ItemGroup>
<PropertyGroup>
<MergedAssembly>$(ProjectDir)$(OutDir)PrimeHack Updater.exe</MergedAssembly>
</PropertyGroup>
<Message Text="ILMerge @(MergeAsm) -> $(MergedAssembly)" Importance="high" />
<ILMerge InputAssemblies="@(MergeAsm)" OutputFile="$(MergedAssembly)" TargetKind="SameAsPrimaryAssembly" />
</Target>
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>
================================================
FILE: PrimeHack Updater/Properties/AssemblyInfo.cs
================================================
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("PrimeHack Updater")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PrimeHack Updater")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[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("bc203460-914a-46a0-90e3-97897438ce4e")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.5.0")]
[assembly: AssemblyFileVersion("1.0.5.0")]
================================================
FILE: PrimeHack Updater/Properties/Resources.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace PrimeHack_Updater.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", "16.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("PrimeHack_Updater.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;
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Deface_Regular_v1 {
get {
object obj = ResourceManager.GetObject("Deface_Regular_v1", resourceCulture);
return ((byte[])(obj));
}
}
}
}
================================================
FILE: PrimeHack Updater/Properties/Resources.resx
================================================
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Deface_Regular_v1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Deface_Regular_v1.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
================================================
FILE: PrimeHack Updater/Properties/app.manifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="PrimeHackUpdater" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>
================================================
FILE: PrimeHack Updater/Source/CfgManager.cs
================================================
using System;
using System.IO;
namespace PrimeHack_Updater
{
class CfgManager
{
string version = "";
string isopath = "";
bool mainbranch = true;
bool immersive_mode = false;
public CfgManager()
{
loadCfg();
}
public void loadCfg()
{
if (File.Exists("./updater.cfg"))
{
foreach (string line in File.ReadAllLines("./updater.cfg"))
{
if (line.StartsWith("version="))
{
version = line.Replace("version=", "");
continue;
}
if (line.StartsWith("isopath="))
{
isopath = line.Replace("isopath=", "");
continue;
}
if (line.StartsWith("mainbranch="))
{
Boolean.TryParse(line.Replace("mainbranch=", ""), out mainbranch);
continue;
}
if (line.StartsWith("immersive_mode="))
{
Boolean.TryParse(line.Replace("immersive_mode=", ""), out immersive_mode);
continue;
}
}
} else
{
if (!Updater.WriteAccess(".\\"))
Updater.restartAsAdmin();
File.Create("./updater.cfg");
}
}
public string getISOPath()
{
if (!File.Exists("./updater.cfg"))
loadCfg();
return isopath;
}
public bool getImmersiveMode()
{
if (!File.Exists("./updater.cfg"))
loadCfg();
return immersive_mode;
}
public string getVersion()
{
if (!File.Exists("./updater.cfg"))
loadCfg();
return version;
}
public bool isMainBranch()
{
if (!File.Exists("./updater.cfg"))
loadCfg();
return mainbranch;
}
public void saveCfg()
{
if (!Updater.WriteAccess(".\\"))
Updater.restartAsAdmin();
if (!File.Exists("./updater.cfg"))
loadCfg();
string[] lines = new string[4];
lines[0] = "version="+version;
lines[1] = "isopath=" + isopath;
lines[2] = "mainbranch=" + mainbranch;
lines[3] = "immersive_mode=" + immersive_mode;
File.WriteAllLines("./updater.cfg", lines);
if (File.Exists("./version.txt"))
File.Delete("./version.txt");
}
public void setVersion(string ver)
{
version = ver + (isMainBranch() ? "" : "I");
saveCfg();
}
public void setISOPath(string path)
{
isopath = path;
saveCfg();
}
public void setImmersiveMode(bool mode)
{
immersive_mode = mode;
saveCfg();
}
public void setMainbranch(bool branch)
{
mainbranch = branch;
saveCfg();
}
public bool isVersionsEqual(string remote)
{
if (version.Equals(remote + (isMainBranch() ? "" : "I")))
{
return true;
}
return false;
}
}
}
================================================
FILE: PrimeHack Updater/Source/TimedWebClient.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace PrimeHack_Updater
{
class TimedWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest w = base.GetWebRequest(address);
w.Timeout = 3000;
return w;
}
}
}
================================================
FILE: PrimeHack Updater/Source/Updater.cs
================================================
using Newtonsoft.Json.Linq;
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Reflection;
using System.ComponentModel;
using PrimeHack_Updater.Source.WinForms;
namespace PrimeHack_Updater
{
class Updater
{
public static string sysversion = "1.7.0";
public static readonly CfgManager cfg = new CfgManager();
public static UpdateUI ui;
static string[] arguments = new string[0];
[STAThread]
static void Main(string[] args)
{
if (args.Length != 0)
arguments = args;
Application.SetCompatibleTextRenderingDefault(false);
string html = VersionCheck.getJSONInfo(@"https://api.github.com/repos/SirMangler/PrimeHack-Updater/releases/latest");
string remoteversion = VersionCheck.getVersion(html);
#if (!DEBUG)
if (!remoteversion.Equals(sysversion))
{
DialogResult dialogResult = MessageBox.Show("PrimeHack Updater has a new update. "
+ "It is recommended you update as this may contain crucial bug fixes or migration tools for new PrimeHack versions.\n"
+ "\nhttps://github.com/SirMangler/PrimeHack-Updater/releases"
+ "\n\nOpen this link now?", "PrimeHack Updater", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes)
{
Process.Start("https://github.com/SirMangler/PrimeHack-Updater/releases");
System.Environment.Exit(0);
}
}
#endif
string repo;
if (cfg.isMainBranch()) repo = @"https://api.github.com/repos/shiiion/dolphin/releases/latest";
else repo = @"https://api.github.com/repos/shiiion/Ishiiruka/releases/latest";
html = VersionCheck.getJSONInfo(repo);
remoteversion = VersionCheck.getVersion(html);
if (cfg.isVersionsEqual(remoteversion))
{
if (!IsPathValid(cfg.getISOPath()))
{
Application.Run(ui = new UpdateUI());
}
else runPrimeHack(cfg.getISOPath());
}
else
{
if (!WriteAccess(".\\"))
restartAsAdmin();
dynamic j = JObject.Parse(html);
JArray ja = j.assets;
dynamic assets = ja[0];
string url = assets.browser_download_url;
sysversion = remoteversion;
Application.Run(ui = new UpdateUI(url));
}
}
public static void Update(string url)
{
migrate(ui);
while (true)
{
Process[] runningProcesses = Process.GetProcessesByName("Dolphin");
if (runningProcesses.Length != 0)
{
MessageBox.Show("Dolphin is currently running. Please close Dolphin to continue updating.", "PrimeHack Updater", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
break;
}
}
DownloadLatest(url);
}
public static void DownloadLatest(string url)
{
ui.writeLine("New Update!\r\n\r\nDownloading: " + url);
Uri uri;
Uri.TryCreate(url, UriKind.Absolute, out uri);
using (var client = new TimedWebClient())
{
client.Proxy = null;
client.DownloadFileAsync(uri, Path.GetTempPath() + "\\PrimeHackRelease.zip");
client.DownloadProgressChanged += ui.UpdateProgress;
client.DownloadFileCompleted += InstallPrimeHack;
}
}
public static void InstallPrimeHack(object sender, AsyncCompletedEventArgs e)
{
ui.writeLine("Extracting PrimeHackRelease.zip");
ZipArchive archive = ZipFile.OpenRead(Path.GetTempPath() + "\\PrimeHackRelease.zip");
foreach (ZipArchiveEntry file in archive.Entries)
{
string completeFileName = Path.Combine(".\\", file.FullName);
string directory = Path.GetDirectoryName(completeFileName);
if (!Directory.Exists(directory))
Directory.CreateDirectory(directory);
if (File.Exists(completeFileName))
{
if (completeFileName.EndsWith("hack_config.ini"))
continue;
long ziptime = file.LastWriteTime.ToFileTime();
long oldtime = File.GetLastWriteTime(completeFileName).ToFileTime();
if (ziptime == oldtime)
continue;
}
if (file.Name != "")
{
file.ExtractToFile(completeFileName, true);
}
}
archive.Dispose();
ui.writeLine("Deleting PrimeHackRelease.zip");
File.Delete(Path.GetTempPath() + "\\PrimeHackRelease.zip");
cfg.setVersion(sysversion);
ui.writeLine("Successfully updated to version: " + sysversion);
ui.FinishedInstalling();
}
public static void restartAsAdmin()
{
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
if (!hasAdministrativeRight)
{
string fileName = Assembly.GetExecutingAssembly().Location;
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = fileName;
try
{
Process.Start(processInfo);
}
catch (Win32Exception e)
{
MessageBox.Show("Failed to restart with administrator.\nError: " + e.Message, "PrimeHack Updater", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
System.Environment.Exit(0);
}
}
static string DE = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Documents\Dolphin Emulator\");
public static void migrate(UpdateUI ui)
{
string primesettings = "";
bool beam = false;
if (File.Exists("hack_config.ini"))
{
ui.writeLine("Importing PrimeHack settings");
foreach (string line in File.ReadLines("hack_config.ini"))
{
if (line.StartsWith("[beam]"))
{
beam = true;
continue;
}
if (line.StartsWith("[visor]"))
{
beam = false;
continue;
}
if (line.StartsWith("sensitivity"))
{
primesettings += "PrimeHack/Camera Sensitivity = " + line.Replace("sensitivity = ", "") + "\n";
continue;
}
if (line.StartsWith("cursor_sensitivity"))
{
primesettings += "PrimeHack/Cursor Sensitivity = " + line.Replace("cursor_sensitivity = ", "") + "\n";
continue;
}
if (line.StartsWith("fov"))
{
primesettings += "PrimeHack/Field of View = " + line.Replace("fov = ", "") + "\n";
continue;
}
if (line.StartsWith("inverted_y"))
{
primesettings += "PrimeHack/Invert Y axis = " + line.Replace("inverted_y = ", "") + "\n";
continue;
}
string nline;
if (line.StartsWith("index_0"))
{
if (beam)
nline = "PrimeHack/Beam 1 = " + line.Replace("index_0 = ", "");
else
nline = "PrimeHack/Visor 1 = " + line.Replace("index_0 = ", "");
primesettings += Regex.Replace(nline, "\b&\b", " & ") + "\n";
continue;
}
if (line.StartsWith("index_1"))
{
if (beam)
nline = "PrimeHack/Beam 2 = " + line.Replace("index_1 = ", "");
else
nline = "PrimeHack/Visor 2 = " + line.Replace("index_1 = ", "");
primesettings += Regex.Replace(nline, "\b&\b", " & ") + "\n";
continue;
}
if (line.StartsWith("index_2"))
{
if (beam)
nline = "PrimeHack/Beam 3 = " + line.Replace("index_2 = ", "");
else
nline = "PrimeHack/Visor 3 = " + line.Replace("index_2 = ", "");
primesettings += Regex.Replace(nline, "\b&\b", " & ") + "\n";
continue;
}
if (line.StartsWith("index_3"))
{
if (beam)
nline = "PrimeHack/Beam 4 = " + line.Replace("index_3 = ", "");
else
nline = "PrimeHack/Visor 4 = " + line.Replace("index_3 = ", "");
primesettings += Regex.Replace(nline, "\b&\b", " & ") + "\n";
continue;
}
}
string config = DE + "\\Config\\WiimoteNew.ini";
if (!File.Exists(config))
{
FileStream f = File.Create(config);
f.Close();
primesettings = "[Wiimote1]\n" + primesettings;
File.WriteAllLines(config, primesettings.Split('\n'));
}
else
{
string[] oldwiimotenew = File.ReadAllLines(config);
List<string> newwiimote = new List<string>();
newwiimote.AddRange(oldwiimotenew);
newwiimote.Insert(2, primesettings.Substring(0, primesettings.Length - 1));
File.WriteAllLines(config, newwiimote.ToArray());
}
File.Delete(".\\hack_config.ini");
}
}
public static void runPrimeHack(string path)
{
if (!File.Exists(".\\Dolphin.exe")) {
MessageBox.Show("Unable to locate Dolphin.exe!\n\nRemove updater.cfg and try again.",
"PrimeHack Updater", MessageBoxButtons.OK, MessageBoxIcon.Error);
System.Environment.Exit(0);
}
Process p = new Process();
p.StartInfo.FileName = ".\\Dolphin.exe";
p.StartInfo.UseShellExecute = true;
if (path != null && !path.Equals("") && !path.Equals("NEVER"))
{
p.StartInfo.Arguments = "-e \"" + path + "\"";
if (cfg.getImmersiveMode())
p.StartInfo.Arguments += " -b";
}
else
{
p.StartInfo.Arguments = string.Join(" ", arguments);
}
if (!cfg.isMainBranch())
{
if (!WriteAccess(".\\"))
p.StartInfo.Verb = "runas";
}
p.Start();
System.Environment.Exit(0);
}
public static bool IsPathValid(string path)
{
if (path.Equals(""))
return false;
if (!File.Exists(path))
return false;
return true;
}
//Modified version of https://stackoverflow.com/a/3769421
public static bool WriteAccess(string folderName)
{
if ((File.GetAttributes(folderName) & FileAttributes.ReadOnly) != 0)
return false;
// Get the access rules of the specified files (user groups and user names that have access to the file)
var rules = Directory.GetAccessControl(folderName).GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
// Get the identity of the current user and the groups that the user is in.
var groups = WindowsIdentity.GetCurrent().Groups;
string sidCurrentUser = WindowsIdentity.GetCurrent().User.Value;
// Check if writing to the file is explicitly denied for this user or a group the user is in.
if (rules.OfType<FileSystemAccessRule>().Any(r => (groups.Contains(r.IdentityReference) || r.IdentityReference.Value == sidCurrentUser) && r.AccessControlType == AccessControlType.Deny && (r.FileSystemRights & FileSystemRights.WriteData) == FileSystemRights.WriteData))
return false;
// Check if writing is allowed
return rules.OfType<FileSystemAccessRule>().Any(r => (groups.Contains(r.IdentityReference) || r.IdentityReference.Value == sidCurrentUser) && r.AccessControlType == AccessControlType.Allow && (r.FileSystemRights & FileSystemRights.WriteData) == FileSystemRights.WriteData);
}
}
}
================================================
FILE: PrimeHack Updater/Source/VersionCheck.cs
================================================
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PrimeHack_Updater
{
class VersionCheck
{
public static string getVersion(string html)
{
if (html == null || html.Length == 0)
{
VersionCheckError();
return "-1";
}
dynamic j = JObject.Parse(html);
string version = (string) j.tag_name;
return version;
}
public static string getJSONInfo(string url)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
string html = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AutomaticDecompression = DecompressionMethods.GZip;
request.UserAgent = "PrimeHackUpdater";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
html = reader.ReadToEnd();
}
}
catch (Exception e)
{
Updater.ui.writeLine("Failed to retrieve version info: " + e.Message);
VersionCheckError();
}
return html;
}
public static void VersionCheckError()
{
DialogResult result = MessageBox.Show("Failed to download the metadata for the latest version. Try again?", "PrimeHack Updater", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
if (result == DialogResult.Yes)
{
Updater.restartAsAdmin();
}
else if (result == DialogResult.No)
{
Updater.runPrimeHack("");
}
else if (result == DialogResult.Cancel)
{
Environment.Exit(0);
}
}
}
}
================================================
FILE: PrimeHack Updater/Source/WinForms/UpdateUI.Designer.cs
================================================
namespace PrimeHack_Updater.Source.WinForms
{
partial class UpdateUI
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateUI));
this.UpdatePanel = new System.Windows.Forms.SplitContainer();
this.console = new System.Windows.Forms.TextBox();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.SelectionPanel = new System.Windows.Forms.Panel();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.portableMode = new System.Windows.Forms.CheckBox();
this.immersiveMode = new System.Windows.Forms.CheckBox();
this.label1 = new System.Windows.Forms.Label();
this.browse_button = new System.Windows.Forms.Button();
this.path_box = new System.Windows.Forms.TextBox();
this.Never = new System.Windows.Forms.Button();
this.Later = new System.Windows.Forms.Button();
this.Yes = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.UpdatePanel)).BeginInit();
this.UpdatePanel.Panel1.SuspendLayout();
this.UpdatePanel.Panel2.SuspendLayout();
this.UpdatePanel.SuspendLayout();
this.SelectionPanel.SuspendLayout();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// UpdatePanel
//
this.UpdatePanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.UpdatePanel.Location = new System.Drawing.Point(0, 0);
this.UpdatePanel.Name = "UpdatePanel";
this.UpdatePanel.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// UpdatePanel.Panel1
//
this.UpdatePanel.Panel1.Controls.Add(this.console);
//
// UpdatePanel.Panel2
//
this.UpdatePanel.Panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(39)))), ((int)(((byte)(39)))), ((int)(((byte)(39)))));
this.UpdatePanel.Panel2.Controls.Add(this.progressBar);
this.UpdatePanel.Size = new System.Drawing.Size(460, 150);
this.UpdatePanel.SplitterDistance = 104;
this.UpdatePanel.TabIndex = 0;
//
// console
//
this.console.BackColor = System.Drawing.Color.Black;
this.console.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.console.Dock = System.Windows.Forms.DockStyle.Fill;
this.console.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.console.Location = new System.Drawing.Point(0, 0);
this.console.Multiline = true;
this.console.Name = "console";
this.console.ReadOnly = true;
this.console.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.console.Size = new System.Drawing.Size(460, 104);
this.console.TabIndex = 0;
//
// progressBar
//
this.progressBar.BackColor = System.Drawing.Color.Black;
this.progressBar.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(102)))), ((int)(((byte)(0)))));
this.progressBar.Location = new System.Drawing.Point(12, 11);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(436, 19);
this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
this.progressBar.TabIndex = 0;
//
// SelectionPanel
//
this.SelectionPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(39)))), ((int)(((byte)(39)))), ((int)(((byte)(39)))));
this.SelectionPanel.Controls.Add(this.groupBox1);
this.SelectionPanel.Controls.Add(this.Never);
this.SelectionPanel.Controls.Add(this.Later);
this.SelectionPanel.Controls.Add(this.Yes);
this.SelectionPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.SelectionPanel.Location = new System.Drawing.Point(0, 0);
this.SelectionPanel.Name = "SelectionPanel";
this.SelectionPanel.Size = new System.Drawing.Size(460, 150);
this.SelectionPanel.TabIndex = 1;
//
// groupBox1
//
this.groupBox1.Controls.Add(this.portableMode);
this.groupBox1.Controls.Add(this.immersiveMode);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.browse_button);
this.groupBox1.Controls.Add(this.path_box);
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.groupBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.groupBox1.Location = new System.Drawing.Point(13, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(435, 105);
this.groupBox1.TabIndex = 9;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "QuickLaunch (Optional)";
//
// portableMode
//
this.portableMode.AutoSize = true;
this.portableMode.Location = new System.Drawing.Point(318, 80);
this.portableMode.Name = "portableMode";
this.portableMode.Size = new System.Drawing.Size(108, 17);
this.portableMode.TabIndex = 8;
this.portableMode.Text = "Portable Mode";
this.portableMode.UseVisualStyleBackColor = true;
this.portableMode.CheckedChanged += new System.EventHandler(this.PortableChecked);
//
// immersiveMode
//
this.immersiveMode.AutoSize = true;
this.immersiveMode.Location = new System.Drawing.Point(14, 80);
this.immersiveMode.Name = "immersiveMode";
this.immersiveMode.Size = new System.Drawing.Size(288, 17);
this.immersiveMode.TabIndex = 7;
this.immersiveMode.Text = "Run Game Immersively (Hide Dolphin Window)";
this.immersiveMode.UseVisualStyleBackColor = true;
this.immersiveMode.CheckedChanged += new System.EventHandler(this.ImmersiveChecked);
//
// label1
//
this.label1.AutoSize = true;
this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(102)))), ((int)(((byte)(0)))));
this.label1.Location = new System.Drawing.Point(12, 17);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(340, 26);
this.label1.TabIndex = 6;
this.label1.Text = "Do you want the PrimeHack Updater to automatically boot \r\ninto your game?";
//
// browse_button
//
this.browse_button.BackColor = System.Drawing.Color.DimGray;
this.browse_button.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.browse_button.Location = new System.Drawing.Point(334, 51);
this.browse_button.Name = "browse_button";
this.browse_button.Size = new System.Drawing.Size(87, 24);
this.browse_button.TabIndex = 4;
this.browse_button.Text = "Browse";
this.browse_button.UseVisualStyleBackColor = false;
this.browse_button.Click += new System.EventHandler(this.browse_button_Click);
//
// path_box
//
this.path_box.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(102)))), ((int)(((byte)(0)))));
this.path_box.Font = new System.Drawing.Font("SansSerif", 9.749999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
this.path_box.Location = new System.Drawing.Point(14, 51);
this.path_box.Name = "path_box";
this.path_box.ReadOnly = true;
this.path_box.Size = new System.Drawing.Size(314, 23);
this.path_box.TabIndex = 3;
//
// Never
//
this.Never.BackColor = System.Drawing.Color.DimGray;
this.Never.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.Never.Location = new System.Drawing.Point(169, 114);
this.Never.Name = "Never";
this.Never.Size = new System.Drawing.Size(121, 27);
this.Never.TabIndex = 8;
this.Never.Text = "Never";
this.Never.UseVisualStyleBackColor = false;
this.Never.Click += new System.EventHandler(this.Never_Click);
//
// Later
//
this.Later.BackColor = System.Drawing.Color.DimGray;
this.Later.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.Later.Location = new System.Drawing.Point(327, 114);
this.Later.Name = "Later";
this.Later.Size = new System.Drawing.Size(121, 27);
this.Later.TabIndex = 7;
this.Later.Text = "Ask Later";
this.Later.UseVisualStyleBackColor = false;
this.Later.Click += new System.EventHandler(this.Later_Click);
//
// Yes
//
this.Yes.BackColor = System.Drawing.Color.DimGray;
this.Yes.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(214)))), ((int)(((byte)(255)))));
this.Yes.Location = new System.Drawing.Point(13, 114);
this.Yes.Name = "Yes";
this.Yes.Size = new System.Drawing.Size(121, 27);
this.Yes.TabIndex = 6;
this.Yes.Text = "Yes";
this.Yes.UseVisualStyleBackColor = false;
this.Yes.Click += new System.EventHandler(this.Yes_Click);
//
// UpdateUI
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(460, 150);
this.Controls.Add(this.UpdatePanel);
this.Controls.Add(this.SelectionPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "UpdateUI";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.Text = "PrimeHack Updater";
this.UpdatePanel.Panel1.ResumeLayout(false);
this.UpdatePanel.Panel1.PerformLayout();
this.UpdatePanel.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.UpdatePanel)).EndInit();
this.UpdatePanel.ResumeLayout(false);
this.SelectionPanel.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer UpdatePanel;
private System.Windows.Forms.TextBox console;
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.Panel SelectionPanel;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button browse_button;
private System.Windows.Forms.TextBox path_box;
private System.Windows.Forms.Button Never;
private System.Windows.Forms.Button Later;
private System.Windows.Forms.Button Yes;
private System.Windows.Forms.CheckBox immersiveMode;
private System.Windows.Forms.CheckBox portableMode;
}
}
================================================
FILE: PrimeHack Updater/Source/WinForms/UpdateUI.cs
================================================
using System;
using System.Drawing.Text;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace PrimeHack_Updater.Source.WinForms
{
public partial class UpdateUI : Form
{
public UpdateUI()
{
LoadFont();
InitializeComponent();
Show();
ISOSelection();
}
public UpdateUI(string url)
{
LoadFont();
InitializeComponent();
Show();
new Thread(() => Updater.Update(url)).Start();
}
public void writeLine(string line)
{
BeginInvoke((Action)(() => console.AppendText(line+"\r\n")));
}
public void ISOSelection()
{
writeLine("ISO selector");
immersiveMode.Checked = Updater.cfg.getImmersiveMode();
portableMode.Checked = File.Exists("./portable.txt");
UpdatePanel.Hide();
SelectionPanel.Show();
FlashWindowEx(this);
}
private void Yes_Click(object sender, EventArgs e)
{
Updater.cfg.setISOPath(path_box.Text);
Updater.runPrimeHack(path_box.Text);
}
private void Never_Click(object sender, EventArgs e)
{
Updater.cfg.setISOPath("NEVER");
Updater.runPrimeHack("NEVER");
}
private void Later_Click(object sender, EventArgs e)
{
Updater.runPrimeHack("");
}
private void browse_button_Click(object sender, EventArgs e)
{
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Title = "Select your Metroid Prime: Trilogy or Metroid Prime GC dump";
filedialog.Filter = "All GC/Wii files|*.elf;*.dol;*.gcm;*.tgc;*.iso;*.wbfs;*.ciso;*.gcz;*.wad;*.dff;*.wia;*.rvz|ISO Files|*.iso|GCZ Files|*.gcz|WIA Files|*.wia|RVZ Files|*.rvz";
filedialog.FilterIndex = 1;
if (STAShowDialog(filedialog) == DialogResult.OK)
{
path_box.Text = filedialog.FileName;
}
}
private void ImmersiveChecked(object sender, EventArgs e)
{
Updater.cfg.setImmersiveMode(immersiveMode.Checked);
}
private void PortableChecked(object sender, EventArgs e)
{
if (portableMode.Checked && !File.Exists("./portable.txt"))
File.Create("./portable.txt").Close();
else if (!portableMode.Checked && File.Exists("./portable.txt"))
File.Delete("./portable.txt");
}
public void UpdateProgress(object sender, DownloadProgressChangedEventArgs e)
{
BeginInvoke((Action)(() =>
{
progressBar.Value = e.ProgressPercentage;
}));
}
public void FinishedInstalling()
{
if (!Updater.IsPathValid(Updater.cfg.getISOPath()))
BeginInvoke((Action)(() => ISOSelection()));
else Updater.runPrimeHack(Updater.cfg.getISOPath());
}
public static DialogResult STAShowDialog(FileDialog dialog)
{
DialogState state = new DialogState();
state.dialog = dialog;
System.Threading.Thread t = new System.Threading.Thread(state.ThreadProcShowDialog);
t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();
t.Join();
return state.result;
}
public class DialogState
{
public DialogResult result;
public FileDialog dialog;
public void ThreadProcShowDialog()
{
result = dialog.ShowDialog();
}
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
public const UInt32 FLASHW_ALL = 3;
public const UInt32 FLASHW_TIMERNOFG = 12;
[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public static bool FlashWindowEx(Form form)
{
IntPtr hWnd = form.Handle;
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
return FlashWindowEx(ref fInfo);
}
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont,
IntPtr pdv, [System.Runtime.InteropServices.In] ref uint pcFonts);
private PrivateFontCollection fonts = new PrivateFontCollection();
// Source: https://stackoverflow.com/questions/556147/how-to-quickly-and-easily-embed-fonts-in-winforms-app-in-c-sharp/23519499#23519499
public void LoadFont()
{
byte[] fontData = Properties.Resources.Deface_Regular_v1;
IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
uint dummy = 0;
fonts.AddMemoryFont(fontPtr, Properties.Resources.Deface_Regular_v1.Length);
AddFontMemResourceEx(fontPtr, (uint)Properties.Resources.Deface_Regular_v1.Length, IntPtr.Zero, ref dummy);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
}
}
}
================================================
FILE: PrimeHack Updater/Source/WinForms/UpdateUI.resx
================================================
<?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>
<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>
AAABAAYAAAAAAAEAIADxZAEAZgAAAICAAAABACAAeHMAAFdlAQBAQAAAAQAgAJ8mAADP2AEAMDAAAAEA
IADFGAAAbv8BACAgAAABACAAqBAAADMYAgAYGAAAAQAgAIgJAADbKAIAiVBORw0KGgoAAAANSUhEUgAA
AQAAAAEACAYAAABccqhmAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYA
AAAJcEhZcwAALiIAAC4iAari3ZIAAP+WSURBVHhe7F0FlN1GsvVuNuhs0MzMzHbMzMzMzMzMzPaMPeiZ
scfMzMzMzBxDwOG9v261+s2b5+cku5ldO/9EPnUktVot+Y3urVvVrVY0AP9VO3HixJ/Kjh8/Hu3kyZPR
rly5Eu3ixYvRjp84Hu3y5cvRzpw5E+38+fPRbt68Ge3U6VPRzp07F+3o0aPRzp49q8dOyTmsd/r0aS27
eOminn/n7l0978rVq2o8dvPWLS07L23cuHFD2jut1+P5LD8m98C2T7PdU6eiXbhwQct5HZ7PMl6f27zn
83Kc93zm7Jloly5finb6lLkHtnHp0qVoN+SeL0nbd+7c0bbYzpUrV83/7Yrcs+yz7MLFC/r/vyr3yeux
7rXr16Xds1LndLQj0h6ve1Kuae+PZfx/XhA7Kfd1Ua7H34ftsS1vz4RYUbHaYmvEXMuO69/ivWFn8c6I
C3hv+Dmk77UewzZcd46apWrIFUQbewPvj7yg6/+1pR+4E//6+WfnbiKWaP/mwlM87dDhw9GOHjsa7eq1
q9FevPgu0eIlS4rXqVsnnre6UWVeC6PSPAH2pttfBPBfJwCCf5qYa7nx/CfUXfUYRRc8eAlwfx9zDR+O
voiFp544tYEXP/0LGaeexz9GGzL4XxoJiveUb/YF524iLw6+f3NhVU/btXtXtHv37nG74eDBgw8nSZqk
YPwE8V+qF5XmtTAqzRNgb7r9RQD/VQIg+EPFXMue2997Bb43G7f1lnOWWQrNuahg9Fb3v23vjLqET8Zd
cu4k8uJg/FcXVvO0H374Id79Bw/21qlXl22UTpMmTbS8+fJ6rRtV5rUwKs0TYG+6/UUA/zUCIPg7i7mW
Ry9++d3gt7bt6tfO2WZ5b+xVr/X+F0byiT/hP1MCrGJN/vaxZR22c9cuJE2WjOdmy5Q5c7QcOXJEy5kr
Z6S6UW1eC6PSPAH2pttfBPBfJYBIS9tNX3oF1m/Zg28jYvDrEj54q/O/MoYhzZdHViZcDMxfvbDKrVu3
3v7++++Hy/b3EyZN5Dk/vf32O1mzZ88RLWOmjNGyZc/2FwH8r+0vAvivEcAsMddy5J5I/9DbiDby4r9t
07Zdc1oxS9bprych6G7upMTFwPzVy9Vr17pKtZ9+/PFHVKxUifVfJEuePE2WLFmipUufPlrGjH8RwGux
vwjgv0IAZcUeibmWzuvvINrg4/+xuS+zDz/1Csr/pQ3fGem/p4uBeuRF/h61nzx5+pDH9+zdiyRJk7Le
U1mnzpkrV7S0adNGS5/hLwJ4bfYXAfxXCKCqmGv56Zd/Ib/PKUTrs/c/srd77cLpi1ed1kyvgDdQ/i8t
zoSLzt1EXgzso/G5yX3//v3LTjHGjB3DY7SfMmTMmF6KomUW7582bbq/COB12v8HAggNDf0gJCQk1bx5
87IEBweXCwwKbBIQENDK38+/21y/uUPmzJkzcfbs2T4zZ84MmDFjBs1XbLLYsBnTp/ecNm16m2nTpjWZ
OnVqlSlTpuSYPHlymkmTJn38Bwigs5hr2XNNPHbXjX/Ivrl112nNLG+Nve4VmP9L87bcu38/qxDvnkeP
jEL4+puvUblKZQX/J5988lW27NlTSbH+TkoA6f4igNdqfzYCWLRo0QezZs5KPm7cuAKjR48uJ9ZQrMfY
sWNnjRkzJmjkyJGbhw8ffmLo0KFnBw8efG3gwIEPBgwc8HW//v1/6NOnzy+0Xr16/dizZ89vxB717NHz
Rvfu3S9069btlNhu2V4gNrdTp06D27Vr17Rt27Y1WrduXaxLly7phw4b9unvJIBIA36GrTuHaG2X/CGL
1X6B05pZygW/vt4Aawfu/uDcTcRy/8EDPH32TLdFRSFturQK/pixYv6YM2eOnFLswgoJII2EAH/lAF6j
vakEsHLlqk9nzZqVa8KEidXEG/eZOmVKiHjoo+Kdn06YMAECeAjwMWrkSAjgIeDEkCFDMGjQIAwYMAD9
+/dH37590bt3b/Ts1Qs9evSAABtdu3ZF585dIABHR7EOHTuiffv2ELBDwI62bdqiTZs2ENCjVatWaNmq
JVq2bIkWLVpw/4UcOyf7qxo3bjyuQYMGzWQpIsSRwI0AmP3/Usy1NJyzE9Ga+P9hW7B0pdMi4HPk9ecB
Wq247dxNxPLDD4YUZsyciXfefVfBnyxF8u8yZcqURYojYSVjpkzRUqVKbUhAlECWrFmiZc+RPVKdqDav
hVFp3kD2JtubQAChIaHvi4QvOXeuX3cfH5/pvr6+e0WyfysSHSLNIaDHxImTMH78eAf4ozDCAf4wAb54
egV+/wH90a9fP4iXh3h5iIdHj+49IABV4Hfp3BkdBfAdOnRQ0BPw7mBv0bIFmjdvDgG1WFM0bdoUTZo0
QZPGTdCoUSM0athQ1w0b0hq61lL2s9Q736hho/DGjRqPEgJqJkAIkOdBl5qT1yBa7cl/2AZPczX52rsD
aSmnvJwHYJa/pfyeBP5777+PRIkTo0DBgoXl0EtYKVS4cLSCBQtGK1iokGwXila4SJFoRYoWfaleVJrX
wqg0byB7k+33EID8v/7mYX93M1f57yWArVu2vBseHl4xMDBwuJ+f3yqJ1x/LGgJ8zPbxgQH+dEyZMhWT
Jk8CPb5IfojEF48v4B8xwnj9oUMV/PT4BH7fvn0U/AQ+vb0Cv4t4/E4C/E4G+PT0bdo6oG8pHl68uwW9
Bbx4dwfoDSFeXq1+vXqoJ1a3bl21OnXqoDatdu1IVqcOrQ7q1qv7IlrFwaC9VXmIrv+oNe83Vn7miMUb
KP/X5rlkzJxJwR8zdmzEix8f2XPkKC37L+GEVqZs2UhWukyZaKVKl/FaN6rMa2FUmjeQvcn2awQg/x8L
9n+IvS32rth7Yu87xm2W8RjrKCF4I4DFixfnFBsbFha2JTQ09PG8efMgBAB/P3/MnTsXPgJ+kfyYKdJx
qnj9KVOmQKS/G/hF7o8aqeAfNmy4yn2J7xX8ffsar9+nj8h9B/zq8bt0Vqnv7vFd0t7N23uCvn79+gp2
mgF6bdSqVQs1aTVrokaNGmrVq1dHtWrVXFa1WlVUrWrMlrFO9RrVEa1E5z9sFVv0kJ83YvEGyP+1eS7E
eqIkSdTzS4xfkeDnwkOeVqJkSa/mrW5UmdfCqDRvIHuTzRsByP+DwH9LjMAmyD8U+0Tsc7FYYhzKyXVM
sU/F/in2gRjJgETwN/mb/03i+FLLli3zF29/InxBOObPn4/QkBAEBwcb8PsL+OfMUc9P8M+YbiT/y+AX
zz/KeH5KfvdY30p+jfXdwN/ZAX9HBT+9vgG/jecJfnp8T28vntuAvrbx7gbwBvTVLdCrVEEVscqVK6tV
qlRJjQNcKlasqFbJWas55azL89lmtPxN/m0rUK2Z/LQRizdA/q/Nc0BQwsSJEDNWLOTMlauCgb5Z5NBL
5g38NG91o8q8FkaleQPZm2yWAOTe3b39O2IE9EdiMcT4imZSMXbhsA83g7NOI5ZMLL5YjBcvXnyyft26
MmvWrAleunTpeTGI14cQAOaHhUE8P+j5gyz4/eYa2T97tnr+6UIAU6dOlZh/ksT8EzFOYn6Cn8k+C/6h
QyXmF/DT+/fvbwigt+P5megj+Lt2MUk+I/kdzy+xvgG/h9dX4Dd0yXsDfsfTi1kvT69uQV+xYgTQK5Sv
gPLly6NcuXJqZcuW9bAyrm0e5zkkkNqiJkg8vO9o2ar8LstcLNLwAq+A/F/b8QeRewJixoqJFClSVHFw
71rk0EvmDfw0b3WjyrwWRqV5A9mbbCQAuW93j09pb4GfQCylWGaxvGJFxEqKlRErJcaMd15RD5UPHDgQ
tGXrlvvr16/HqlWrIJ4fS5YswcKFC7FgwQKI9Ffwq/cPCARj/jlzhAAk5rfS3937T/wN708CiEj4eUh/
J8tvs/tM9Knsb2Hi/aZNDQG4S/4Izy/gtxLfA/jq5QXABHx5B+wSu6JMmTIoXbq0WqlSpdRKliz5krGc
dStUqKCkQtLhffH/9vz5c/kp5QFKW+yVliJX5NcLvAHyf20br33n3I1ZsmbLVs3BfKRFDr1k3sBP81Y3
qsxrYVSaN5C9ySb37A5+ev2PxSjvk4jRy+cRI+iriTUUayXW9vvvv+9969atYInxrxw+fBh79+7F9u3b
sXHjJogCUAKg9ycBEPzq/YMl7g8KREBAgBIAvb+PEADB78r4kwA04x/R1TdypI39IzL+Rv73Ve9vM/42
29/ZZvvbm6Sfkf6tVPrbZJ+V/tb716lT1yX5a4rkp+e34K+kXl+8vQCX4FfgE/RiBvAG4CVKlECJ4sVR
vFgxFBMrWrSoa223Wad06TIaIjCvQELqIoqFRPfll5F6D/H3pDnw9yTZ8bfE2fD3RFmRIG1254hZvAHy
f23hZyO/rejg/aWFhzzNG/hp3upGlXktjErzBrI32eSeSQCU/YzfGcszrk8sRvDnEysn1kCso9gAAf7a
H3744Sm7e/jAXrx4EadOncKRI4YEtm3bhg1uKoAEwNg/xDP2n+sm/2dR/k935P/kSPG/9vU7CoBZ/yFD
hmKgJYD+zPz3dQigl1s/v8T/DgHYrj7t5mPs3ywi9jdxvyWAOgJIEkAt9f5VxUNXqVLV5fkt+Cnjy4is
t97eAr+4AJ8ApxUpUkStcOHCaoUKFTLm7LMOzye5MO/AUIXExt/m22+/lZ/55eX2jevPf/j++1+cXV3e
hNGAHI/guTiYj7Sw2NO8gZ/mrW5UmdfCqDRvIHuTTe6Zcb/1/kzoMZ5PLZZbjFKf4O8mwN/5008/RdZ7
snz99de4evUqzp47h6NHj2LPnj3YumUL1q1bhxUrVkgYsFhDACoASwBGAczFHN85TvzPBOB0txBgMiZI
/G9DAPb7UwW4d/2ZHIDbYB8nBKAKoEd1z/6TANq0MQlAV/LPLQTQ+F/lfwQBmGQfCUAUgBsBuLy/ANgT
/EUJ/MIG+AR8wUIFUaBAAbX8+fOrFSxYUI/znLLlyuq1Wgox9endR4mPv5v8zs6vG3n517/+5WyZ5e1x
r2dyEHebtC+yauHiYD7SwmJP8wZ+mre6UWVeC6PSvIHsTTW5Xyv/3b0/pT9jfsb7NV68eHH4Z1lk+5XL
d999BwkHcP7CBRw/dkyVwNatW7Fm7VosX74cixYtcqmAoKAgVwgwxwkBPHMAZuDPRB34M27sy3kAEwYM
dhGAJQE72s+TBCLlAdxIgHkAm/23SUAbBmjyrypVgMT/lSpHEICA1hKAPKwi+UkAAv5iRVG4SITHL+gG
+i+++AL58tHyqbGMdUgCDC0ayD1wvAJDntDQEBw/fvwlsHPxLHvvDSCAMbt/31uBLPY0T+Bb81Y3qsxr
YVSaN6C9qSb3a+U/u/oY+8cRY9KvmID6uLeH8FXLjz/8gDt37uACSUAeYBsOrBMSoBJYtHCR5gKoAiwB
MAyYM2cOfEQFaDegkwdwJQInTjCj/8ZE5AKsCvDWFdirt8kFdHdG/2kooMlAQwJtnQFADAVaNG/hkQsw
JKChgNMLoHkAUQI2868kUK68FwVg4nyV/YUMAVivT/B/8YUAP29e5MmbB3ny5EFe2c4nZYVEDTCM4LVI
UPw/MTwieX711VfOLxuxvIkEMOJ3vhbMYk/zBn6at7pRZV4Lo9K8Ae1NNblfTwKIK5586vPnz7+m06dx
bDclKbd/ixBY5/79+5oXOOYogS0SDqwVErD5AEsC7oOAInIBnqHAJEwQEmAo4Br7b5XAcHYJDjUk4BYO
mF4BM/a/azcOBhIl0NmM+TckYHICqgTcugQbNopQAnUcJaChQHXTE2BIwHT7aXdfmbKRSEBjfyEBqwDc
CYBen6DPkyc3cue2ZoiA9aksGjdupPdOJbRx40ZXr4D78iYSwNDt+qp/pMXBfKSFxZ7mDfw0b3WjyrwW
RqV5A9qbanK/rgTgmTNnGp88efL02bNncPbsWcg+zp8/j8uXLuP69eu4ffs2Hjx4IDH/Vwr0Vy2//PIL
+CropUuXINfAvn371KOtW7tOSGA5FoYbEpinSoDdgR4k4NYjwKHAGg5MmuiRFHQfF2ByAoMGmVGBqgYk
HLA9A92dngEqgY4dTdegkkDriMSge7cg5bghAbeBQNVruEjA5gM0GUglUMohAQkFXCpAQM1Y3xJA3rz5
1PPnFgLIlSsXcubMqcZtHi9ZspSqDt4j/59UTJ49Alz+UgB/3LwWRqV5guxNNrnfv508dTKfAP/Q8RPH
FbCyLXZCM/tnzpzGuXPn1KNfuXIFN27cUJn/9OnTVyaquPBBZZ3Lly9rewcOHNAuQpsYZPcgE4Mv5QTc
RgWSCNx7BkxOwAkJRA0wL2BDAvfuQffxAS+NDnTrHjQk4LwExO7B5m5jA9wGBpEEajEcYM8AuwXdewWc
cMD0BkQkA0kCmgdwIwESAM0SQI4cOdRYRsIguTA8IbExX0Il5bn8RQB/3LwWRpUdPnzYK9DeRBNgxjp9
+nSIbCvwaYzdadwmcEkChgioBs6JV7+Ia9euacKPXp7hwa8t7CG4cuUq5Do4ePAgduzYgQ0bNggJrAQH
CXGE4Mu9AyY3YJODLjXgIgL3twLdQgIhARICVcKUKZOVQHx8fDWm5gAkMxDJEA6vRaIhwbAtkgjDBw4b
ZjehzQnUr+cMEHIpATMqkGC1icFyQgLsGbBdgiQBqwQKFowIBfKpEjBhAEmA4M+ePbuSAYmiQoWKSkIk
Md4jydZz+YsA/rh5LYwq+7MQwOkzp7sJKL8muAl0KYtEAIzfjx2L2LakwPrnzgoRXLykRHDv3r1X9lvb
5cWLF1r37Jmz4IChXbt2YfPmzVizxukhWLwI8xfMdxEBH36Clt2EVg3QCFaGCKzHgUbML5wSYiHB3L59
R8KTh3j27Jlej8TEcQoMVRiS/PyvX2T9L/xLjMvPP/8ix3/SOqz73Xffy//jhZ7P/9O1a9dF+ZyX+z2C
jRs2KoGMHTteJTpfDKomSoDDeTlAyCgBMyowEgm4KQFDAhG5ABsKkARIADzOkIIJSaoXjpBk+OW5/EUA
f9y8FkaVvekEIHI+nzxYRyjr6dUJ6NNKAg4RHD+BYy4COKb9+keOHFHjNkmBdejR+YAyLGBugBlrAu1V
C0Gm3YRyjk0OmgFDG7BypVEDC/m+gNNVyDXfI9i0eZMSz42bN/Hw4SN888230taPv3qt/8ZC3H0nxEJF
Q7I5I2TGkIajGgcM6K/dimaMQETvgCEBowQsCUTKB+Q2JMA1FQJDCYYeDF1IdPx/ewLec//tcde9gvJ/
aX+EAEqWKuXVvNWNKvNaGFX2JhPApUuXZrOLjiAkAZwVI5BpVgmopxc7epTgN8CnHTp0SI0e3JKBqgFp
g3E+wf3k6ZNfTQ4yZ3D37l1NDvJchgQ7d+5UNbBp4yZVBvTozDFQVdieh1ct9OgPHj6U9i7jqJDK9u07
hEiWwddnjnjrcSLp+6NDx05oKpK+nkj5WrU40q8OqleviZqybtCgEZo1a4F27TqgV+++GDlqDGbN9kH4
wkVyT1vk/g7L/++CAv7Fi5fGP+ny008/C/l9jadPn+tgqLVr12lugj0MVATu4YDNCSgJuPUKkAxYTgXA
sIPJS46M5O/j+f///6YAipco4dW81Y0q81oYVfYmEsDVq1dKX7x48SwTeSQAa0oCTrbfqgFLAlb6KwEI
6A8dPqQP5MFDB11kcEQIQtrXc9k2Y1bmBSirX7XQcz9+/FjBQuKgenj8+Et8//33Ksn/JVLd23LhwkWs
E7UQGBiEUaPHKKiLFC2GDBkyIUmSZIgdOy4+/vhTvPfeB3jrrbfxt7+9JfYP3f7HP97FO++8j/ffj67H
P/jgQ9n+EO+++76UvyfH39G6f//7P3SbddgW20yaNBnSp8+IwoWLokmTZhg6dDjmzvXH8hUrVTUxbPBc
vvnmG50T7+rV61i6bDlGy/0yuWhJgGZzAjYkYBkTiiQAJi2nz5iO3bt3v/RbehLAO39yBcDZf7yZt7pR
ZV4Lo8reNAK4fOXKuCtXLqvXvXRZTNZKAKICXErAIQGrBOQ8FwFoGHDkqHp+Bf5BA36XGhAlcFLqsw22
TRJ4KF6ZgPa28AGmZzcx+k/qQT0XEgJfKPL3D0Bv8cwlSpRCggSJ8N77H8hf7y2xvylQP/zwY8SIEQtx
48ZD/PiJkDRJcqRIkRpp0qQT0GZApkyZkTlzVmTLml1i7ZzIli2HWHZklf2sWbMiS5asUieLWsaMmZEu
XQakTp0WyZOnFOAnR+LEyRAvXkLEjBkb//znx0ImJIq/y/ofShKJEiVRYujcuatIdh+sWr0G8ns7/wuz
UKU8efIMX375BDt27tIhzsz00+Pb5CCNKoFjDDgqkQTAxCdDJPckK9XAXwTwx81rYVTZm0IA4l0ziJc9
Rk/LOJ1Gj0tTMnDUAEngvJCAzQm4hwMnT7ipAQ0JDBFYoyrg+hhJQOobErisJMAuLMp4PrA0TcTJA0zw
ez7ETMBt2LAJnOWHsjxTpqwKMAI9WrS/C9A/UrClSJEKKVOmUZDmyJFLwFcEZfhWXaXK4Ew81avX0Ew9
PzRZv2ED1KPVr4s6YrXq1Ub1OjVRtU51VK5dFZVrVUGF6pVRoWpFlK9UEeUqSvxevixKli6F4iWKq0fm
SL28efJqjJ49ew4llDRp0so9pNZ74T198slnqhx4n1QWqVKnkXuoLeFHPyxavERClMjgIBk8evQlDhw4
pFOfNWrcWMmAoUJFuQ8qBYYATHhu3rRJh1jztyOhUjn9RQB/3LwWRpW9CQQgAOxw/fr1f3HwDo0ZeEsE
V68Y6U2gkghsWKBqwFEElghOn3aIQKSutGvUgID9yOGI3ADDA655THMCZyNyAhzJRg/mbbzAo0eP1cNz
so7cufOpPOczQs9Oj0tPTqDTOxcvXkJfymGffNNmTdG2Y3t06NIRrTu3R6NOLVGrU2NU6dIQpbvURqFu
1ZCrZyVk7F0OqfuUQtL+JZBoQDHEH1AEcQYWRuyBhRBrQEHE6m8sTt+CiN+rEBJ0L4QknQsjeftCSNOq
MDI2KYJs9YoiV/WiyFO5KPKVK4ICJQqjQNGCyJ0vL7LnzCEKIouEIBmRNm06pEqVRpVD3Ljx8d67JK9o
GmJkz54TLVq0xNSp0+X3jTyB5jcSPjwStbNl61Y5Pk3/fyQAjl2gAuDoSY6loKLioCD+nv/fCKBQkSJe
zVvdqDKvhVFlr5MAXrx48bebN28tuXnzhnrhmzdv4voNQwLXrxkiuHbVIQMnBreK4OJFkxdQRXDeKAJ6
dM7r7lIETn7AEoHLHAJg7wBJhg/t99//8FICiw9ycPA8TbwxruYzQfv885jqVQn4XLnyoEF9kwgbPmI4
psyYhvFTJ2DQuOFoOaY7aoxqi1LDGyHH8OpINqos4owpgVijiiHmyGKIMbKoWBHEGOHYcFphxBhm7POh
tEL4fDCtoLGBtAL4fEABfNY/Pz7r51jfL/BZH7He+fBZr3z4tGdefN4tL+K3zYfkjfIhTa18SF8lH7KW
zIdcBfIgex4hBAkrMmbMqCqB/xf+n2LFiiMhgwlbUqRMpcnISZOmyG952vlVgB8kFHrwwIyc5BBgdnly
3APHTBD4T+T3fPzlYzx7Qwngj7wMVKZMGa/mrW5UmdfCqLLXRQAC8vS3b9++yKTarVu0W7gpduvWTSUC
EsKNG0IIjiogCVylIiARXBEi0DxBhCpwzw/YngIaSUCuFxEaCPBpJBJ6KE9vzxh49Zq1KotTpUotv/7f
FfSxY8dTkKRNm16Ta+z6Y9Lr+MkT2H/4IFbv2AifdaEYvGQKmoYNQLGg1sg9pxEyzqyFFFMrI/Gk8og/
oTTijiuFOGNLIubo4oglFnN0UWOjxIQQjBVBTE9CEDKIIWQQY4iYEEKMQQURg2QgRBCJDCwRCAkoEfTI
a6x7HnzaTaxLbsRqkwuJ6+dGiqq5kK50LmT9Iiey5MyKDJkyCtGlR9p0YqISEiZMhHfefU9ChreQOHFS
VKpcBXPn+uHevQf6WxHcVASX5W/Cv+GXT56oPX32VEjiR1EML4+3+LMTAD8H7s281Y0q81oYVfY6CODu
nbsN7ty58y92n7Gb7c7tO9p1xf3b8iDdFiIwxCCE4CKDG67wwCgDEyIQyBcvMlHI0MAQAc0mCk14YBTB
KTGqDfaNewL/9Okz4Ou6jNXfESlMDxgjRmyVykyccTgu3w+gKrDLjz//hCuPbmH9hT0IObkWkw+EofeW
aWi2ahgqh3dDkaBWyDmnATLMqoEU04QEppRDgolllAjijBclMLYEYo4VEhgrimC0u7mRgRBBTCUCMRcR
iLkTgZhVBZ8LEXwuRPC5EMHnqggMGRgSECMJdDVE8EmnXPikY0583iYn4jbIiSRVsiNNkWzImDsL0mXO
gHTp0ikRpBNCSJIkKd7/IDrefe99ZM6cBe07dMSWLVv1b0TQM96nkmL8z16F/QcOIDg05P+dAogTN45X
81Y3qsxrYVTZ/5oABNgjCHoaR7DZ9b2795QA7LE7QgAkAUsEVAVWGRgiiEgWGiJgj4ElAwkNaOciiIDK
gf3fnsBn/3mduvXw8Sef8iHQ7Dlj48yZs6FRo8Y6wIdS9lXLT7/8jMtPb2PtpT0IOrkGEw+EoueWqWi8
cjAqhHdF/sDmyDanHtLMrIZkUysi4eRyiC8kEE9IIPb4kog9TohgnKgBmpKB2BghAZolhF8jA2+KoL+Y
koAbEVAR9BRzJwIhgU87O0TQISc+aZ8Dn7TLgViNsiNBtWxIWTQr0ubOjAxZMqkyyJAhgxJCnjx59U1J
jqN4Qq8vsp+vVrNL9cChg1i5ejUmTZ2KiVMm/78jgMRJEns1b3WjyrwWRpX9LwlAgL7cApxZdwKfa3dT
MlAz9ZQM7jhEIBYRHkRWBRoi2PDAlSw8j7vOIB33hYk+vtFXrFgJTeIxK85uO0r88uUroF/fvkIMm3Dw
+CEcPXcCp25dwO3nD3R47quWm8/vY9WlXfA/sRJj9wWj06aJqLu8H0rNb4/cAY2Rwbc2UsysisTTKyCB
KIH4k8sizqRSiD2hJGJNKCFkIERAcyMDtTGGEDRv4B4muJOBVQUkApo3IhAS+NxRAyQBNSGBz9zVgJKA
mJDAJ22yq33eLDsS1ciO1IWz4otShRASFirx/ZcKenr9F999p8OR+duvXrtGgD8FAUFBWLRkCeYvDP+L
AKLAvBZGlf0vCECAHffBgwfHXYB/8EBf0/VmL5HBfUMId+4yTCAR2LUTIlAdeBDB5ctXVE1QirLv3i7s
mmL/N2U+/77sumPii/3pfI9+5IiRCF+yEMGrwzFn8wLM3BsO3+PLsfj8Vuy4eVQ9/fc/v3rQ0N2vH2HV
5V2YfXQphuyei9brRqPqkh4oFNIK2f0bIJ1PDSSfURmJphkSiDtZQgEhgTgThQgmihoQMojtkIGaqIPY
lgyECNREEZAMYgkJxBphLOYwIQParxGBJQFaLyECRw18JmpAiYBqQEMChwiEBD5tSyLIgcSdCmL6qkCJ
9x+rx6ent2HUdfntN2/dAr/AACWHZZxSTdTBOs6xuCbS90Z1+YsA/n3zWhhV9t8mAPESmSVufkRAM36m
8QGiRd5+gIePzD7LOWTWEoIlgvuyjlAFTs7ATRWQBFjGh5Pj792XyZOn6uAZ/l3ZT8/BNxxkw/fqJ0+a
hGmBszF83mR0mD8cNZb0RsPVg9Bx80QM2+sPn+PLsOSCIYHzX17HNz++PJrOLre+eoDwc5sw8eB89Ng2
FQ1WDUbp8E7IG9QUGebWRkqfakgys6IhgalCAlNKq8WeLCRARaAmROBJCN7IgERAs0QgasASQcwhYkIC
MQcJEQyQ8IAk4E4ELjUg5k4CEhKQCD4VJfCpgL9bwAhcv31T4vtn6vkZDhH4/DsR5FNnTMfsOb4ImhcM
Xz8/zPSZreYXQEIIc36ViOUvAvj3zWthVNl/kwDE0+cXMP/oCXxKR7umfUlzZKUt13OEEFQZCDl4KgSS
giUCmyOgFFWP76Y6w8Lma1cd/56M7+nt2dfdqlVrzJwxA2P8BPR+g1DGry0y+9dD7nlNUXh+G1RY0g0N
1ggJbJmIoXv94HtiOZZd2oHdt0/gzOOrePKd97wAFcKu28e1/jA5r/WG0aiytCcKhrVCloD6SDNHVIBP
FSQSEkg4vTziTSuDuFPLII6QQBwqAiECmhKBuzJgvsASgZAAzSgCNyJwVIG7InARgagBSwQxNDfgEIG7
Gugm1kVCAlEBjWb2wO17d7SnhH8XvjxFOf/s+TNs37kDgcHBmDl7tsp9/8BAVQBzA/wxQ8A/beZM+LM8
KND5VSKWvwjg3zevhVFl/y0CECBXEfuXAlzBbdcmceQyJ5FkzRKBixzkPK5JDI8eO+rATRmQBHgeX6l1
H4e+e/ceVKxQSYHP8fPsx8+ZM7d+XJMf9hjiOw7Nffsi36xGSDy7EpLPqYY0frWQKag+coU0QZHwtqiw
tDvqCwl02DoRw/cHwO/USqy5sgcH751REvjaixL4RUByTlRC6LkNmHQ4DN22TUGdVQNQIrwDcgQ3Rvq5
dZBCVEDiWZWRcGYFxJtRFnGnlUUcIYI4JIKpQgI0N0J4mQwsERgyiEQEIx1FMNwhApIAzVEDSgQkgX6G
CGKIEiAJfE4SEAKoPKUtjl045fpb0ONzfATfFdi9dy9CF8zHLF8f9fqBjtcn+Of4C0nydWjZJznwWEBw
kPOrRCxvwstAfxGAm/03CEBAWtOC1gKbXUTWntGe0Z6peR57+uSpEoOueT5J4YlDCtKmJQGCn2XuA3j4
jn3jxk10VJsOZkmRGlmyZNMJNf3mzsVIv0lo5tsHmWfXRryZ5RF/dgUknF0RiX2rIPlcIYEAIYHg+sgd
2hRFF7VHhWXd0XDdEHTdMRljD4Yg5Ox6bL5xCCceXcaDb584V428MAxYdWU3fE8uR//dPmiybjjKLe2K
vGHNkSmwPlL71UQy36pINKsSEggJxJ1RTpSAhANCBHEdRRB3ijUJEZQIxFz5AocMPFTBrxKBKgHvaoAk
kGd0bew8ecAQsPP3Ys6E+wcPHcL88AWYPmumgD0QCzhPouwT+PTyJAVKfqqBMNlmXR5fsDDc+UUilr8I
4N83r4VRZVFNAALMZgQ+HxyOCHOB3wG7tefPnhsTD+OyryK2v3r+lcrNZxJ76vnSjlUGbJ9teGaYOTyV
A1b4t+O497RpM4Af0eAMvpMDZ6CJXx9kn10XsWeWVYs7uxzi+wgB+EpM7lMJSeZURQr/6kgbVBuZQxog
9/xmKLa4A6qs7I1mG0ei7x6Rt8cWaShwQFTAjef3X7oHLl9KeLD91jEEn12LkQeD0HbLOFRZ0QuFwtsg
W3AjpPOvjRRyrSSzK6v6SDBLQoEZ5ZUI4lIRTDeqQMkgEiE4ZDBJTEggzgRaScQRIogjJBCHisDmBzyI
wKgBhwioBGgDCiDHmJpYuHuNi4CZ6ON4fv4Nzp47i6XLl2tmPzhkHsIXLcLCxYsV4CQB7i9ZtlTXBDu3
eZwWvsiQhOfyZhDAY+duIhYD+cgLiz0tUZJEXs1b3agyr4VRZVFJAPfv329KcBKkBCsfKBe4CWqJI58L
sJmko7Ff3rXtrN33aUoKAna2ZdUEX2l1f3uPY/9LlCitwOcwXY7HL1OmHKZMnozAUAFgwCDk8WmIWDPL
INYsAf9sA/64PgI83/JIIASQcE4lJJpbBUn9qyFlYE2kD66LrKGNkC+8JUou64Kaa/uj3dYJGCGADhJg
b7pxEOef3PDaK/Dip+9x7OEFLLywBZOOLkCX7VNQe80AFBcyySnKIn1gXaTyq4GkQgKJfSsjgaiQ+LMk
HJgpSsAxFxkoEThk4I0IqAo8iEBDAyGB2EICsUeJeaoBUQKpR1TArE2h+nuSTKmqGEax5+TS5ctYsXoV
ZsyehXlhoVixcqV269HThy9ehFVrVqstW7FcyheL11+AxQJ+Ap4ksHb9OixfuULrei5vAgGM3/ufE0DS
pEm9mre6UWVeC6PKoooAbt++XYPJOj5IXz42cfxz8eAEvTuwv/n2G+2X54PG9YsX3+ra03hciUDO/0pI
gLEoCeP7737QYaZ2GTpsOD765yfal58qVVrkyZMPvXv1Rrg8lAOCx6HI3BYCsPIK+jg0n3KI4ysmaxJA
XF+R4HMEgHNFBcwVj+xXVUigOlIH10L6kHrIsaApCi5qiworeqDJxuHou3c2ZpxYiuVXduL4o0t48v3L
c+FzvMDFp7ew7PIOzDq5FH12z0LDDUNQamkX5F3QAhmDJAwIqI2kEnIw9Ego6iO+hCFKAlQDEpq4yIBE
MJ3mEMFUmkMEQgJxlQS8KALND4i5kUBsIYAkI0ph4gZ/PBSSJqk+FMLmkF3mLm7dvoU169Zhpo+PAn+h
gJugX7p8mfH+QgL0/IzvFy1douAPYAgwP0xUQbgay6kGFi9dqqThufzZFUDyZMm9mre6UWVeC6PKooIA
JBavqX379++rPLfe/5lI/K8FwO7Appd58d0LfPfiO5Waui9m9s02zZME6PW/c/P6Fy9cRPESJdXr8wUW
vu7apElTzJcHd+Z8P9QK6Ia0PjUE9AIex9tb4McRrx9njjGCP94cAZ+fqAC/ykjkLyogUFRAcA2knVcX
mcMaIs/CFiixrBPqrB+ITjsnYezRUCy4sAm77hzH3W9efpi43PzqPtZf34+AM6sxeL8fWmwahYpCIgUW
tlZlkS6ojoYbSUR1qArwqajGnISaEIEa8xQkBOYJaEIG8YQM4gkRxHOIIN5kWXsSwTiqAbExRg3EHVkc
PZdNwOWb1/Rvw78Rf1cmTtmTsmXbVgU0wbtSvPv6DRuwTLw4+/QZBtCzUxVwcE9wSIhKfHp47i+UNQmC
RLFi1SpVAiQQjgnwXD4c/+dWAMmSJfNq3upGlXktjCrbtWuXV1D/Xrt161ZxDuMV+a/en6/NPn1KWWnk
/1dfC3i/+VbBTtnO9Q+y/uEH2da1eHQxvo3H499/Z+pYEqBpuZhd+F46Z8DhizocyJM/fwH9Ou9S8Th9
Qscij18jAbyAXoAejyCXtXp7AbvLxOPHE4s7V8Am4KclCJAwIEAAGSAqIFBUwLzayBBWHzkWNkWhpe1R
eU1vtNo2FkMO+sP/7Bqsv7EfV57f8TpC8NGLp9hx+yhCz2/A6EPz0G77BFRb0xdFlrRHjrDGyCDkkiqw
BpLNlWsJCSQSElIC8CEBMDnpmBJBOSEBMSGA+BIWKAGIGmAXYjwSgBCBrh1FEFdIIK6QQFwSwOgSaBY2
ADfvmtedKfmpzPibk7R37tqliTv23TPOp4dfIOCm96asJ/iZ1Z/r748gzQMsxBIB+rzQUO3243h/lrMO
CYGEwTosD50/3/k1Ipa/CODfN6+FUWUPHjzwCuzfYwL+fHfvcCz/Xc3KkwAeP37kEMAzfeDowQlmC2J6
HBofQK45qCSi7EenniEASxqsy4X5thYtWvGPhU8//VzfzKtfv4FO0Dl7UQAqBHVEKt/qEtfTqwuQ1ARU
AnRaPAF5PH8Ddpf5i/wWS+Bf2awDJQwIqoYkQdWRYl5NpAuth2wLGuOLJa1RdlV3NN48Ar32zsKMUyYM
OPX4itfuQJYdengOCy9txaTj4ei6a4ooiEGiJDoi94JmyCjhRZqgWkgeUF1CjqoSflTSPEQCuXdrkcjA
EgHNkwgsAUwprSQQjwQgYUClgI44cvmU/h04iIeen783/07HThzXOJ0gpsynx6ZRupMEGN9zO3yRSfqR
DDiyjwqBST4CneeRNDjgx4YABD8VAUnEWxLwTSWA/PnzjzCwj1ik+CXzBn6at7pRZV4Lo9K8gfu37MGD
+0kl7v+GXXFUACSAR0oAZrioEoDE7pYAOGbcAv6nnzj9tZlAU/d1HUEMRg1w6mvOLmO6+E6dOq1TZPHv
kjRpCp06a+iQIVi5fAUGhk9C7sDGiE/gEEg0kfMuCxCJLZZQwJ2Ia8cSBArgxOvHl21agsAqaomCqioB
JAuuiTShdZFxQUPkXtwSxVd2Qu0Ng9Bp9xSMOxqGBZc2Y9/903go3t5z+fGXn3D2yTUsu7IDM0+KMtk7
E402DUWZFV2Rd2FLDS3SzquD5EE1kFQUR2IhIN53AiEqWkIqAksGv6oK3IiAJCAK4AufRth55oD2vLh3
6ZEEOIMyvTvBuXzlSpXtlPo2o8/kHpN4lPKU9xbwq9et1XpUBCtWrcSSpcscoIer1DdDgE3cz23mAkgG
nsubSgDp06XnHIhNDfTNIsUvmTfwJ078J+4G/OWXX7wC/NfsxvXr0SVufMzYUQngXkQIQAIw8f8z7cpj
HP9CZDzBrATwowE+37v/+RfOfS8m+5YMrBr49tuIWW05mi969I800ccBPcWLl0RoSCiWrFqGWqE9tV89
4VwBt4A9sXhTl0ksT0uiHt1Y4kDxtkEG5LSEsk1L4FhCHg8WWR4swJxXA6nCJAyY3xA5FzdHoeXtUXV9
P7TePg7DDwch6Pw6bL51GDck3ve2XH1+F2uv74Xf2VUYfNAPLbeMRsVVPVBA1ES2+Y2RXsgllZBMMrlH
kkAiIYFEfiQvIQCSgEMEam5kwKSmmhBBAiGCBEIECaaXQe45DbHs8Cbz+ztyn787ty9duYxt27cr8Alg
GhUA13x7b+26dRr3rxGgE/wEMo+TJNZv3KhGgHNNgiC4mfwjKazU+os1abhctplIZJuLhQQ8l48nXPUK
yv+leSOA1KlT6xuPBQsWLOzg3yte3IHP7H+iRImiJU/+J04CXrlyxSvIf81u3Lixn8NvOQ7/nhAAwW8V
QEQC0PQAKAG8kDheYn56d4KcoLf957/oBzAi5t/ja6VUDHYZPHiI/AJ/17nsOJafA3rWihSdtTwQRYJb
I6mfeGsBezKR0sklbk8RVFMtZXAtpJrnZiG1VNInF0sm4E4yr7pYDSSaV00tcbCsBfhcJ5F9gj9ZiLQT
Wgvp5zdA9kVNUGBZW1RY0xNNto1Cv/2+8Dm9HCuv78a5p9fx/c8vf3Ho/rdfYosQRMiF9Rh9JBjtdoxH
9fV9UWRZO+QKb4oMofWRRu4zBXMBJCtRISSxhEoCVDJuBKAkIEYCUBJwiEDCgXSza2LWzgUKeP7mnKTU
5k74d9q9d4/x+AL2zVu3KoD55h49NcG6bsN6rBWjxOexDZs26XFDEKu0jOEAy1YJsFlPiWL1Kj2+WvYZ
MlAd0JgLYAhAcvFc3lQCSJkypZBAGr7y/G25cuVi/BYBEPzx4sWLlilTpmhFixbzWjeqzGthVNnz50+9
gvxVdv369SV88cYSABWAiwAemZF/xgNFEAC9EBN+P/7ofLVXAG8X0gDVAEmABOEO/rp166vkT5gwqfxh
MqvkXy8P48ClU5A1sIGAnn32NbTfPpXE06lFUqcJqYu0YukldlcLq4d0YmnF0oTVRWrHUobWRgrx7imE
GAh0JYQQicdDDDkkle1kQhwpQ+sg/YL6yCIEkHdJK5Ra1QX1Ng1Gt73TMOmEyOPLW3HwwVk8++Fr564j
FpbtlxAhXEKFCcfmo8uuKRJCDESJFZ2QZ1ELZBJlkVbaTyGElFxCjiRMQPqLCvF3CMCdCCKpATEBfyrf
api60/TlK/C/fKzAJ7nekb8LPb7G5yLjCWbG7QTycgE+ZT29Nr03j1Gy8xj7/AlmJvrYG0AvznqmN4Dn
S/iwYIEe13oOMfC4JhA1bOAgoYVKBp7Lm0oAyZMnUxJIkyYN50588GsEEAH+zNHKli0XrUyZcl7rRpV5
LYwqu3Pnllege7MrV672uXb9ur55RwKwIQDBT3MfAKT99k6/v00C2hyAuwLgwi0eJ1Fw4fsC/EYd/wap
U6dDoUKFdTTf6vVr0XTRQKQNFGAK6FMH19Y4mp40Y1gDZJFYPcuCxsi2oAmyhdOaItvCpsgq4M0i+5nD
GyNTeCNkCG+IDAsaIO18IYX5IsPnCwiFDJKJt08SKtJfCCGZrFPIfkopTyt1Msk5uSQMKLqiI6pv6Id2
OydglHh1evetd47g7rcvDy/lIKGTX17G0ivbMf3kYvTaOxMNNw1D6VVdkXdxS2SV+0knYQDVCnMBSST8
SCwkwDyFCQccNWDzGjSGASL9+2yYitsP7irRMs7nb8zfl3Mqbtm2TQHOLDyH6zLLT5CTCFhmMvch+vou
wc3jOphHwBwyP1TrmRjejPCz3XzM/PO8eXI+E34kFx36K3WYQDTjARa4rr11xw7nl4hY3lQCSJIkCQTc
LhLIlSvXQSl+CS8kgPjx40fLmDGjgr9kyVJ/bgUgUt0r2D3t8uXLla5evYLr167pa7ecv++lECDSGIBn
OgaAn8YisC0BaPyvOYAIEvheE3+mm4/tpkmbXsHPj2iUKlkGq8Qrha9fhqrzuyO1gD+NAD9DSD1NpGUV
sOcIb4bci5oj76KWmq3Pv6SNynVa/qVt8cWyNsi7tLVaHgEe4/lsi5uqV8+4sBHShTdAmgX1kFqJQMAo
wE8uBJBS1AFDgDTz5XpCLjkXN0Oh5W1RaW0vtNg2GoMOzsVcie/XXN+DS89u4ed/vfzNgCvPbmPVtV2Y
c2YlBkrY0GzLKJRfzTxAG+1dIHkxPEkuKiAZVYCQQBImBVUNMKfBwUlic4UMBPytV43E9Ts31eMzu0+F
xd+Sr0/zmwecsZfxO6X5SpHo6zdu0DK+s7+O8l5i+NVr12KrqIONmzerTF+7fj02btpopL9I+01btsj+
JlUDPH+DHFsm3pxG6c+QgITCuROZO2C8z2uxLasGjp44jqnTpzm/QsTyphKAxPIvkUC+fHn5NlMkvCRI
kCBaunTpxOuXjVaqVGkFf7FixSPViWrzWhiV5g3w7nbxwsWYQgA/cuotTrqhBHDzpqgAEwIwCagE8FgI
wOkF0C7Ar0QBfE0FQAIw/f0aAvzEpJ+J/dk7wGNcOKcfx/DzJZ6MGbOgZo3aOjNPwLoFKBraBmmCauvo
vCyhDRX0uRY2xxeLW6OggLzo8g4oLtK61MquKL3asVXdUHpNN5SS7ZIi3Yuv7IzCKzug4Ir2yCekkGdZ
K2QXMsiyqCkykQhE6qcJq4NUDA8E+ClCawoJ1JaQoQ4yCkFkW8g8QBuUXd1NPXnPvTPUsy8RD3/s0UWv
3YF3vnmk4wWCzq3FiEOBaLNtLKqu7Y0iS9shp6gSKpc0zE84YUBS9kBQCQSacCCxH60Sai7uhSMXTyrw
Sa40/p4cyXf4yGHzQo54e4KfQGacrjG+gJ1kQFASpEzqMRdAoFLSM+vP4yxnQo+ynvV4LkFOwmCegPsk
DpIAVQMVAa/FurwWQwImARkiHDh8GAGBgRCp7PwKEcubQQBfOncTsQiwXSSQPHlyFwl88cUXdeSwCytp
06ZVr+8O/j81AQh4vYLe3S5evHiKc+1RAXDGHUsAL+cAzKu7lgD4sDIm1RzAd9+rpzdf12FPwE+a6bcT
dxw8eAiffRYD/3jrHQF/Jp2oY+u2rfBdF4ovQpojXbDIcAF+dvH4HJmXf3EbFF3WASVXdEFZAXrFNb1Q
ZV0fVFvfTyT6ANQQq7lxIGpsHCD7/VFlQ19UXt8H5df1Qpm13VFcCKHwig7ILx49z1ISQTNkERKwoQFB
n0rUAMkgbRi7AuuLZG+kCoIxfC1pv/OuyRh3NBRhFzdh551jOvjHc9EXg24fxXypw7odd0xEzXX9UZzj
AYTAMgkBpA+RMECTlxJ+WAWg4K+MgiEtsOPcQXz9zdcaVlFdEfj8Xfn7MwEXEBwsAF+qEp6gJKiXCuAJ
ehrLKeNNPz3XCzRRZ/vzSQRLBfgMA2iM3ynrtT2pw/OYROR5LDfS3+wznOBxEhD3d+7ZjUlTpiB27NiI
Gzeu8ytELG8qAcSPF88rCYi3/7FkyZJJpIrihcAvVapMJPD/qQlAHiKvoLd2/vz5wAsXL+j025yBlwRA
FcCv3zIPoArg/j0zCvCheRGIBOCeBLQ5AD64NJKAIQQDfiarPv74E31vn56/bdt2Cv5Ja/yRQYCfYZ54
/bBGyCVenx6/yLL2KCXAZ0a+6to+AsaBqLd5CBptGYHGW0ei2fbRas0dayrWeNtINNg6HHWkXnUhBZJB
2TU9UIKqgIpAwgPG+FnFy2eUkCD9/PpIJ7E/E4dpQusgQ5jcgxBAbqnD61cVsmm1fSyGHgxAwLk1WCde
/trzu/r/cV++/ek7HHpwDosubcWU4wvRY/d01N84GKXl/jkeIMv8hkoAqdgb4IwJSCJeP5+Q3vITW5RI
6e3Zp8/fjjmVs+fPaebeZui3Ssy/bfs29fy79+wReb9NZf9GUU/cpoRn3TUMAaTOug0bTObf2WfdTRIO
0MNTGTAxSK/OMoYAJBkmBHkO5T7rsW3OCESiIeFQOXCKdCYFEwqIPv3sU+1a81w+ewMIYNK+lwmAZBUv
fvwIEhD1QhJIlSoVMmfOfEeqKF48Pf+fngBo3oBPE/DX4hTbnGX30qWLkQnghiEAJgKpAO7fdxKBX5rX
gOmp3AnA5gGM9+J4f5Pw27d/P95/7wP90g7f2+/Tu7c+tMNWzTSxvoA/W1hjje8LiWwm8Muv7onq4unr
bRyCxgL6FtvHoO2OCei4ezK67pmGbnuno8e+GWIz0V3WXfdNR+e9U9Fu10S03jkeTbeNQoMtw1CLRCBA
LrumO4qt7Kg5gzxLWmiXH8GePqy+DgWmAkgvZJB5fiMdFlxwSVtUWNUTTbaMRL99PphlRwV+eRU/eLwd
yGHC555c1wFBfDGo377ZaLp5BMqv7IYCQmbZ5zdGRvk/andgQHVkD2qIufuXmrH6X3+lvyN/P+ZOmGPZ
d2C/ib8FhJslVmdMTkBrrC+kuWfvXgX0zp279Piu3bt1nzKe4GY//s5du519aWPrFo3jmQ9g3M86Guc7
x9kuAc5QgtvMC9guQJKCjf0PHT2i04LFFwB98tlnSCnASSrxtOfyphJAnDhxlATix49QAgxhkidPoSSQ
J3eeZVLNK/j/1ARw9uxZr+A/dOhQLE6pfe6cIQBDAqICrlx2COAGbt4yYcD9eyQAkwfgm4BPnphEoE0C
Uq7yIeaa8p8kwGXPnr346KNPdKou9vF3794dW7ZvxeBV0xX8GUMa6Nt4+Ra1kpi5vUr9KuLx62wYpOBr
vWOcgH4Kukss3veADwYe8sPQIwEYfiQII44Gqw0/GoShhwMxSI71PeCLXvtmocueqWgrRNB822jUF0VQ
Q0KEimt7otQqUQPL2mmGnkDPskBCAlECGSjThQgycjyAxO35F7dCmZVdUX/DYHTbPRWTji3Agoubsffu
KTz/4Rv9v7kvN766hzXX9sD/zGoMO+CHVlvGoPKqXii8uC1yhoniEALIHFgX0/aE6cQnKvfF438rvxkT
pQy36KkJtk3ieTdt2azemMCnR6a3Xi9enoCnMaFH785yAprbVAD00oz1WUZQsz16dwJaE3+Ox1fwSxm3
eYzxP/v/rfe3KoH7zAecOnNG2yJoPvv8c42dEydOjERinsubOhKQIUtsFwnER8KECfX/QBJIkSKFqpkv
8n1R1xv4adLEf828FkaVHT9+3CsBnDlz5iTn0+fXdi6cNwRwUVSAJgKpAmwewOkKJAHoSMBHj7VbKiIE
+FpfBiL4GR7YV3nPS5t8d58z87KPv0f3HuKptqDfiilIHcQsf33kmC/gFy/JWL/8qh6ovq4f6m8agpYi
vente4qHH3BwjgJ+7PEwTDi5AFNPLca000sw/fRStWmnlmjZxBPhGCd1RkjdQQf90Gf/bEMEO8ajydYR
qLNxkGb3SzEkEImfb0krhwQaSpwuRBBaXxRAA2QLb6x9+MWWdkQNzhGwbTxGHgpG8Pl12HTzIO58E/Hh
ELs8fPEEm28eQsi5dRgtddtvn4Caa/qh6OL2yBXaBIO3zMbtx/dVLRH4JEsSJWdCPnTksHpmdquxX50e
nSC0I/UY+5sEn5HojOcZ5xPsBC5je8b/jOd5jHG/BbTp3zdj/LUtrcPz+PafSRqyvuYINPm3xGzLMZIK
k4l79u/TOoyXP/6Ycy6m00x6osSJkCBZIucXiFjeVAKIFSuWkoAqgXj8erNDAm49A2nTpv22Zs2ab/+/
IgCaJ/hPnjzZj9/XOy0EYFSAkAAJ4KIJA2xvAFWAftHH6QlQArA5AHmQSQBfi4zlg035/9PPZgDQ9es3
5IeOr7I/TZr0+nlpgn/Ayik6oIfg51BZen4L/hrrB+iLOByGS5nfT7w5gT/++HwF+OyzK+B3fjWCLqxD
8MX1mHdxg7EL67XM/9xq+JxZgekkg+MLtA9/oJBHD1EP7SV8aLZ1pJJA5bW9hQS6oLCEGww7soc3RVa5
l8yiAjKLGmAuIu/C5prFpxdvvmWUdu/NOS2guroLF57efOntwK9//BZ77p5A+IVNOkFI1+2TUXf1AAzY
NBM3793W3+m5mAU+e1OOHT+mHp5A3bFrp8j2nbred+AAdgoJbN+xQ2N7ynvG4ozJGbPTk9u4nrkBEwbs
UtVAj846nNRzm5zPUIuEsmPnTs3DMITgGAIqAbZB789QYduO7Xo+z2XIoN2CQhL8+ArJKU3atPjkk09U
KidNlhSJkiRGgqSJkClfducXiFjeVAKIGTNmJBKIp0nB+EiUMHL3YLZs2Y7/vyIA+aN5gP9Eelnrp7T4
bb2zLhUgoYB4bYYBlgBu3jAhAM12BbJbimEAQwDtCXhuegIYCnAhGZjpuc2rvB3ad8AWebgGr5img3uY
7SfImOmn7FfwbzDg5+Abev1Bh/wx5lioAn/OuVUIFpDPv7wZi65sw9JrO7Di2i6svL4Hq8Q4VHfZ1Z3a
VTf/0iYlBPbdkwjGHQvDsEMB6CNhQaddk9F86yjUlfCi0hpRAitECSwREpD7yCEkwHvKOr8RsogxGVlw
cRuUW9ENjTYOQ6/dMzDt+EIsvrQVh+6f1cSf+8KvB3HykEUXtmDakXBM37cAZ65fcM16RLJkDwm3CSqC
lwAjYHft2aPA53DePfv2apKPcT6/wEPQMvnHcoKYgN8pYOc2X/MlWAleksYO2Wf8z2Nsj+XcJvGSQEgc
JBUSgJKKkyQkgbCMhECSYR3WPyHPB+tkzJQJ0aNHV4mcSozJs0TJkyBL/pwoVKu08wtELG8iARD8MWMZ
AogggbgOCUTuGSDJFShQoM//GwLg4k4Ax48fu8qPaJIEVAUICZw5c1a/t+fKAzjJQM0DSBjAz3jdtWMB
dDAQVYCZB5BvA9K72aVEiVK8qIKf8/Vtkody+MoZOh4+TXAdHdzD/n0m2sqs7KbJPgt+xu9DjwRiwokF
mHVmOQLFs4df3oJl13Zi9Y292HDrADbdPqQj87bdOaq29fYRbL51CBtuHsCa63uxXMiA51Cy+4oimCyh
wYjDQei33weddk5Gsy0jlQQqru6JEss7KtDzyP0wHMkm8TrVQM75TZB/UWuUXt4JtdcOQOcdkzD2cIi+
+8+x/55vBzKOv/D4Olae2Y4LNy8rIdLr8yOaHBPBBCkJlKBkfE3vTABrrC9go8fdJl6b3lq9ugCU2yQC
7QFwPDTBT8Lgce7Tw+8Tib5n3z71+pYQFNRSR0lCtglsqwA0uy/AJvlwsBDr2fas9z8lzwTVAWPj999/
X2P+FE63WWIBf/ZCeVCsTnmU71LX+QUiljeWAByL5RCB7cZ07x40ScHkDAXQqFGjT/7fEcCRI0f62q/n
kgT0g5pCAjYXwO/xaxggJHD16jUddmoGBLE3gHmAiNGApiuQcwF+pQN+uLRu3VbBz2/v8RNcG8TDTF7p
h2TOPHwZQuup5GZXH7P97Nevv2moyn56/iHirRnL+4jcp7xfLF591Y092CigJ9h33zuJvfdPY/+DMzo+
n3ZAtvfeP4U9cmz7nWPYdOugEgGH54Ze2KAj9Ng9N/xQIPrsnYUOOyZqlp599eVXdpdYv4Mm/XKHN0d2
AT4n89DcxMKWKC7Hqq3pjdZbxmLYfj/4n16F1Vd34+oz9hqZhdl7kuAtkfo6u5Hj8X8UqU/Jf0ZCLEpu
yn16WfaKWLBqCMAEn6wJSiYAjbTfrsAnKHmMOQENARxvzfMp19kevT5BTiOZ6Ft/Am7usw4lPNtiPSYK
mdFnnM/4n/WYJOQ5vD4HCjHhx3MJhOjRP0DadGmROo3x/ElTJEOOgnlQpmFVVO3RGFWGt3B+hYjlTScA
QwJCALFiu0ggXryXk4JZsmaNFApIM/8181oYVeZGACmFAEA7duwojoq5k4CGAufPqUTlpJER3YER7wVo
V+BD806AGQwkce13Zojv2LHjFfxJkyZDwQKFsE4e2pmrgpAhoI5OipFWvD/ltUp/ifvZx89sPxN+jPkH
HfbHBIndLfgp9dfd3K/ensAn2A8/PI9jjy/i5OPLOPXlFbUTss1RekfkGOuQCLbdPor1ci677kgCc4UE
Jh8PFxIIQK89MzSx13DjUAF3H/HyXVB4cTt8Ed4SuQT4OYQEcoY11Uk9ikh5xRXd0ZRzBe6ZhZknFmPp
pW06IeiLH79TT88huvyqDsFPRcSXohjnc8gzpTuz8dbUK4sXJ+A4Ao8A5jBdApXHqA6Y4bfg5zkkCvXO
YvTKrE9lQE/Pob+mF4By3rztZ8lig4Cb1zEe3xANu/a064+kIvvMP5AUSBwrhRiOiGMgUSQXALCfP33G
DLrN12iTp0yBXIXzoULjGqjTrxVqj2mHShNa6d/efXkTCYCA90oCNino3jPglg8oVqxY+/83BHD48OE9
Yjh86LCSwNGjR1UJnDwRoQKYEGT2nqMC3ROBVAH8CKcZEGRUgPF8Ju5fsmSpgj9evATIlCmrTtgZuDIM
uQIb6au8KZn4C62v3r+ASH8m4aqLB26ydaR28/U76IuxEq9T9lvwrxdJv+Pucex7cFqBT6CffnIVZ59c
x/mnNzQZR+M2y858eVWJ4aiAk5N47BA1wLDAkgCTeBOOhmHQ/jnoumsqWmwZjbrrBqLiyh4osbQjCixq
hTwLmqv8zyEEwO2CC9ug7PLOqLt2ILrumIqJR8IQela869WDuHn3to6H+PbFt6qEbILvihAnvTz71QlO
m4RTry0gNtJ8p4KfEnw743khBcb6lOmU9QQ95buqAdmnF1fZLsDlPtvjNuU66/E8qgx6bp5DcrDn8Ro2
cch6zA+wjiGgjXoet8+L8jtw8KCC/cMP/6mfCOfrs6lSMfZPhS+KFkSVprXQaGA7NJ7cFTWndUSZyX8O
BeCNADxJwFs+QEKBF396AuAbTfv37696UP64Bw8cgJKAmFECEaHA6VPMBTAUMGEAP8UdeViwEIDODHRf
vR2NC8mC8/d98ol4jPQZMWXKVCxZvQzFglsjkV8VJHPm3ss8v6F2r3FMfwWJvzmyr/WO8Sr9me1nwo8x
/+Kr4tnEe2+/e0zk/VkcFe9O4BPofCHn8vPbOk/f1a/uqnH7ipRdfnZb65AImJA7cP+MDt/dcGM/ll7e
jpDz63XmntGHg9Fv72x02DYBjTcOQ/XVfVBmWRfx9m3xxQJRAQJ+VQCiBqgKSi7piFqr+6H95nEYttsP
60/vwoNHZoptKiAmPTnbEXtKTgqREoTMrJME9uzdo0k9G89zvVfidQKe39fXY2IE3oGDB/QDHdwmSA/I
NuvYNgj6PXv3abvsJVBikXpKIBrrbzZ1pH0FvwCbbZv72KtqhOU8j4k+qgzNQ0g99gbxOnnz5tGuPpIA
u/vSi2lSrFhhVGlSGy2GdEbLab3RyKcHKs1si0ITG+oz4L68iQRAkP8WCZhQIJ4rFEiSxIQCOXPmXPGn
JgDavn37nu/bt18eqP0gERySh8udBGwYwAfBdAnaPEBEGMCeAI4H4Nd82PXHl3zZ558jZ26dyYdz9Xft
0hVrRFZWn9ddp+7i5JscA8/39/n6Lt/kK7mqK6qu66tDeun9Bxycq119zPYzeceYn7KfXtyC/6ID/GsC
+Btf38dNsVtfP1Dj9o2v7usxvpl3UVTB2S+vCQmIRxMS4Dj9Ndf2YtGlLfA7swqTjy3A0AN+6L5rGlps
HqVJPs7myw+EFAhvrR8LyRXWBLlCmyJfmIQBi0TqLuuOibvm4cHjhyr79S09IUAOeOLAnpOnTmpczX53
ymmCjN5285atxosL2OiJbffe5m1bFayqCJyuOXpomibypK7KePHQlOQEMxUEt6kEbL6AIYENL8wAHhMi
6EAe+Tswuce69PCM9xkK8Hpsh9eiiqDsZ9t58+XFJ59+gnQC/tRp0mjij+AvWqIYajavj7bDu6PT7EFo
EdAftfy6oOSM5sg7nu/RRF7eRAKgh38VCcSKaXoGXgoFhARsKFC0aNEs0oxXbEWFeS2MKjuwf/+kveIB
aMwYixqIIIEjhyNyASSA06eVANgjQAXgHgZwTnn2BDx79pXO7MuldRuT9OPknTVq1MKK5cv167sEP6fw
ovdPxRF/YfWRk5n/ZW1RdnV3fYmnxY6xOpTXen/27TPbz4QfY37KfoKfMp/gv/7VPQX87W8e6ht47sYy
HmOdq6IISAJUAgwH9tw9qYN0VkgoEHJOVMAJUQGHgtFHYvp2W8ej/vrBqLqyN0ot6YRCIvnzCOhJAPx0
WJ55TdFm1Uicvn5ePT1VD3s8OOsxs/wXRCnRo9OLEuScj4/emkAniK2Mp6c+JKEX/waqBuQcrumRrVcm
KNk7QI9tCYRS3nrrXXt2q7ogqHkOwwhel/Ke9XgtbY9kI8ZrkmQMsWxUktGQg+QiZSQq/s2pEvJ98YXE
/J9zogwd4ksFwAe/RMkSqN+6CTqO7I1e/qPQKXQ4Ggf3RXnfdig4pSGyjamuz4H78qYTAHsBXiIBRwW8
KhTInj37ZWnmb68wr7j7d8xrYVTY8uXLP94jf2AOyeVaSUCkoJCCkgDNqoATJ044XYJGBbgGBbl1B5o3
AI30Dw9fpOBPkiQZChcuiuXLlmH0ohlIObe6TnSRNKAaUgTX1Fl8OMaeb9kVW94RFdf2UvnfZud4Hd47
5nioJv7Yz8+uPmb7Kf0Z81PSu4PfHfR3v33sMltmSYBKgF/1YU7g4P2z2Hn7GNaKClh4cYvmAsZLLD9w
ry86bZ+IJhtMGFB2qYQBQgD5QpsjZ3AjlA/vgm1n9ulw3a85gu/5M817/PTzTxoWEaQEFd9yPEQ1dfSI
Auqw/J4kBRIBx/Vz22Xy+5N0Ke3Zz79bQK19/vJ34DbXVGasy22GBHZsAM22S3CTzHkPBLkoPOxld6CS
PJXeAa2rpCD3qG3IMdsuzzt34YKQ/zGR/XnxYfQPkSFDBqRJazw/wV+6dGk0a9cSXcf0w8Cg8ei1cBxa
LxiCGoFdUWJmC+SaWAcZR1bRZ8F9eRMJgJ7911SAOwl4hgIkAI6BKFSoUGNp6h9u9pbY38X+MBF4LYwK
27179yp6Clm7bK/EekoCfMDEjsgDx4SgKxfgqACbB6AC4APPHgAmvbhcu3ZdPEYMfb2X3p9f4/VfOg95
A5vq++06f59If513n8m/hU10yC/fzKsi8r/R1uHouGcyBh72w4ST4TrCj4N82M+/y837M65nnO8O/nvf
funVLBGwLt/a47mRVcBBLLu8HYFn1mDqsYUYtt8f3XdORYuNIzXGr7CsGwqHt0XVRT2w5sR2Te4xzmeC
z77fcFHCIoKdoCMILSAtGA1QJT4XM4A1oKOX5XGGYDzfJuNMPL9LgWuBTSNgWa7XEeMxKgGbR+DgHsb8
9PhUBGxPk3/08CLneS7Br+GGKAQtc/Zpl0XZsa8/f/78eP/99wz4Bfjs/yb4S5YsiTYd26H3+MEYHjYF
Q1ZMR+dlo1E/rA/KzWmH/FMbIsvY6kgzrII+D+7Lm0wANKMCfrtXgCrAfXBQ1qxZGfe+J/a+s35X7G0x
koElAq84/C3zWvhHTbxNhh3yx6btlAdglzwANKME9mgocEA8xUHxRO4qQLsEz511COCSKIAr4v1vSKzL
qafNOP/KVaqq9+eIPw7zXblyJaqGdEVSv2pmHj/x/ClF+nM6rIyccVfkf4Gl7VBG5H/1jf3RdNtIdNs3
TV/iMcm/tSr/OciH/fzs6mNmn96fMb+V/QQ6J+L0NBcJOCTBnIBRAddx4tEl7L93GltvHXHCgHWYcXwx
Rh4MRM+d09Fq02jUXt0fNZb1Ruih1RLjm5eaKPXtG47s/SD4OF6fE2IwvmZ/un2DTvvUJZ7WQT0Sm1PO
82UaljE3wLrsctN4XddrNB7n+TyXY/T1LTzG8OzHl2Osw+twe7WcZ1/Lpey3bfEYx/jzGmyPeQGO5+f1
2K7OB7jCTBrCvMBiOUZC4v+lUOFC+PiTj10xP2U/k14Ef/uOHTBo4giMDpuOsWt90WfVZDRfOAiVgzqj
6EwJkSbXRvrRlZFyeFl9HtyXN5EA6NFfVgG/TgIkgMRJEutvQmLMmDEjqlatOkqa+0TsY7F/in0gZomA
JOAVi79lXgv/qG3dunXnNpF/NMZ9O8WTqDkkQNlID2TDgCNHjrrCAHYH2ncDmAdg4o+xP5cZM2cp+DmX
H0f9cTqvnovG6qew+MprGlnzk1vpQuohk/N2XZ7FrVB4eQeUX9sTtTcNRvMdY9B933QMk/ifL/ZwqC+H
9265fSSS/GeGn0k+d+9vQf/gxRM1dxLgZ7zcVQDzBwwDOHx3+62j4CAeftd/1vElGH0wGL12TEfrDaMx
/+g6PHn2VAHPWJ+en9Ob8TVoekp6YQKTnviIqCUCiECiROfvyePMqTC2N55/n3hy0z1Hj8366t2lHo37
EV59j7bBfZbzb7J3336V7Ny3bbDN7RLr22vzHB6z5+6V81iPcT5lv/X++k6A7JMczl+8gOPyN2bM/9HH
H9OrOcm+1OrpSpQoga5du2L8jEkYHz4LUzcFY9hGH3RYPgp1wnqh1NzWyDu9PrKMF+8/siKSD/1zDAVm
Ys87CbxMAJYEGAJwUBDlPxVStmzZOHsQp4SKJ8aZUGKKkQxIBFQFVAL/kQrwWvhHTABfTAgAW0UqbpWH
YOtWEoFJAFERWCWwTx4mKgHbI8AwQBWA84LQpYuXNPvPSTy5XLlyVV/vpfTPnj0nFi1ciBkrglA0rA2y
hTZG1rBGOqaeA34yL2ik/f65FjXX6bmKreqMiut6o+7mwWi5cyx67Z+JkUfn6Rt97PvnuH7G/xzMQ9AS
vO7ynxLfEoAF/0sk4EYA14UAmAzkl30O3z+HHbePYc3VPQgjARxbgpH7AhF6eDVu3b9jgO981JRynx88
IQESPOxmo8Qn6Eysf1Tt0OFDhgAEdAStjdkZV7MugcptJll5nKbkIb87QwFbh2U8V8HvlPM6B6V9lhHU
DNHYFoFOwPM6bIPHGO+bLsW9TvkBk3gU1WeHHDPzT/CfPH0KxYoWw7vvvovMmTLrxzJ0kI+Av3jx4ujc
uTNmzJmFGUv9MXNzKMZvDUCvdRPRZPFAVAzqhEKzmiA7vf8Y8f4jyiDJ0JL6XLgvbyIBlCpV2kUClgBi
e6iAGG4kYBUAfxd6fyZH8+TJg3r16mHw4MHrpMmUYpxFiGQQQ+wjMYYFzAt4xeSvmdfCP2KbN28+KqZy
cQszx86aBGDVAB9EGsMAei9DABICOApAewIuXzYTVghAuDDTT+/P/v6hQ4dik8jOVsuH62uvhRe1Q6HF
bZF/URt8sbgl8nLyzsWyLeAvJN6/9OpuqLKhH+pvHaoJwF77Z2HksXmYcXrZ/4YAbh3D6iu7Me/0Wiw5
vhEPvnwY4fFF9hP4zPJzODS74Cib6WGtp6b3JanabjqTWTcz7XBt96m42O1mu/80TKA8l5idHpnHGLez
Lo11WJeZee6zfQtg27vAc3lPrMP21MtL/M+Qg8YyrvVe5Hyu9ZqyZqjAhCMJhZ7/gw8+0AfaejZ2dRUr
VgydOnXCXL+5CFm7EHO2hWPmngUYvHU22q4YgRqh3VFibivkmd4AmSZWR+ox4v2FABIPKaHPhfvyJhLA
suWrFdC/RwXQeIz1mQ/JlDmTgr9IkSLo378/1q9f/4s8K3mk2cxinBKJ70RTDVAJ/EcqwGvhv2E2C8kY
5O8C8EKb5EGxxoeO4LcEYHIChgD27hVvI+CnHT9ucgDsBTDdgJf05R8Ob+USFBSs4E+bNoM8MCWwU9qZ
tCkQ9dYORu11A1FzTX+dvqviql46sQdH+zHpV1w8f0kBf/m1vVBj0wA03joCbXZNQJ8Ds1UBzBAFEHJB
4mgJAfhiD8f2ewsB3AnAnQRc4Kc5BMAv9zIEuPhECODRZRy8dwZbrh3Cpgv7cOP+Lf1cNr09pT5f5DFd
ehfUG9NTW9lOj0qPzEE69NKaRHU8Nz0rt620Vxku+5p0dW2LPBeJz/pUEhztx7aN56YqMOfzuGbn5Tx7
fRrbIQEQ7CQhtmnMdOlyWjUm+CzZkJissT12D7Jr8oiokCLFiuJ9AX/GTBmRMnUqpE2XTj0cwd+xY0f4
+flh1ZZ1CN69DH77l2DMzgB0Fe/fYFE/lA1sj/yzGyPblFpIP64yUo0qh6TDSiHRkOL6bLgvbyQBLFuF
Dh07qQqIGy8yAXgjARsCMDzKkT07ChcujHLlyqFHjx7a3rp16w7LqrBYLrF0YiSBz8SYD/i3cwFeC3/D
LOgpOcg6vDAlyAcC+j30+JolpqfZYryS9fxG/ssDJ57fvRvw1KmTLvBzYhCO/6f055d9SAKpU6fVEX/p
0mXABia7DmzVkXE9d81A953T0HnnFLTdNh4tto5Cw83DUHvjIFQTj195fV9U4mSeG/uj7pah+tWdtrsn
aRfgyCMhSgDMASxnDuDWYX2xh2P7Oc0WR/gxoXf7a5ME9CQBd2M5k4Cs654EPHbvPPbdOIEb9wT44u0J
fHp6vqzz9dff6LsPBCnBQnBRQhOE3ObaSHZTRkBy7b5N8HKbsp37JAPtBRAAW8BrmawtgI2iIKANkTDe
57m6reeZ2J5tE9gkFaoG1rOkoHVlm2vWd9/m9UgKh48ewc3bt1C5cmW88867otwy6Ag/PtiMby34586d
iy07tmLJgfUIPrIa0/bPR7/NM9Bs2RBUDuuConNbINeM+sg4SWL/cZWQbKR4/6EkgD+HAli+gu89rNdn
15sK4GAgdwJgGccBMDxiNym7RGvXrq2ql8vVq1f/9f333/NVyFJiVANpxJgX+FDs31YBXgt/xay3t8CP
LsZkRAwBciVN/EnM/5K3p9HTOJL/6BHzLoB6/dMRff9M+rHbj+B/9tz0+Q8cOFi9f5o06TBkyBCckxBh
yanNmkybfmKxvm03/sh8nTlnyEE/9No3Ex13TUbL7ePU49cXQqi/dRgabxuhA4D48U1O3zXqaLDmAILO
r8XSq9ux8eZB7L13Sl/sYRceu/I4ws8VBoipp/cAvhq9/9cR8v/Clzdw8s4FXL1zXT095b4C/wdOvPmt
Ehy9I0fKETT8bQh0gs54aBNb05PSWxNUliBMPTs8l95b9uX3JQj3y7arG5Ddg9xWFWC6CFlOsNt2tNtQ
rkeQkxR4vlEDJrfAa9DL8zqsQ6Ky96jXd2J/3hvbZq6ARECvf/HyJVSpWlUn8+DDnDqVeH6JaZndpldr
3749fH191SlsPb4HYUfWwu/IcgzfMRcd1oxBrfDeKBXYFl/4NEbWqbWQdmIVpBxTHklHlkbiYSWRcEgx
fT7clzeRANas3YRFi5dh/PhJkRKCJAC+FeipAljOLsBMmTKhUKGCqFKlCpo1a4apU6c6LYK/2VFZ1RMr
I5ZTjBMkfir2b6sAr4W/Ymyc3Q7sgmB3RCwxSpBU8hDvjejqMwk+C3gm+jz7+12xvtu4fwKDM/88eGC+
hHPixGl8+OFH8qMlQO7c+fTDIYevnsLKK7vU2LXGsfYLLm7RufH5Dv4Mjrk/FoIBB+bqpJ0dxOMz7m+1
a7xud9kzTRXAiCPBmHZyMfzPrcGiy1ux7oZI4rvHdZbdUzYMEBJwHwhEEmC2n4C3pt1/An56/2vP7uL8
/au4dPOqenx24+n6h++VCJjZ5yu6BBABRtlP0JAMOAkGB/QcP2GSoVRHJEgawcrjJ06eUMDxPA7qsaMp
qQA4CIjnc806JFj+3pqcE2DbOjS2Y1UDlRi3eR+mDWlP2tW1cw7b4vGDfJlLrkHAH3TOYe6GdSypcITi
o8eP+U67Jvzo9dOlT4cMGTMgQeKECv527dphzpw5qjiOnjuJpae2YN6JNZi0LwQ9Nk5Gw2UDUTG0Mwr5
NUfOmXWRcYp4/wni/UeXQ5IRpZFICCDBn4QAgoJDsWzFWixeugJZs2WPpALixI48NoBrHmNuhJl/dovW
r18fXbp0QUhIiNMiE+JX+A58ZzEqAf4Q6cViixGX/1Yy0GvhK4zen56fF6HXp+xIIZZVHuwaLu/uAJ0P
ro7xd8AeMcCH/fuRx/lzfjqC4+HDRzr4he+1c6lVqw7+9re3NATgRyPYXXbr+X3ceG5ASTAyFn/03TNN
3PENvEWX5WGSuJ5v9407Ph9DjgToG3/d989Aj70z0Wv/bAw8OFcVwJSTCzHn7CrMv7wJq6/twRYdC3BK
B/BQBTCRx+G9rqHATjgQyQT8vJ8rj6Xu3Rty71/pa7kcwUcC4HwFHMVIYNC7EixMdvL3OX3mtBpBzJF8
Z+U3orG77OTJU0oWJAe+J8H6nMqLRGCTpdzmcRrPodm2CWB6YhIKX7JiglHbkXMM2A8rEVgC4tq2re3I
/Rw/wfZNbwJJgYTAujyX5bwGSYQJ20vi8U+dPqVDtps0bYq33npLQJ8R6TnQJ11axEucAPkLFlDw0/MT
/JevXcXWCwew4OR6zD68GAO3z0arVSNQLbwHige2Rh6fhsgyvRbSTaqKlOMrIOnoskgiCiDh8OKI/ych
gNGjx2HxkpVYsHApZs8ORPwEVgWYwUE2FLDenyqBg3+Y/KtUqRJat26tynfNmjVOi2YRnO2WVVuxSmI5
xBKK/dvJQK+FrzAyCyUGPT/BzyxkbrEy8jBu4sPjSuJd5Mw+kT/0wZl93Of2Y4afCTDb921k8jdKAlzW
rd+If/zjbWHD5GjYsJEmzPjv15Yn33+lo/g23jqE5Vd3IezSJvicWYmJJ8M16z/0cACGHPLHsMOBqhKm
nFioc/mFXNyIZVd3YMONA/oqL5OBfKvv3JfXlQSoBJjYuyHxPYnAGoF/+fEtXLx9FY++fKxTb/H/wljf
TtZBQFkJT5C5PKt60KMuj04CILi4v2v3HhfQ6FWpmtj1ZwmExnokXduuIQE5n2EDPb7UYX1VYE59PUfK
aPTkvC7LWJ9JWW4zZLCKgXU4WIsgtwlGbV+uS6VHYxv6tz97Rt/ZaCrg//vf/66enzKW8j9OovjIUyAf
2rRpAx8fH5X9fCZO3DqPxWc2I+DESozaHYjO6yag/tL+KBfaEQXmNkOOWfWQcZp4/4mVkHxsOUMAI0oh
4bASfxoC6N27P/wD5gkJrMCSJeEoWaqiEED8CBUQx0wOQmMZhwCzh4RKqW7duujVq5fKf/7W7svly5d/
klUfMaqAAmIMA+iY3xGLcgKw3p+JBsp+9kUS/BXEy3WiJ+d7+pyog6AmAAhoekD70U4Cwv2bfd6Wr77+
VmJk8wmsMmXKafKI74Xztd/fu3COPHrmw48uCBEcxPJruw0RnF2BqSL5J5yYj/HHQnU99dQiDRuCz6/V
MGD19T3YfPMwdt81k4BwJB/f7rvw5IbmBCwRcFaey1/exLlblxX4HKr74jt+j4Bz7P+ia3pcdotx7jt2
oWmPiNP1xgw6yxj/c22Ps+ts02azTVvrdAfS2N1mu+/YzcZEG8vZTcf4nefqNaRc38CTOtp9J+U8147y
2+h2jBN38NobuL/JvO1nu/XWyzbP4Rt+HF2o3YFSl+fy+FpOEMI2pQ2SEBVOg4YN8ZaAnx6MDzG7/GIn
iIvMubOhRauWmDlzpuaG9AWvR/ew5uJuzD+9HpMPzEfvrdPQbOUQVF7QDUWCWiHPnIbINL0m0k0V7z+x
ApKNLY8ko8sg0UiJ/4eXQLyhfw4C6D9gMMaOm4hwUQBBQYHyGwRoN597PoDG7YQJE+lvlzNnTpQvX169
/6hRoxEaGqrK2X0hpqRsiWw2FeOPQYf8uRiddJQTAGN/NsxEAydkzybGBERzkbfHZf2HF6qC51+Zee+X
LF2Od95+FymSp0DrVq217N9dvvnxhcp3Du/lDD0c7Uci8BPJP1vCg5mnl8l6GXyFGALOrcWCS5v1Axvr
ru/D1tuHsVdI4LCQAHsF2J9PIjgndvbRVZy+dRF3H9xTgrMenz0WHMLL8IbynN6Unpeym9l+juXX/IdI
foLFyn0e5yu9J0RuM1yiUQ3owChHjtOzU13RVPpLXXpd9phE1BE5f9TIeBo9M2W6DRtsm6zHEMHmY3g+
TcvkOiznfTOUY+zPbffr8xxtQ8OHoyr/OVlr8xYt8N5772kXH+P91GnTIFaCOEibIyPqNW2IWbNmaXKY
ivDZV8+x/9ZJLDi7Eb5Hl2LITl+0XTsKNZf0Rul57fGFXxNkny2xvxBA6smVkVzkfzJRAIlHi/cfYQgg
/rA/BwEMHzFaSGAQfOcEYP6CJfCd64saNWpoVx/DAX4shGTAffb9Z86cma8A68Cfvn37arjEfBqfMc9F
noXnsuLUSOwSSSvGMQH/FQKg92fGn4kGXoj9kMxC9hEPH3me6v9wYSjAEIDTexcsVAQfRI8OvuxzS0KH
/3Sh2nj43VMd27/z7nHNEZAI5gvY511Yh4Dza+AvhMBJPEMlDKAK4MSe6yUUIAnsvnMC+++dwZEH53Dk
ntjNM7j3+IEOTvruxXf6th6/P0jVQyBQ6tODc+AOu9kotdlnTgAyhtbsvHhLZtkpsZmp53FKbGbX9c06
5zyCj3Xp1ZnpJ6A5r4Iryy/HeB6n5eY+B++YcQE7VBnw6z0q06VdtqnH5f6YpacX5vl88cf0AuzSdqgk
qFB4Dtu0XYY01iOpMRTgNmU8SYBfa2rZshXefucdBT+7+Rj7fx4vFlJnS4/K9atj+ozpek2Cn2HRJVFP
S85vReDJVRizLwhdN01Cg2UDUWF+FxQObIHcvg2QaWYtpJ9aDakmifyfUB5Jx5ZFotES/48shQRCAAmG
/TnGAVSuUg1Dho7E+AlThAAWYZaPH2bO8lGpz+4+tcSJFPwc818gfwGO+9cu0okTJ6o64zyP3hYmzR88
eMBkIH8MdgeSANglH6UEwMYYVzD2Z8af3r+8WBvxfmtl/YcXypl79+7rNr3/e++9r2PEu3TpqmEDP4nF
6bC//uFbPPvha/0oJrvhnn7/9a+GFHb54ZefcOubBzgiYQFH/G2Q0GClhAYLBfDzBfhhF4wtvLRFJ/Rc
eXWXKoFNNw5i+80j2H3tKK7eu6kkxdCGbKyyXwiAk5RyIA+7yNhXztl0bIKM8bNNnhGsGvuLR2Vsz7Uh
CDMcmvuszzJu27pc0xh32+5CxvW6do6RIAhonmvBe+Agu+f2urL8ljRYx5IMTeN57Sp02j5suvV4Lywj
OfC6JCpuK6HINudwJDnzQ6sffPC+kLUAnwk/IYCY4vlTZk2HkrXKY+TEMS7PT/A/+fY5Nl7dj9DT6zD1
UDj6bp2JFmuGo9qiHigR0hb5/Jsiq09dpJ9RA6mnVEaKiRWRYkIFJB4r8p8EMEoIYMSfhwBiJIgtMn6c
kMAoBASGIiQ0XEKCyahSpaqOh7Bv/DFf8sUXX6BixYpCqC0xfPhwLFy4UJPjr1qYSPXz89sqm3TIDMv/
KyEA5T9ZhY0z659PrIZYNwHAy9+q+o2FgCWo9f12AT5zBA8fCZifUc1AfphqroEjnBPg/pOHOPf4Gk4+
uqyJueMPL2lszll3zjy+iptfPxByMJOE/Nby7Idv9C0/zuy7XYiAff+M+zmv/+LL21QBcL3k8nasuLxD
YtSdOHntnGb0eZ/sw2eX3i9y7wxZKNfpFZn9pjQnEVDuc5sPPKU+JT7VAV+DpYTmOUyUsh4/hUZ1wDqm
R8AkUZk/YHjA85ldNyHDWZXx7BlgOMFeFW1PzPQoRLRhQouI9ng/5y+YNaU9y5nl53VoTOBpKMGwQMq1
rdOmjoYF0r6GELJmPfbgsLeGQ3jffvttpEuXVqfwYsb/83gxkSJLGhSpXhrdR/TVAWGsT/Dz733swQXM
P7sec44vw/Ddc9Fhw1jUWdoPZed3REHx/jnnGO+fbno1pJxcSQkg2TiR/w4BJBhZ0hDA8D8HAXyQ4FPU
b9AQI0aOxaQp0yWeD8f06bMxevR4nfGYhMlcSb58+TTuZ5//wIEDdXQkx8W8auH7ImPHjkW3bt2YNGM+
ju8H/FeSgLbrz13+1xUQDyaQ3ReCmkChd7TxMb0mJTJlDL0lk4Wmr/+B9gpw/95988mr9Rs26vx+adKm
Q/PmzXHpyiXsvHQYSy4KKC9twzIBJfv+117bpyP3dt4x/fZnn1zTxN/3Hh/P9Lbwyzr3XzzB6S+vYq9O
531UP7u16toelf+ceXfx+c04dO2UhiQctWc9Pv+/HJlIQNJT0ssTGAQxs/AEIjPyJAWC08bTjJsJMta3
L/LQ6xNolPosP3qMXXF82cf0/xOobJugZdsEHo+zPZPxN/3vrjbFeI7tEWAXoInhqRKc+xHJTq/Pc819
Uh2Ye2FbWpcKRo5RDbAOjefYdklAnJ6tQ8cOOraf4/qZ6edDTM+fJFMqFKpWCq0GdsaydSsV/Pz7E/w3
n9+X33YLgk6twfj989B9y2Q0XjkIlRZ2RdHg1sjj1xhZfOogo3j/tNOqIsUUkf8TKyDp+LIOAZSKUAAS
BngubyQBpImFBMkSY9z4SRg9ZjwCAubBPyAY4yQkqFGjJmf84cdAdLhv48aNNe5nvoTPgCe+7MLfn70p
ffr0QSM5x8fXt7kU8+UgdgNynE6UEQAbIgGwYV4gg1hRsXrPnz8/ImvXQoDzxtivzywvuwDZ76/ejp5G
vJLdZjmNHp5Tfj9+bN74q1evId76B+f4y6zv+e84vg++x5Zh2tFFOpHGtOOLMOPEEvicWo6Ac6vBj2YS
tBsEwJzHj4N3OC6APQG/tTCk4Fj/ow8v6nTeO25LaHB9P5ZfEs9/bLs+tAQ9H1z+ITj/Hv8PBAplu5HP
Rr4roBR8R/XlFx6z8tzKeoKeX9Hhmvu2jaMSLliwaReblGsdKWP7HBBE+a115Bo8xld/KftNG2b0HgHP
Y/v3R4wipOzn/bJttmXuR+5DzmebjOVZl5JfB27xvpxt1yw+ctyew7Y4MUsfeUgZ87Orj7Kf7/V/Fjcm
EmZIji8qF0ODvq3huyRYPZgF/3c//YDN1w9i3qm1mHF4IfrvnIVW60aixtLeKBXWHvkDmiGHb31k8qmN
tDMk9p9SBSlEASSdWA5JLAGMKYVEJACqgD8JAUTPEAefJIqFVq3bYsyYcQLuOQgOmY+Jk6dj2LAR2t1X
oUIFBX/v3r1FHUzX3A2fPW8Lu8/Dw8MxYsQI7VZlvqBOnTr75RAVOh11lI4DYENkFL5ymEAsoxgVQC35
w7rSknfu3DYy8pTJJvNBPSwPDR9omj5EsnYfFUjjAJV7EuP8S7zygYOHET9+QiRLnkI/7LFt53bM2bkQ
vXbOQPcd09Bj5zT03DUdvffMQr99vhh60B9jOZ7/5BIEnV+HRVc4mm+/TuXNiTw5JuC3xg1wYT0OItLp
u24dw5oLO7Fk7zpcFc/FGJdSn16M981EGsHAbYKJHpEZfHpOlqvH5P9dgHLggMTysk0PTa9OcBFs9K48
j56XoDSgNcNz2ebhw6bP3h2srEewKyFIW2xfyxywcq0qQK7BezNtsReC+QGHbKSMZMFyW6axvvN3YRmH
9vJc3jPXWrZ3j7bPhB8/zDpgwAAzvNfp5qN9Hj8m4qVNglwVCqFuzxYYFjQRx86e1AFQBD+Xkw8va9w/
5/hyjNjjj44bx6P+ygEoH94ZRea1Qh5/8f6+dZBhZk2knl4VKSX+Tzmponh/EkBECKAq4E9EAP/MHB+f
ZoiPNOnTCLh9MFnCgOB58zFr9lxMmTZLx03QCP4pU6ZoNy1Vs7eFSnTVqlUYP368hl+1atXSV6lz5879
nThMEgDlf5QOBSYB2AQgCYBDDvNLPMfMoy705HyI+CCSuTj+n0kfzgWgLwaJ8ft83Nd3BMSYvGBdAuvW
rbvazuDBQ+VuoiFL5qzKgiGrFqL1mpGot3oQ6qwZhHpraYPRcMNQNN40Aq22jdXPbfXeOwtDDwVhyqlF
CDi/Vqf2Zv//wYfncPX5XXz148vdJ57Lj7/8pKMKj9w9h7VndmLx9tVCAFfVGCMz8UXQ2tiZHp9Ex/iY
gCLobZmR8wbkliC4zzCB9VlHu97YjhzXclmzDl+g4ZrDa9mejctJGrZNHd0na7ZFItC2xEgcVokQ+DzO
c5SAjhgiIoi5JrDZFutz36gEc54hNhKZITMqBf6/v/3uBQZIbPreu+/qUFV2VxH8n8aNgTjpEiNr2S9Q
s1tT9PIdgfWHjYKy4L8vv+0SSv8TqzHhQAh6bJ2KJquHosrinigR1hZ5A5sg+5z6yKzevzpSTa0iBCDy
f1J5JJ1QHompAMZRAQgBiAJQApAwwHN5Ewngk2wJESNbEiRImxT9+o3G5MmTMGdOgA4OmjptNoYPH6VS
nuAnuBkme1uoCPhW7eTJkxn36yChUqVK6YhB/i0qV67cRar9W96f5rXQzdiY++i/VGI5njx5cl7WOCYP
yLZt2/TG+PovuyxWc8qolauwYuUKrFhhjHKe5RzYsp7vjktdJodu3bojrPYCN27eRo6cuUQBJED+/AUw
f/58DAmfjBILO6D4og4oIVZySSeUXNoZJZd3QfmVPVB5TW/U3jAQjbYMR5sdE8wsv840X/xi79KrO3Sa
L/bjc2qvF78jUfjoqyfYe+4wQtYscr2YxG8ScPvMubOmTMIb7ddnGHOJw19Pq1pg/79N3jHMYeJPQx5N
9l3R6c3Onz+nYQTPZV0mcuzsR2yLgz1Yn2qK7fB6DJP0fDFm3pkTICD1Hi4xlLrkSjBySnW2xXN5X5pD
kG0et8k+3hPLGMvb8Qjc5nG9trSjicoL5zURyP8XE58jR43Ep59+qt1VnM2H4/s/E/DHSpMQmUrnQeXO
DdB11hDM3RKOe4/uK/iZ8P3h55+w9dohBB5fhaBjK7Hi+BZM2TEPnVaPRenQ9igg0j+nX0Nk9q2LDLNq
IA29/zSR/0IAySZJ/D+xvAkB3Agg0UgzHsBzeRMJIEaOpIibJyWS5kqHUmXKYeas2RIGzEVgYAgmTpyK
KVNn6Ui/xYsXa07M28IQlCqMjpEjAxs2bKhvCRL87D3gS1aiAk5K1X8L/DSvhW5mFQBzABwByExjpkcP
Hz2nV+L4ZAKbAF+2bJn+J9h1sWDBAoSFhmG+rBcsCNcyHmMdEgLPYax6/Ybp4/fxmYO///0tfVmiZcsW
mOI/E+WDOiJHcGPkCBELbayfzsq1oJl+3iv/4tYovLQ9SqzojHKre6D6hv5KBO12TdDJPkYcDcaMU+Zd
/+XXdoJz/XOiDyYK2SX4qoVdfFevX8OS1csV/ByuSiMo6Clthlwz8QSxgIcxupYLaOjN6XXpTVmP5fSq
LGci0KgAk7xjuXp0aZdgpTJgfSoGhlIaKojxHKMkTqlHtl5dFYfbMTPgRzw6vb20r6EY25DjLKdRObAu
ey14TBWDrHkvbJven8b2uU9SoBwdM3YsPvzwQ52/L2fOnGYqbwF/jFTxkbZkDpTtWBudZg7E2FW+OHr9
rAv8XM48uorAY6sQeHglnn77XHNFzBEx93Pk7An4bZUwb8l4tF40BGUC2knsL9J/cmUk4+g/8f5JnBxA
EhLAWBMCqAr4kxBA3LwpkaRABqQpnh25C+bFhAlT1fNTAcyY6YOJk6aJw1ugObNXLfxbMjHIBCFfsipT
poyCn/kXdiE6XYnsDfCG4V81r4VuRgKwb/99Khb3wYMH5SVO+WnJkiWgLVq0SAHP4Yrz5s1DUFAQAgID
hOECxYIk3pmn5WFhYVJ3oZ6zfPky8TAXcf/+I/z448+oX78hPvroY2TKnAVjx4xFb58RSOdXy1hAbaQP
rIP0QeIhQuojU2hDnf4rZ3hT5F7UEgWWtkHxlZ1Qfk0P1NhoJv1ov2uivvE3+ug8zDq9DGEXN2q/P8f5
n3t6Xb+w6/mdfS4kAD6cVCo3b93UHADDFAMkA0YLFoKW4OIx7hPUBA7rmFDgiAKYoCOoSAq2S81IbWe8
gJJBxLTebFMJQs63eQDG9SxTAEv7OhqPMygRzGKWVCyIuU/vzdjegpnXp7HM5hgYCvD6vBe7b44fVKXB
XpBRo0bpiyoEPweqZBHv/2mcGPg0eRykLJoFRVtXQeupvTFi+QwsObYJ33z3rQv8T7/7CotPb8Ki4xtc
MzuxZ+iakCxVE3/ba0K0TB7fEKKlatp38hACti3CuLVz0X7+cBSc2RiJxfOrMQcwygkD/iQEkLhgBqQu
ng3ZKxREiapl0KVrd8yZK9gIDhWczBNyHY95IfO1B83bQlXI0YDMvTRp0kR7C9hlyL8F1RhfHaZxTEGJ
EiU4bNYbjl9pXgvdjATAuILjAKgCPhMPPjBsfpgCnq8oBgfPU7D7+/vDb66fvuZpjX2ZAQEBSgohIaFK
FCSM5cuXiwe4h3/98i952I4gYaIk2vVXqUIFjJ86EdVndUCKOdWRfG51pBBL6VcDqQLEgmrqZ77TzauL
9GGc+LMRspEIFrdEweXtUGJVF1RY2ws1Nw1Ek20j9bv8/Q/4YvyxMMw5s0KH+7Lff/fdE14They6pMdn
IoYPJLdJCPT2lOr0+PTQBCuls+lfv2CkvhjHAVCys77KaqnD47p2pLeR/qZfn8e0HTGV7irFKcn5sVQT
IvA8K/1pbJd9/Lae3sN5XsP0rqiUl32ey2twn8fMuezvpwIw32BQY7msVYUIsXCbsp9AHTNmjCb8mO1n
vM8Zaj6N8zk+EfAnK5QJ+ZuXR6PxXTBs2XTM2rUAlx/dcIGfy/Yrh7Dm9A7XmA9KWR5nboW/E39fftaM
xtCK5fzduaYC099eALD9yF74bAjDyGWz0DJoIPJMqIMEQ72MAxh3FdHGXH+t5kkAqUtlR/aKBVCkTjlU
b1UPnbp2gc8cf/iKUQWMGz8R4ydM1mSz58IeNf8Af30bsEWLFtpb4A5+O5qQa5JA+vTpt8tp3nD8SvNa
6GYkAL4FyDCAs49+6Ofvv5yAJ7AJcAKdDOUz20dkCuObWZg9e7aWWRIIDAoUljMqgF0Y9DaM+7lMnTYD
0aP/E1n4ea/uPTBw0nDtBko4qyIS+lRCIt/KSDynChL7VUUS/2pIGiCkECxkEFIbaULrIG1YfWQMb4js
i4QIlrRGwRXtUVKIoNLa3qizaRBabBuNrnumYtABP0w6vgD+Z1friD9+xpsTgPB9ga+dRCEJgD86E5f0
TnwAqQL4EBIcVnoTTMYTn1LA0OMT5ASbTdCRJLjN0ODs2XOqBggyBbPUZXvsl6eC4Pncp/fXenKuBSUJ
h+2xnN6Zvx3vg3XNtUyy8MwZIQgBPOvSw7MOSYDtqDJx6tn69nrc1+uK8f9EcuFn1wj+d95+Wz0L+/lz
5syBGPFj4+NkscSrpUfuJqVRe3Q79Fs8EZO3z8OWywf0N+RCkJ9/cA07Lh50jQ2xxMDflMqHvxd/G96j
JTrmSSiFafaVcW5zMBT3SQq2e3nf0YPanvvy4bgrAkJRAa/Rxu0xb7PaJVvlAihctywqt6yDln06YvDI
YeIsgzBz5hxRxgswfYYPRo0epyGx+0JCIF5sdx9nVvpCQi/G/JwunMDn+wN8sYhrkoCUczSdNxy/0rwW
uhkJgN0KVAFvyx/qk7lz535LcBPktJmzZupbXjNm0GZoooL7JAQfH0MCAf4SEggJUDHMF/Vw7doNPP7y
CR49+hIlSpZC3Nix8UXuPBg5cgQaT+iKBNPLI/7M8kgwuwIS+AoR+JrPffHDH4n9qyBJoBCBkECyeTWR
KlSIIEwUQXgDZF7YBDmXNEfeZa1RWIig1OquqLKuN+ptHIRW28ei+57pGHYoAFOOhyPw3BosvrRVh/zy
O36cy+/5t19rbEoCUA8k3oivuPLh48N6hp7X8dgW8ASNAlZIgcTAegQRAUcSYD312lLOxJo+7GI8h+cS
tJr8k7aUCMR4Pq9BGa9tyj7rkgQMMRgvzmOGJMw+29awQMvMy0UG4M43GOU8JSYSlOyrx9f2OU/ACb0H
AnbChAn4WDw/Zb/284sCiJUwDv6ZNCYSFEiL7I2Ko/KwZugaNhITtoozOLIc974yDz6B/uSbZzh69bR6
fJIJ12yXAOewYpINiY9fNtLuSTHu856sIuGaSVP+DlRWJAESAv8u1xlCyN/Ec3kTCaCQgL9Sqzpo3qs9
+o8fihkBPuLVA7EgfKk4RXFIogKGDhsNH18/5wxoD8rSpUsxbtw4dOjQAdWrV0fBggX1q8n0/HxrkC8Q
xY/Hl4niKwmQEJImSYqyZctWkya8YdmreS30MEsCb4mUr0/QE+gzphuwM4M5ZeoU7caYKjZt2jQtnyXE
QEXg6+uoAFENwfOCsXDhIgUWl02bt4Kz/VD+s09z4Mgh+GJyfcSbVhbxZpRD/FnlEW+2kIFvBcSfI0Qg
JJDQT4ggoCoSB1VD4mBDBClCayF1mKiBBaIGFjZEloWNkWtxc3yxtDWKruiAsqu7ofr6fmiwcRjabh+P
3ntmYuShIEw7sRjzzq/Tr/ZsvHEAB++cwbHLZ3SWXcapt27dVkVAYBBQBoxnFEDuXpoPa4S3N2BXj+uA
kevz8iDbIcM8znMNKM05xtM7SkKMx9TkXK55XZaTFNi2BS6PM8ZnmxbgVq0QVCQN6+GVXKSe1pFtGq/J
e+f9cCKT2T4+Om8/PQqlJl/soef/Z5IYiPdFamRuUARlBjdC64CBGLlpDqbumY8d182YMAKdKur6/VsK
eHZdWc/P35AvHPG3s6pDcxNiLOM9M9dhBlIdMGMc3MiBvxHzBewNIdGRCDyXD8deRrTREga8RvMkgIqt
aqNJr7boPXYgpgbMwoIVi8GXxfhOQFBwGAICQzBy1Hg1DvLh78deMuKJ3X2cD5BvBzIES5UylQKdoLev
EbsTAMOAHDlzLpDLesOxV/Na6MVIAn8TYE8gwHlz7I+kTZo0yWXcVyIQUiBJqBKQB4oTP/pLLMNcwLbt
e9SrcuHIKA79JbNxYEO3UX0Rf3JZxJ5aGrGnl0GcmWURd1Y5xPUpj7hzKiCekEACf5qEBoFCAmJJgqoj
6TxRAyE1kSKstpBAPaSb74QFoghyCxEwUchvA5Zb1Q011vVDk83D0X77BPTdO0s/1jnrxFKEnN+gfdUL
D69D4Ir5mqTi21YkAD509NIan4rnYfzKmJVrSnp2s/GTZXpMtunVtYtOzuG+dgnS+zs5AioAlrG+xu8C
Dta/fOmy0xVIpXBe61olQNnL+9B6Uq7vF4gRDPrOgJynxCJxPk3zAXIugX3xgtmmad5BwERAcs3whGWE
aXBwMD777DMd3sshqnwfgy+zfJj4c8TJmxLp6xRAsf510WhuLwxYMw2T94Qi5PgaPP72mYKfeYPHT7+k
DBDPb0ay8YHmPXCcAn8XkqEhK0OMeg+8T+YnHGKyx1iPRnJQkiBxCBmQQPibeC6GAEQFvEYbt9sMa7dL
YwF/rzEDMdl/BkKWhWPbnh24ffcOduzYJapYFPGCxYKZGRLnj8CePWbkJZ0sM/7s7uO0YPxb8G9CUibg
zUQi5jNinEfAPQzImjXrObmsNwx7Na+FrzIB9HGCm2Dnq4q08SIXOTKJsnHipIl6bMrkCBKw+QCjAgLk
D3gCDx89kRDgKSpUqKSzoxQoUJAfPdCYUsEvFschgDizhASEAOKJCog3tyLi+9EqIX6AqIHAKkgYLCHB
PJJATSQLFRIQNZAqrBbSzq+LDEIEmYUIcggR8AOhBZe2RYnlnVBxdU+dTrzZ5hHovGMSBu7zxbjDIZh5
bAlm71mIMeEzFaw2SUUSIJDpdQg8hgQkCBpBTmBevyHeSSTutWsmRiW4NY8gbfCYIQLT109Ppu1ImYJS
wMjYmPW5z/MJbh7nC0M8h9cm0PVasm1JgOTBct4HjYBinRs3byg52HuxZEIw0kwCkl71mvxpgdCwUE34
cZBPrly5tJspdsK4iC7gj5UrOVLXzIsCvWqg9swu6LZsHCbsCMSUfWE4cPuUenuOUiMBWM/PhWVMeBKw
vC/eq15ftqlCbBnr8DdgqKP3JttKXkxyypq5FnaN8hjJgcqHxOC5vIkE0GvcIEwU8IcuD8fGnVtw5cY1
VUWHDx+VMGAJFi5ahpmz5+jEIVOmTlcnyRmAmfTjy0GcGThd2rTq3S34OXuQOwGwnARAFZAqVap/SdjA
acK9YtjTvBZ6s3nz5iWk9yfACXaCnjZu3FiNVew+jykJTJkq4YCTDxAVwFwAw4DLl6/Kg/GdEgG7/dKk
SYuaNWuh9+B+KDiuPmJNLaUWe0YZNRJAHB9RAb6iAuaSBMREBZAAEgRUQYKgKkgULGqAJBDCvADVgA0L
aiFdGImgAbIsYNdhE+Rd1BKFl7RFqeWdUWlVT9QVIuC3+rvumIoBu2dj6ObZ6B08GqfPnVHwc3AGwcmH
lQ8g1wScbguACCyCiTKdD7b1xiyzICMICUZ94B3Ac5uyn+Xu3tvE/W5AlboEtr7NJ20ZRcAcgdnm+ayj
9YS0CCJeQ8Ek1+C1uSZweI8EHK9Nb0oQ/iyem12z7OfnA0Xwc6BP3MTxET3RZ4iZKxlSVBNC6F4JVaa1
Q9tFwzFssw+m7BXvf2Ktq2+fWX6C/ycxLo8ff6ldjEx08l71/yPXtaGMKhXZVo8v98Ft3iO9vRKF8/uo
ApA6JBFVCHKc9836nsuHYy4h2igB4ms0TwKYEjQLYSsXYcPOzTh/5aImRLl8/Y3E+ctWSCiwWPMAAwcN
xdBhIwVL4z3i/sya9KOX59/HTh/mSQCuPEDSpByr0UIu4RXHnua10JuNGjW6ggU/Ac9XEceOHaPZ4jFj
Rjv7Qgbjx6kymKwkMMWoAM0F+GKzxDYXhQC4+PjORazYcZA1Ww60atUKXQb3RLxJpQ0BTBMVQAJwFEAk
AhAFoAQgYYCSgBBAwqCqQgLVkDikmiiB6koCycVSiCpIGVILaUL5sVDzvcBsCxoj14KmyLeoFYosaYcy
y7ug6ureqL9uMFpuGIX2q0ejuU8f7D9yUN/FJgEQ5EySnWaMLQ+gfSC5TcBbcFnPpBl1PqTyELM/n7Gt
SloBpU2AaRzuepj54JtYXDP22pZJ5PFBZ9saK7Nd2VYZLPVZz3Ut1pO1vT8d/GNB49wvt+lN2RbbYIKO
g7Q++ugjeaDiaoY5s8SanMPvg4SfIUbOpEhWLSdydCmPshNboGlof/RdPxUTd88TAgjDoZtndBo4gt8a
F2awzfgCjl/gGAiOlTDjFLjN/we3eV+8fyPrnbXs8//ONfft73X8mPw2R5gzMHVpnsuHYy7Kgyoq4DXa
2N0PnLsxy6J1y7Fx9zacvnhWh1O7L6vXbBMCCMOixSsEQxMxcCBJYLjOBMxvJebIkUOlP4FNoLu8vyUA
+ZvFjSckEN+EATYPkCFjxvnSvFcce5rXQm8m4B5pwW9AP0YHidBGio0ePRqjpYwkQCWgJDB5siYFqQJm
+8zG3oOHcevaDZ36i4N/4sSJhy/yF9Cx0LWGtUHMySURa4oHAcwW8NNeQQDxg4QEJAwgAVAJGDVQVUig
OpIHCxEwScgvBs8TNRBSxwwmChMimN8YuRc0Q4GFrVBscQeUXdYVVVf2Qq1FvVF1Wnus37FJwU9jv7T1
XDQCjyECjYC3Ht4eJxjNcdPfz4eZXp3xO4/TAzNhZz05CYDnaN++rGmsw7V52COSgwpmaU/rsR0CXMDO
NcuUjGSbbZFAOH0Y923CkOezHXoiJmQ///xzfbjoafhWn4I/waf4PEcSJKmSHVk7l0WJcU1QN7gHOq8c
ixHb5mKCEMD8Y+tw/8EDV4afxoV5E03cKZEZErIgPyYg5v9FCYhlx80gKpbZ/xd/E94n6/MYyTOCNKTs
GMlLiEDIwHP5cPQFRBspKuA1micBbD+wCyfOncLzr818F+7LjZt3MUdC46XLV2Pa9Nno1asfBokS4KQg
X7h1+VHeG+9vCMAqAHcV4J4HyJY9OycS8IpjT/Na6M0EzEcIfgW6GPsnh4uNGDFct0eOHKnGY2PHmpBA
Q4GpU51egVk4LiB48uhLAcJlnfYrQ8bMKF6sOHr27YViIxq4CCD2qwiAiUBLAAFCAIEC/kAJA4QAEgrw
mQ9QAnAsqZBCsmAhgiBDBPx0eGohgvQhdZFxXn1kDm2A7GEkguYovKgNii9qj9Lz2qH4hCZYs3OTjlCj
CmAIQNBYuW7XjLUp87nmvh4T0JuwwCTybH2V/Q6IVZY7IOdxlfeyzXIXmThSXUlC1ryOSTA6yTzKZKcN
gp2Ew3P4boCGECKx7T2znF6V57CMsxfzxRNKx3hiWbNkFQLIhFjx4xjwZ0+MxJWzIVOHUigypgGq+3dB
q2XDMGDTdAF/MCbuCMaVO9cV/Fb6c7l957a+FEYw874JbK5NCGLUiYuw2CNyzvwfWIdG8uI+wW5JgfUN
eTnnOmUkCc/lw9HnBYSiAl6jjd0VeQafY2dP4PGTlwf5cGHoNNs3UEKBVdoN2KNnHwkFhugbfvT+nCyE
Hp3gjuf2WbHfIoDUqVL/IiqCbwd6xbK7eS30tICAgJj0/qPHjFaQK/iHSyw4dBiGDTPG/eFCBjxOdcDc
wISJE1wqYK7vHNy5fQ/f/fgz1q7dgFSp0yBPnrw6QWLnvt2QemwlQwCM/6d7EAB7AdwJgOB3IwAC3xKA
IYEqSCxhgbWkQdWEBKojhRABLVVwLaQVyzBPiEAUQZaQhsgZ1gR5wpohf0BT5BlTG+Eblqn3JwmwO1AB
fvkSrl41Q1hdQ1mvmRFr2kXF5CCTf7JNIPMcbmt9KbeZe3OeKXOd44x+o3FfiUBAzbaZjGQy0F6PbViy
se1oYlDqMF+g54vaIDGxfdZneyznsnr1GgW/TfjR+8d1PP9n2RIjUYUsSN+2OL4YXgcVfNqhcXg/dFs7
Xr3/qK1+OHbZJODcB/jwHgle+0KSJR5DSmafBMR74X3obyP3bv8fLCMRWuLiOTST2+D53DdJTf4u3maK
fhMJ4NErwM8XrBjGhYWFY/GS5dobwERgr9792JevfxOO87fJPxsCeJo7AdBIADxHFEQduYxXPLub10JP
k1i/KMfoE9zDh49QwDNTOXToEB2maLaHajnJgWEBScCogImaC+ALQJcuXxOP8S8hilFy0/FRqHARtGrZ
Ei37d0DMiSUiK4DpryYAI/89CIC5ADcCSCT7LhIIJAlIWBAoRBBoiCBlYA2kDhIiEMsQXA+ZRBFkm9cA
OebWQ+ZRVeG7Yp5K3PsP7usXieiBXB5V1nyw1QvTA3NfjF5WH1r1/uYBtp6d30rQMEC26bG1XB5+4x0j
vDPb5/Zp8XAEFD0/wcz69P40lfuyb69tvSe7FDW0kPtgPfWuYlxzn11y/Dtoxlgse7bsyCaWMFliRBfw
x8ieRMCfFenaFEOeYTVRemYr1AnthbbLR6D/xukYuy0AVx7cVNDbbj5m/HlvfI+AHp7hjHpv2db7knvl
vUUogYgsvvHkDFHo3c159P6qFJz6JrwxL0fx/Qeex+Os57l8OOocoo2QMOA1micBeFt+/uVnnLt0AUtX
LEfwvFAlgBUr12DY8NHo3JVv+zXWAViU/wS0UQC/TgDuiUASQN68+UbJpbzi2d28FnqaxPWtCGp6eQKd
oGe3HecuGzRokG7TWD5smAkJWH+cWyiwc8dOJQBO/1W7dl2kSJlSpE5JdOvWFTUHtvBOAOwCtOMA3AmA
5k4AnuB3CEBNjut4AVqAEIGsU3A4sRAALWVADaQJlLAgqDYyBooi8K2NtMMrYGzYDJ0FiFOW0bvywSMw
aXzgbReV3dcH1gEbj9FLKZCl3ILaddwxej8O4aWcZS6A9Thu/4LUJTh4LsHCbb2mbFtiYH3KYZ5LoLAu
v5tok4Dc5nncJljsABO+dMUHJ2fOnOplkqRIhg8TfKbvrCeuKOBvWwy5h1RH8enNUC24K5otGYSuq8dh
5MY5uPHwjjwOZhJXLuzm43VtkpPX5j7vib+HvT7LmXzkMRIDywlqC2TG9gS41pNj7kRAAjDnO8lPKWf+
4NUEICrgNdrvIYDL169i+fpV8AsJ1NeDwxcuweo16zFm7ER06twNrVq301d8+ZafhgAJTQhAsP9eAihQ
oMDvei/Aa6GniZQPIqgt+Al6gn/ggAG6HjBAtkkGgwe5KQEbCpheAQ77vHv3gTy851C0aHFkzZYNpUuV
RqduXVB4aJ3IBOAMBKIC+FUCYC+AhwLwTgDGSABKAv6iBmStRCAEQBJI7V8TacTSza6OlMPLYdi8yQp+
5gDYHUiJzgSXla+2P57SV7dvmG0eu8p3/x3Qs76V/JS/V64Y2c8xA1QAth2uedxKZK6t5Ddy2UxQwjwA
6+rAI7bp7GsIIOewzUuU/7LNkIPymgun8Y4rD0rMWLG0m4+j/BIlTYyPEsRA7OzJkKRidpX9uYdWR5Gp
jVExoAPqL+iLdstHYtyWADx1kli2G0v7+KVtAp2qRu/9krl/3pPt2zckx+7MC3r/vCcOTFLyFONxmm2D
53Gf51LdqGJy1izXduW3JSF6Lh+OOotow4UEXqON2en9nX673Lx7Cys3roF/eDBGTxsveBkG/8AQrN+w
RcjAF+3ad0LnLhISS/zPEE0JwFEAv4cAbB5A/sbMRnrFs7t5LfQ0UQCnCWrr9fv37y/WD/36iel2fyGB
/g4JDFYSUBUw2oQCzAEwZnv+/BvxQlvl5rKhYMHCqFqlKtp164gUY8oZAphUUsAfOQRwEQDNMwRwGwwU
SQFY8LsTQECEkQDU/KoiuX81pPQX0PsLEfjJeqaQw/DS6B84RsHPyUsZBtgXVTiKkYNsCDjG51xzVOCN
GzddZZYUuE2zYGa5Hc5qz2UZ15ZY2Da3DahNfE9A8XyWcV/JhNsCKFumwBPjthIDgebEyfSWTCjxG3RM
LlFeJk6aBJ8lioUEOVMhZeVcyNS2JPKI5y86pTHK+rdFjbAeaLpoECZsDsCPP5lY33p+Jq/oxUkAvL4d
p2/BfFn2CVpLAIaUzKhIBbmcd0FATGMdvXdnFCS32aapZ+oQ/Lp22uE+tz2X6CPPCAhJAq/Pfo0A7j18
gNVb1sF/QTDGzpiEzgN6oG7D+ggMmichwFrNA3Tp2gPdu/fWj4OSABInjkwAlgTi/gYBJE2a9PvoH37I
b3l4xbQ1r4XuJsvfBdAP6fkV/AR9v/7o27ePdt9xzWGLNBIC31smUQx38gHsFeBbTefOXcR33/2AyVOm
IWmyFChcuJhOgdysW2vEHF/cRQCvVAC/RgBBsv43CCAJXygSIwEkcyy5WMq51ZF8lhwbVgodZg9UBaCz
Ft+75zzoDsAcwLHMeiaaPrhiXFMFsIzeiufxK8i2vlUGqga0zCTuFAha1/QMsK71fixn3oEekGUEBD09
gaD19JhJjlnvy+XQocMqJfmwUPazaylRksSImSQukuVJh4zV8yNnx3LIP6yWgL8Jysxtg6rBXVB/fh/4
7Vnq6uJjxp8L+/hJKAw77P3xWjZc0TBFtrnmMYYqupb61uy+DW9orG+N5/M4Px2v9aV9rm0oYOt7Lm8y
AXCI9MpNa+AbFoCxsyah6+BeqNe2MUpXKouxIv2XrViNVavXiUMdhPaiAkpIeGwIILGCmiD3JAGO3fBG
AHZAUIoUKYrIpb3i2prXQndr0KBBQiGAnyn7Ce5+AnROYEjw9+7dS6co0v3ehgioBkgUNhRg4nD58lXy
QF/U/v8ePXsjeYpUKFK0GFq2aIFaPZu9kgDizHiZAOLb4cCeBCBgf4kA5JgnAVjwq/lVcRFAsrlCAmLJ
ZlRC4uGlUHdcBx3Nxs9esSfA3eOrJxePR9C6r+27AuwpMPVFHUg5wwPrIVlu3xuwhHBNttm2JQFu2/rc
53EeYwjC85VsZJ/b2o4Y65t9oxS4HJKwi4mk2LFj6XhyxvzJU6ZAzMRxkSpvJuSsVRSFulZFsZENUGJa
c5SZ0waVgjqhdkhPLDhovvniDv5Hjx4qeC2Z2f87PTrLSUAkA0NOjqyXunbfrvl/4jnWo5Ps7DBpm1zl
uazPNUmNRMpzeIxkwDcFPZfoI4QAhgkQX6ON2WHmuLTL/UcPcPbyeSzftBrTg3wxcvo4dB7UE/XaNUGp
WhWQu+gX6NS1J9as3oC16zZj8JDhaN2mPapVq64gTuQQAAHuTgDuFokAxGweIFeuXD3lFrzi2prXQncT
UJeh9+/ff4ACnGAn6Hv26ilg7oGePXuqscwogr4YMNCoAJIAuwbXrd8gf8TLuP/wMVq3bisSNCNKliyF
Nm3boHSfeoYAJvybBOD+PkCgIYBXev9fIYCktLlCBAT/HAkLhAASDS+ByiNbqLezCsACzKxvuEICCwKa
PU6PTxDz1WKSha3HbSURxwiiq6ICeFy3Za2Al7qch8C2Z8tu3rylayv9bThBY7s35L4IGC70osnFg3B8
Pz2/axKJFEmRJl9mFKxbBuV61UfV8a1RaXY7VPTvgMpBnVEjuBvWndzhGuBjlzt37mqb9lq8N24ryPUe
zL3rvqztcW7btSWAS1KHa/1/O7kQLRez9XlM8wUCfpbpceeYza94LtFHnEa0oUICr9E8CWDx+uWYPd8f
4+dMxaDJI9Guf1fUbtsQJWsL+MsURLp8WVGteg2sWcOPr+7UuQGatWiFevUbKAFYBWAJwBsJ2HJPAihU
qFCI3IJXXFvzWuhu4sX70KMT2L3E4yvwezBO6a6vK3JNY1nPnlQDfVwqQEOB4cOxe89eeVhvyR/uMqpW
q4HcefKibNlyaNW2FXIMqoqY44QAhARivYoAbFegOwHYocAEfxQQgNocMRLAiJKoNKalfsDk0UOTCCTw
bExuH2huK2gdj0gg0JNx23wi3dSxHp0PuwUKP59OkPA4gcEyenqueT7rudq/Iu3I+QSBjbsJNO7bbcbd
XDNWZ7acsp9TeRH8TPolFyXA9/oLlSyKgvXKoOaAFmg0vTsaBfZBnZBeqC7ArxHQFUeumz5+C37G/byH
06ciJu/gPfA+6fXZpcnrWs9t67CMZntDbC+He53z58TzSx3+P1hOc6kCj7a4tiEQt/k7ey7Rh58SEJIE
Xp+N9iCASQEzMHTaGHQf0Q/NerZF1ZZ1ULxWOeQsUwDpCmRFkuypkTFzJqxaswnbduzDzFlz0Lx5KzRs
3ERBbAmA4H6VCmCZVQA0SwD58+fncEmvuLbmtdDdRowYHsTYnt6dnt4Cv2u3rujaNcIMEfRwKQElAQkb
mAc4ceI07j94hG3bd6FAgUIoXqIkKlSoiBZtWyLl8LK/SgCerwR7KoDfRQAO+CMRgADfGwEkmVlRp50u
M6KJIYDHj/Dg4QN9KK8K2OyD7/6wqsx1HlI156FXU3lrvB+lKx9me8y2xTZoKm35oAsweNy2x20FgaxZ
h2UEnms8gYCC/f+2T55xPmfwpewn+JMmT6Zfp+EQ0y49u6HB4LZo49MPneYPR9vFw9F4wQA0CRuAc7cv
y588opuP8wPwuuzKs/dh/+8KfiWAiC5Ljc3PmrEL7M5j/z7vh/fGmJ3jIPh/Yxcl6+mYBanH89gW6/KY
5hBkTdJgHe1WFGO5Na85gOEnEW2IkMBrNE8C6DKiD1r07YhaHRqjbOOqKFCtBLKVzoe0BbMicY7UiJsh
MWLGi42AoFBs37lXPx3WokVr7Q2w035xApBIBOB0CarxXYBXEID87flmkldcW/Na6G4i4w/Q+1vwE+xd
unRB5y6d0bmzmK67oEvXLkoMVAIMEzQUGDBARwKePnMBT55+heB5YRKHZhH5Xxy1a9dDs9bNkWBkKcQY
V8wQwMQSSgJKANMiXgm2BKCvBLtIoBISkAACKv3HBBAJ/FYBOARQdGg9QwASAjwWoxenh6fXVrnt8uoR
YQC3KenplfWY4+31uMp24915rnp2Oabm1KexfRq9PtcaG0sdApF1tdfAuZ69LgHJhWPnme13T/ilSJUS
MRPFQQaRmj1EvXFexmFhk9FlwSj0WT0ZnZeNRu8Vk/Dka/MFWuv5OW6AoCfYeF0SFEfiKRHy/0pVImve
l5Kgc4/8/9ltS2DctvVo2kXpnMN757bWse0457jnCWw7tj67ED2X6MNOCAhJAq/PRm83YyXsUqNDI5Rr
XgOF65RDrkqFkaF4LqTKnxmJcqZG7AyJ8GnKePg41mcYOmwUduzagyVLV6Btuw5o3aYdJ/dQAiCgbRhg
SSBeXCP7rXkSAM9LlTLVt9GiReNsXl6xTfNa6G4C4usENIHdzQE/J+/o2Kmjs+6ka5KBKgEhAZKFVQEc
6HDy1FklgHHjJugkEwUKFkbzZs3QqE1TxB5d7GUCoArwRgA+/wYBCPA9CcAF/lcRgK/YLAkBRpfCFwNr
unoBvnz8WMmAMT3zAfa7hpwngN2Ctpz73GbSkMZvCty7d1fLuM21fcXYbEv5rVtm4hHuO+fyWqzD8lu3
zOSk9pi9tmn/tp7PhYm5LEKuMWLEUM/PbqRUaVLj84SxkTpPJuSvVQrjZ0/Rt/Tm71mFPisnY+C66Zi4
JRA/eHTzfcVPeAvISGa8LomG98Jr3pS1zpjs3LPmM4SoeI82x0Fj4pPllqTcyY3n3pQ6rO95nHkN7pMw
rznDrlmuZUIuWlf2STSeS/RhxxFtsJDAazRPAihQuzRyVSmCjGXyIHWRLEiSJx3iZ5PwjOBPHRcfJo2J
D2N9Ig60G3bt3q8jAtt36IzadRqKSi4fiQDcVYA34zHWswQgKuAncQjx5Ta8YpvmtdBakSJF3hbwPySg
6d07K/g76vvKHdp3QPv27XW7Y4eO+j3zzp07KQmQLHo5KmD27Dki7y7IQ/2l7A9AxoxZUKJEKf0cUtV2
9RFjdFGvBBBHVIBXAuD0YJYA/I0lFCJIFCT2RwmACsASwJBaLgVAuysPOx9cPtw3bxpjn716ZPuwy8PJ
PIE+4CyXMtY3iiCiF4FJxFs3CaDbWs8aj1swEHgsY5vc5zG2YRWHAlGuz2mkOMKPDwdf682ZK5d6/mQp
kuPT+DGRPFc6FKxTBlV7N4bvimAlkP1Xj2Pg2mkI3rNcQe+e8GMfP2U9va3rvQf9f0UMeqL313LnGLs8
bT3r2VmP+7xf5iesMrD/H6oa22XKcps7sfs6LkDuge1Z02sJMTB/wnqeS/ShxwSEJIHXZ54EkL5MbqQs
JrF+/vSInyslYmdJghgZEuJjgj9ZTLyf+DO8H/tjNGnaHNu379YBQZ279ECDhnVQvnxtVx4gkVsY4J0E
WO4oACEBnsMkYp48eXLKbXjFN81roTUBdSyJ6V9Q+tPzE+QEfLt27VzWtm3bCCJQEuisZEHS6N2nt04b
fvbcRXnY70sb3ZE1S3aUr2A+hliyc83fTwCzf50A2BXoSQCvlP+/SQDC2gOr4pEQAHsCnjz50uUJDagF
sGIEpQWtBTvr2HI+/HxQmZ3nzDt8sAkiSngeVzJwuggJbno81ieJ2Pa41nactggEBZvTBj/W2Vb+DgQ9
PxQppI3sOXPg47ifa4IpT43iqN63OVrO6IPpm0J01p57Tx9izYntLuDbbj4SHsHPa/BavCden/etEtx5
wUgBK3W4VjA7ALXHmJOwkt+URRzXe5f/C9tyDw+0vpyrIHdCJ9Y3gOf1I8hAQwMxzyX60KOINkhI4DXa
qG1mtmu7JCogwM+bCnFyJEOMzIn1O4EfpYqD6AR/ks/wXqJP8U6sDzUntnnLDgkD9oqjHIjmLZqjWPHy
EQTwayogvvH+8eWYEkCiCAIoU6bMr74U5LXQmnjzVAQyvTplPr2+gr5NW52q2BpJgOUkAdbTUEBIg+eu
WLkKp8+clT/kDY1rcubKjUqVKqNh44bI172KIYCxv0IA7AmY6RAA7dcUgAX/bxGAAP8lAiD4LQGMLY1s
/SsqIPitNk56QSlO0CloHXAa4JoyBTbBKg+tPa4PsDzQlOp2X726cx6lrI4T4FqMD/p1AR0VhHv+wK7t
tjshMMTguHpOJNG7Vy/teenYpTOSZk2N7JUKolL3Bmg7qx/6LZ6E0Rvm4P7TR6oauND7U/rz5RTeoyYU
BVi8RoT3N96WZkBsQKpgpNfm/cgxvS9ZM2ZnEpTltq3LDnBNHXPf3CYJsA0SgR4Tz07Pb9uy13G14xCJ
LfNcog8hAbxe8yQATqf2edbE+CxzQnyUPh4+TBUb0ZML+JN+jvcSf4q343+Et2NG17cy12/YigMHj2Lk
qDGoU7chqlSV59HpCvQkAHcSiO8QQAIx9xCA51YoX76v3IZXfNO8FlqT+L8ogUyv3kG8O0FOwLdu3Rqt
WrfSmXxatWqt+22lvF37dhIOGBLo4oQC6zkG4NIVIYFzaNCgEfIXKIgqVaqifsMGyNqnPGKMEgIYIwQw
TghgghDARIcApggBTHMjAFEBLgKYIwQgJJDAIQElgEBaFBDA7Er6Jdr0fcrol4tJADQClw/eDQes9NYq
feUhZUzM4xz4Y702H14CyALeDtChmf2IcQMRZs6h8Zi26VmHXZECIqoKEgXb+Vpidr6HTyUwaNAgHYDV
pVd3lGhVFU3Gd0WfheMweuMcDFk3Ew+fPlaPb+N9Lnfv3NVRd7w3vZ60acFn79cSHsstOBXkBLHU03cV
nPMimdyrbYcA5zY9PddMdLqMwHcDv8p8R+rbRKiSgNS15Oe5RB98BNEGChBfo43aanIyduHHQT/KFA//
TB8XH6SOhQ9SCPiTfY53En2i4P9H3H/iH7GiC2CTYOOmbTh67CSmTJ2BWrVroWbNugpiqwIsAbirAEsG
SgBS7kkAJUuWnCu34RXfNK+F1uRhatStazd06thJZT7BT9C3aNkCLfkar5rZVhJwlABJwIYCO3ftkT/e
Vezbd1CAXw1FixZD9WrVUa9BPaTuVyaCAMZGEECsyW4EYFWAGwHQErgRABOBv0UALvD/HgIYVwap+pTC
LYnR6f1p9JB8+PShdmSpkcRmhJ4FBUHCbQLY5gZYTo/FugoiWbOM3l8fdqc+CUXXctx4PMbGFhCXdaSh
koC2EVlpkAQ4l3wL+VtwhqYRI0eiZY/2aD9rAAavmI7Jm4Nw4Y6ZD+BnB/wkAV6TXWq8H17D3q/9v9j7
oPH/yzWPEcD8P9nxCRz3wPugQuC2Abrj9d3ArPtyTW1PzqdpW47Et+Xc5u9l74vnsoyhgO0Z8FyiDz4s
ICQJvD7zJIAPBfzR04vkTxMb76eKiXeTfYa3E3+MtxOKCQG8FedDvBXzA3z08Uc6FPjo8dP61SDOk1mn
bgOkSGE+//UqFeAOfk8C4HlFihbdKLfhFd80r4XWBg4c2JGxP6U9wU2vzwesefPmkayFxCvuJECyoAqg
eth/4DCuXr+FDRu3oHTpssJIpVGjhvzn6tdF8gElhQCKaBigBMAwgCQgYUAczzDAEoCTB0jAKcLdwoBE
VgX8TgWg4PdGAD6V9XPUyXoXxyUBOuUyjSC34OPDqCBxvJ59OA0AzDH70Go9MT2uICCYZFtAQPDZ46au
mKxVQjvnUh5bicx9gsO2zbU1qoWnz57q7Ms9JRQYNmIEevbuje4TB2Fw+GQ8+/Yrlfv2bT7G/myD/e9c
0xTw6mEdoEoZ79sCku8e2H2Ck6P0uO85DsIFaqnv2ncGRrFNkgyvxXENPEbj/1nX5y/oOAJtV+qzzI47
4LZRUhFdn+5L9EGHRLYKCbxGG7nFfPPCLh9kjIP30sTEe6li4J3kn+GdpOL5HQL4R7x/ugjg7ffewYLw
xaIATmFe6ALUqlUX9Rs0RIYM6ZEk6W8TgCWByAogCScW3SW34RXfNK+F1vr27Tu+swCZXr116zYKcgV9
s+aaxbfGl3o4jTGPUyGQBEgaffr2w9HDx+XhvItly1ehaLESKFeuorBbTdSqWwtJBpZAjJFCAFQBY4t5
JwAbBrgTgJiLAPxkrWGAJYH/nACS0UgAE8oifs+COH72pIKfCsB2y927a7v12OXndMU5dveu0zUo9eiZ
uWZdynUmDXmM5fYYQWtCB5M/sKEEj9FMfXp5mpN4vGmkuJ4v9Xme6Sq8oTkLZvnHjhunvTAMByZNm4J7
j808dT/+aDz/N99+I2RkwKU9EtIW27RdekpIQla8LnsbuK8hB+9H7o8kZe7b3IsBdET4wi4+JjLtPnMd
ZtsJn3TfKB6WU9JrSCXbBD6vx3r2XqiIlKCc5CjPYbnnEn3QQUTrLyTwGs2TAN5NJ14/dQy8m1LAn1xi
/iQC/IQi/eOL9I8r4I8d3RDA++/qOJmjx09h4aKlqF2nLho3aWYGcjlhgDsBeJKALYtMADpDMD8b7hXf
NK+F1nr16hXIzH6bNuL9BdgEPwHPr5Q2adwYjRo3MttNDAnwOOsxVCBpDBo8BIdJALfuYv78hShcpBgq
SxhQtVo11KxTCwkHFnMRQEwSgM0DMBE4ySGAqQwDTB4gHs0hASUAhgG030EALvD/HgKYKNcRAth5ZC+e
SPzPngA+dJTKlLX0fASPSWCJR3a8Is16QR0B6JTzxRWWWY/Gchq9Gr2gnsN654xHtOfxuB34Yo11bfk5
5007blsjAXDUHIdiMxnLCVnd433+X5js4wCfs7w+ry1e10xFbmYVYjv8v9o2zahDuU96adbXe5BjYrx/
3gPr6/9HjnEEH9vidbjN/4vOAeDssy5NR/7JOTQ95pTrPek1Iv5vtp5rAlXZ9lyiDzwgICQJvD4bseWG
czdmsQTwTgoBfzLj/b0SwAfvYq5fgIYAS5auFAKojwYNm+iALvc8gCEBA3ZLAnbbGwFkyZKFwzu94pvm
tdBaz569wijnKe3p4QlyAr5RIwF/o0YuY5cezSoBqwKYkT5y9IQQwD39CkqhwkUF/NVRTQigRu2aiDdI
PP8IIYCRQgBjHAIY7yQCSQDMAzgEQBXwEgFYEiABuMKAKCKA3oWwbs9mFwHQA7lPrMmhrOYhNg+/Nb7i
yoeZ9exQVvugc5/lfLgJQB06K/V5jGV6vjPUVYlAiIbn6hRfsmaizg6j5b49h9scdquglm0qh507d6KT
hG8+vr76pR4ufKeB7wlwaO/ZM849sT17XactvQbLTpnpynnM7uu2M4yX9+8aouu0ofvO/XKfr+/a860R
6Czn72FBr+eeNL8VicmcK+3zfLmuvZb9PXkPnkv0gfsRrZ+QwGs0TwJ4J42An96fBODIf0sAb7kTQPR3
MWOGj4YAK1etRV2J/+vVa4h8+Qu4JgbxDAM8CSBhgoQvEUDmzJkplbzim+a10JrE8Cvpya33N+BvpJ8s
atCwARo0iDCW8zhJwOYDBg0arAqA0x/P9QtEYSGAatVqKAFUrVUdcQcJ+EcUVhUQc7STCHRUgCGAyHkA
FwHMrqDfC3QRgIQBSgD+QgAkAQH8f0wAvpWRZFI5xO9TGCt2rtdBQCQAymR6YCtPmZwjSOnVbfxLktAY
XwexmO4w1mG59f7c1q4y8bTcVkIRU8BLuWnTevuIJBmvwbVtx06Qqa/J6hyExkPzPmhPnz7TLzgzIciF
yoDv8SvZSD3G8/b+bJuqQhyCYxvmHpzrSDnVAfepCJTInHOoRDg0V8+Rff1/WI8vZj9Pbu7TtGv+D+Z3
s9fTMm3f3APP0evwus4x1rPmuUQfsE9ASBJ4ffYSAaT+XAngbcp/EkAiIYAE3glgwoRJOCYKYM3aDUoA
HC5fsFBhJQCC2UUAHiTgIgAp8ySADBkyMCbxim+a10Jr3bp120o5T69O6d9YPD/BX79BfWGnei6r70YC
TSUcIFmQBPgi0N59h3D95h34zvGTEKAo6tVviIoVKqByraqIPagQYgw3BGASgRFhQGyqAPfeAEsA+sFQ
IQCqANsbIEYCiKQCfg8BWPB7EsDk8ojftzCC1y3SLkASwP17913xuV0zLCAZMBbmmp7XjuCzcb09HlFu
6nKtA4SkDcbPjL8Zb2usL/W4T2Ay0ci6JB4dN+B2vo5LkDjdkpL2Emj//XXNWRBQu3fv1vvnNutr/CzG
GJ9A1HbZDtsWs/tsn2tLcIzT+dWfx/J7EJRKamKs7248j0k6tm3nDSApsswSoV5DrmX3XWXO9awxGcky
XpvHuWb3II+xfc9FCaDv67URmyN/tNRFAMkY/3sQABOAsYQAYnyAfwgBjBw1ThTXGaxbvxl16zVAjZp1
UKRIBAG8Kgz4NQJImzYtZyjxim+a10JrXbp0OUBPbr2/gr++AX/dOnWEpeqiTp26umY5jzMUIFlwJBMJ
YM/eg/LHvo3ZPnO0C7BmrTqoXLkKKtaojFhCAJ8PEwJgGMA8gFsYEHuCBwEwDzBDCMAhARcBOCQQmQAM
CfzHCoAE0K8Ipi3x1yQgAcRx8PSa9qEn0PRBFG9N4BDE+uDKQ2+66Ez3HB9Urvkga6JLgKAPt/PwE4xs
T9tQALLdCGDxoSeoXNdyCECP6XWcKch5bZqCzbTN8yj7DRiNerDqwr5nb81m+M22ozRkTU9LkvnuxXeq
KBhCfPvtC+PdxfPz2no9MasqeA5Jwl6X2+rVxXRbvLv1+jT1/HqerPWaRimwXBWA7Ksi4HlOGzzmubyx
BJDCEoCAP5GAnwRgewAsAXz4LoYNH6UKYMPGrYKxBoKVmihQoJi+2v0yAQjYRfIr+GWb5gI/TerynFSp
Uj3irF5yK14x7rXQWqdOnU7Qk1PW07vTyyv4Ffh19NPFxgwZuJMAz+FcAFQAV6/dwqxZvihWrCRqCqtV
rlwZ5WtUQqyBJACqACcP4BYGxNYwoCTiTGYewIQBcd1UAAnAXQUkZBjg54QBGgpEJoBIJPBbBDBF2u9f
BCPmTcHTZ88kDDAhgJXMBJ0FiunOE1ALAHS4qgMIawowWduuLZ6va33QTXsErwLHebgtcHiuloup/FYJ
TultusqsVLahAl+hZTnByZhcwwOpS6CyHtumnZX4mUlKs20TigaQ3GZMzn0aex7YfciPu8iDpLMKUQWw
Z4RxPBOcSgZijMsZu7uku7SncT+PyZoxvKkr9WSf2xzFyHJeS48xL+DUt23xuM4u7LxebNvyXKL334No
fV6vDd9kPrZql3dSWQIQ7+9OAG7y/63P31cCGDx4GI6fOItNm7frhCAcC5A3X0ElgGRJI4cBLhIg+N29
vxjrkCx4TooUKZ7I3+09uRWvGPdaaK1Dhw5nKP+t9zfgN8Dn9/x5g7XYpSfbderUNuEASaBRQz2HMwKR
AC5fvYlZs31RvERpzW7yvfRy1SogJglgqBAAVYDmASJUgBKAezJQVEBclwoQgLqHAXME/EoCbipA7D8L
AeS4EAB7KAYHT9DYmQqAHpwPnYLEARmNwDRrAZQDIIJRH2gxm7Djw8xYWN9z5/4ZefCZ0HKScQQTp7tW
MEgb9hwmxlimgJG6/HiofT+eCTrG9axHM/PlmTUBo+dJuZ2aW0Elx3kO7aScb6bptu/tm2N6zvET+v/4
6aefdV5HfjyUDxpJoFy5cvpOAUnx8JEj0j6/78+2zHUMWM092n2amc7bqcN7lzLzDQG3acB5Lj9nJttq
cm/2GD8lpvXZ1tGXPw0Wvd9uROv9em34xsjdk0oANv5/RRegJYAhQ4fJ//ccNm/ZLniqj2rVa+onwpQA
nETgSyrAzfjCkCoASwByjpz7TP5mH8iteMW410Jr7du3P2O9P+N+enmCn/34NWvUQHUxftmHxjKqApKA
5gOEMIYMGYrdew6Ih7suBDAHpUqX0RwAZwMqU7U8YvUvqATw+VATBsRkGCAqQAlgnAcBTBUCmEYC8K4C
lAAcErDJwN+rAOx0YMlpvlWRdKq0M6g4es4doRKaiUDG8ASJ8WoRHpVrAoXGWJngYRm9Or0sCYDAcxGD
rK13Y71z9MBCDLYLkOfY3gKt7xAG63LNa9t22QaJge3RWIdlrEezx5m047bWU0ISYhIi0bpyLd6raf+c
khLBRvXCmJ9Tun3wwQc6k3Dq1Knx8ccfKwnwWeAEJCRGJQ0hNF6L2wQ+iUjB7ADZkpG9V1tu7pEqgPUJ
eIfs5P55DkMO3hPvT8lNCIH7bMNz+aDvLgHh67WXCMA9AcgeACf+f4kAogsBDBECOH0eW7buEJzVQ5Uq
NYQA8isBcHo3GwYkShxZAag5qsALATz9IwRwjPG89f4W/Px0MY3Z/Oo02a5R0yEBCQdYl+cMHDgIe/Ye
ELl7FT4+c1G6TDn9KGh58SBlKpUzBDCEJCAEIGFATCcMiCVhQGyXChACcMKAuFQBJACqABKAmwp4iQDE
3MHvTgDuswEr+C0ByDoF19MrIcmQkmg9tY8ZXCPGBJ8FJaU5Y3MFvRCClfo8zgfT1mPMzgQY63DbPuwE
Gsso51lmwc0cAKW/HTeghCBt0QyoKcsj4mOqAYJFryXnEdxsy92MCnFIQ+ra67FNS0bcZ5ebPc45DjhS
kHM60PPzTUPOMZAyZUqdZozfFiAJcJ4IjjHg/RjlYIBrjQBmm6oEdNuDAJzjhgDctuUe9Bypo12Csk2V
Yu5Z9qUO79Nz+aDvTkTr9Xpt2MbI7yh47QGQ+F8JwIn/LQGMGDFaFQAJoGbN2jpmJm++fDqxq7dEoDsJ
2H1LAKzLc+RvxhDgXbkVrxj3WmitXbt2e0kA7PIj41Pq09sT8Hz11N2UBOQY69h8wICBA7Fj5155+K4o
AZQtV16URCOVkKUrlEXsfgL+wUYFsDcgJsMAHRTkEACTgaIC4jjJwLhUAQwDpjthgJJAeUMADANoDANI
An4kAEMC7h8Esd8DMN8EEJO1fg9grphfDaSaWwMpZsg5w0qh7pj2OiswPxHGDDu7u1wDd8T04RZvpKAi
mPjg84F1HlA+sKxHMFivRo+rqoBlUoemyS2CUB50SnId4OOAk2AwYHEkvOyzzIBM2pTzWE5jPQskHbwj
x6xH53m8pgWXbYfH6am5zTVHGnIqsEFC3h9E/wBZsmbhO+UcUIKPPvkYn38eQz8wwofr/fff1w+/fPf9
d3pN9dYEq7SpAJZ75nX4f+I9cG237b6u5bqczUjv0yEDVQ88X/a5rfusL2UMGXgtz+WDPjsEhK/XXiIA
VwLQgwDcEoBvfSYE8ME74JeBb9y8g02bt2l3eeXKVZE7dx4lgEhhQGIzKtCbEfyWAHhOmjRpHgoB/E1u
xSvGvRZaEwLYzIRe/Xr1Vd4b719NAV+lShVN5lmroiRQTevUqlVbSWDQoEH6jvPZc5fgOycA5StUFGXQ
GOUkBChdrgzi9BbwD6IKMHmAmAwD7KCgMU4YwN4ARwXEncIwwJAAVYASgBMKJHRIINFcA36a8fgRnwTj
14D0i0D+1dX4RSD9IIhYKpoQQBq/mkg9sxpSjCyLaqNaag6AYQAVgPWoBJ/1yvSsLKcR7FQD9Mg8pkCk
vJe6NJYT2PTw1pvRc7OuecHFqAjWY2KP4YElDnuu3oPsExjc5ngDrlmP17f3wXZUKgtJcF/bk2MaOhBk
AkwlBYesTktdnQDl8WMd90Gpnz5DevX+efPmRZx4cfHPzz7GR59/gpSpUqrXYU6Asw4HBgXiR1ECSiok
ADHeo7lPXo//B0NUlPlcW2LgmseUGKXckADzHJFJgm0yf2BCDFPuuXzQZzui9Xy95pUAbPzPBKCn/BcC
+Pun7ykBMAl47/6X2Lhpq744x7dms2fPHYkAXCrAAbs3AuBxSwDp06fnJIVe8U3zWmitbdu2yxn/U9IT
1PTwCn6CvlIlVFKrqEk9koBVAjYfwLcBd+zcJw/dRcz1D0LFSlXQsmVblCpZCiXLlELcXiSAAk4YYHoD
XGGAEoANA4wKiOuhAuKLCkggBJBAQoGEvgL+OQJ+mpBAYiGApJT7ogD4QVD9KKjzPUDX58ACaiJNQC21
tGLpxDIG1kF6HykfUwk1xrXV7j8zhdddV+afYGXmn/Gv9tmLdOe2XXPMOolAeweccMG9R4D1bJ82z7ek
wXO1j945l7G57Wa03xzgMWs6OEaM4/oJcvO2ojmXx0k+PK69FrJviYj/Bx3A42yTRJjo5BuFTPpGjx4d
6dOl17g/RcoUSCgxZ5ykCZAog0jRzKmRIHUSxI0fTx8yTkxJMlixYgV+/OFHFwGxfdtbYQjIhC0Eud6H
EKcdRmyJUAlKjpMMeG8kECUqh+zYC8JzeZzHPJcPegsIe2x7rTZsg5lY1S6R4v9XJACVAN57B1OmTJPw
6z7Wb9gsmKqsKiBTpsxImSLlywTgDfxuBMC6PEeUG0cmecU3zWuhNSGAMMby9OYENWN+slIlATtBzwE9
FcR0u2IlFwnUcEiAkxvu3rNf/ojndShwlao10Kx5K5QpXQYlSpdEvO4C/AFCAJ4qQMKAWDYXYMcEMBk4
qTTiTRHvP01CACGABCQAJYEKSCQqILEoAM3o+1VBMv9qSB4gnlyBL8bPggeKdw8SwPPz4LLWD4IG1VXL
FFQfWYIbICttbn1kGi//V1EAnMPvrvMikPW81lNRsnPNfT7EPG69Fbf50KoXE/lqpDYz2mZbPSXLtD6T
W9x35K+U0TMyFLDSV6/tHOf1uG0/onmcWXheg204Rg/K49ymR+Vxu8/2uc+sPKU3Y34SAMO2zz79zPXJ
8Jw5c2rCiesq1aqiQoNqyF+zJDKXFFmaLR3SpU+vDxyHo/KBW7Z8OZ48fYIjR47iKIccO9fhNiU775Mf
AuU92+tzm/fA46zHfVuX5zPzz33Wtb+lreO5fNBrK6J1f702dH3kAUpKAB4DgLwSwLtv67sAN27c0ZGA
ZUQlVxKHaXMvnNY9mQDanQDcScDu01iHfw8qBzmfksQrvmleC60JAQQ2aNDQSf6ZIbxVqlRGJQF8+fIV
xMq7jFMaURGQBDQ5WKM6WrdpKwpgj/wxTyM0LFxHNjVt2kLrFytZDPG7FMBnA/IbFTBYCMAzGSgqII6E
AXHGiwKQMCCuEkAZxBcFEN8hgMQzKyLxbAG+r3h8duMxocf43q+aenkDevHoAvr0wXWQYZ4Afl49MQF8
iIB9XkNkD2mEHCGNkTu0KfKENkO+oKbINaWufhyE2X8zGeZNfVAPHDyA/Qf249ChQzhy+IiuDxw8iH1S
xi6xffv36+QcagcO6DmHDh/GQamjJvX37tun9bi/d+9e3d6zd49us22ee0DO1eP79soxKWeZ08buPXvk
nH26zWP/195XgFdxbd+nLRYgSIyEJBA8gQQIlkBCFHdLsADBJTgkuAS34O7u7q6l0BapUKFeqpS662/9
99pzJ7m5GSqv6eO9//dOvv3de8+cmTt3MmvttfeRuSbH021y7GvXrmcck99/VdpeefJJrdNzlTq+v3r1
KVy+clnUjPFsfpK8p4eHxvu86UJDQ+HhUwylgsqhZUIbfcLTli1bsGzdSnQd1Q+hLWNQsVZlBAUH60rE
zEJzwdeTp06p4rjy5BU5zyf1+/ldPE89LzlX/n7jvK7IOVwxfp/8bm7je54vRzDyd/L1qad4vcS4r7zn
NeHvcCz5R50TED5ay0YAGfG/gP8h8b9JAJwN+MmDz3VhUD45m5gKCTEIwEwE0kgA9iRA4xOE+Mp6ewIQ
8uaIKUt80ywrTUtOTp5Or0ACoLRn3N9CJD+9PhN5tCZNmqBJ0yYKaiqClqIEuJQRSaBPn744d/6yAON5
7N57QIc3snsjPj4BsfXj4DdYCGC8EMBEQwW421SA53RRADPjUGyWKIA59eEtBOAtBFB8YWP4LWqKEkvE
4y8V4Av4/VeIrRTwrxKpv1a8vlh5lffx4uU7oOJm8fIE/NZEVNnWBdW2d0P17Umoub07wnb0RO0dvRGx
qw+idvVD7O4BqL9nEBruHIi4Fb3RdlY/JQCqAEp1ylh6UcMjmwk2I0HF7jnNyotnZpxNj25+Vq8rbQxv
n+n9TUVBb2d4RaPPmyqBuQZ+j3ptOQYTXzyWKgUxzdrL8fld3Id95zyOjiUwv9Oir930yvTSjPkZlpC0
+UQZgr5OnTqoXqM6PH28UKZyBdRqGokm/RMwZtlUXHnmKT2HS5cuYfqC2Yhq1xDlRAmwe5DhQrny5RFX
r54SDwmTgOX36O/Q32V47ptCijQS47M3ntXHi3O1YlOR8D3VANtkqAJRAjxvHstQCM/LLZq15E89C6cR
j9amnMg6QvGh8p8EYPP+jxcRAsidW6fMf/DhJzodOCoqVqfOMwdjEgAlvSqAUiYBZCUBewJgW+4XGRl5
U07DEt80y0rTBiYnDyIBMLPftp14fw7hVe/fTIHfuHHjDONnEgLJgSECQwHmAbjKKdc5O3LkhHj/XujY
iQnFToiNjUXpvkIA48I1DHCfFAWPyRICTImB57RYFBMC8BICKD6nIXzmNoLv/MbwXSjgXyRSf6nYMvH6
y1uh9IpWKLuqDSqsbYeAdQL69R1E2ndE8Gbx9Js7I2SreHgFfJIB+F0C+N19EbWnP2L3JqPBvsFosn8Y
Wh5KQdtDo9H+yDh0OjQe8ZtGoPvCkZr84+q9XMKbcS2BZca5RrxqJAA1NtVuOnlvF/eyntl3ApVtCXpu
Zzu+15yCHNfY34h9+Znxc+ZxDfmv5CLfaW4jedCD87hmUk8TbhI68NUkAvYWsD0/81h85Wg+gp//t2LF
vDTRV6VqVZ1/7u7toeAPaxaN1kO7oNf8FAzaNAWTDi/FmTtXdYgxHze+fMUKtElMQGlRCW5ubnLjlVY1
0LxFc5w/f15HSfI8eF48DxIiv1tDKCUoIUT5bBKjKfHN9xwExd+oJu34G7T3xPbbHEv+lDMCwkdrf5oA
7OT/44XzIk/evDh34ZLcZ/exceMW1K4TgUaNmjKJl4UA6NkdwwBH8LONSQANGjS4KKdhiW+aZaVpogAS
M+J/ATQlPgFugr9Ro0YZZhJBU1s4YOYDDhw4ouudszcgeeBgdOjYGYmiBKJiohCQJJ5/nCgAJYBIeKaJ
958aA69pcSg+qwF8Zgv4hQB854rnn98EJRY2Q6klLVBmWUvtqiu/oi0C1iSg0lqxde0RvKETqmwU0Ius
r7ktCbVE0tfe1Qt1d/VF9J4BiNs3CI0ODEWzQyPQ6nAq2h0di07HJ6DryTT0PD0d/c/MweBz8zH87HwM
3Dsdg5ZPUM//vsTITAQykWYmznQ0oNyQmkzjq3w2E1msV1DfJZjZ1kh66X6yv4JXbmDe5PysCT/bNt7g
HFNvHp+5BXO8AFWD0b1nHNcEPPfjeRD4PA8D5EbsbwKQoCNo6Dk/+/xzcHJOvfr1tV8/XLw+u/sCAgNR
tJgbylQJQO0WMWgxpDO6zx+BoVunYeLRJZh0ajkmn16BJZe24fpLt1QJLFu2DEndu2PgkMFYu2YNFi9Z
gjFjx8pNvFHPSX+ngt84fz0PGxnoedn3Ssg2njuvi+YQTDIQM9/TeAyqAseSf+QpOA1/tJZ2POssRcv+
fwcCeKJQXhR1LSohmqgyCQEWLV4qYVhN1K/fQAm1vCgrKwIwzQS/PQGwPQlA8HhMTsMS3zTLStN69+pV
hwTA7L/Kf9P7N26ioG/YsCEZBg1p8p51JAcNB6QtSWDT5q3aE3D5yjV9MjAnA3Xv3gtR0VGo0jEKbmMj
4D6+rg4L9pocA+8pcfCeVg++MxvAb1YjlBDw+89vhtILm6PM4pYov1S8vQC/4sp4BK8Web+2I0LWJ6L6
xkSEbu6O2hLDR+zog+hd/RFHOb93CJodGK6Ajz82DoknJqH76anofXYmBp6fh+EXF2LUlWWYcHUVpl5f
j9nPbEH69S2YfnIVxq2dZSMAY8UfglLlp03KEky8iU15y5tZ5b/cwLxJKbuNRJaR9GI9b3LuR3lLWasJ
MCa67CQuX7mdIYHpDbmPmhyL+xAglM/MA1Ays55Aod26bchutuF5qqwWu3HzBj6+/7FKbv7fihUrxufH
CQGEq9Rktr90SADqtIpFy6GJSEofjgGbJmPovtlIPboAE04vw9TzqzH+1BJMPL4Um87vw9ETx3HhwgW5
XbIW9pQwvqfMN6U9z4evzEUwX8Lz4DndvGXkUvg7VPbfMuQ/QwluZzvmXpjnsA8bHIsSwLCTj9SyEcCf
iP+fcMmLwIqB8puf10focTxAtWo1EBdXT8MrKwJwJIEM8IsKYzu2534Sui+Q07DEN82y0jTx/OVExv9f
RvwvoNZBPAJ03kANGtQXlsq0hg0bZIQDSgItW2DhoqU6GIhzAibKD+vUqSt69JKYOzISNVpKzD8mAp4T
IlFsUjS802LhM7UefKbV17X5S81pgjLpzVFuUWtUEKu0TEC/oj2qruyEamsTUXN9Empv6oGILUIo2/ui
3s5kNBbAN98/HK0PjULCkbHocnwSepyahr5nZmHQxXSMuLwYY6+uwOTrazHzmU1Iv7kNS27vxqrnD2DD
naPY8tJxbHnhGFZe3ompGxdol55JAPROvFl5IxNgJqDNOJ6ANyUuiYGEwc+awRZgmoRBUPP9C2IEO294
Bf+LQhxCIAQt99HQQY5lelCzrZFNJ6BvGgAX43mZYNdzIxHIe/N8mSDkmIZr157SrD778BnvM9tflctO
yY0VFxeH6PhGaDlMZP/CFAzckobBooQGHpiBQYdmYujRuRh1YiHSzq0SJbASow/Ox6Frp+RWyXyeIAu7
L5nU5PfeuHFTE3zPPGsQFYF9UwhKgW/7zHPje4Ka7fhKQuQ2kyz4XutvG3kO/jbHkn+ENSj/nTbZkQD+
hPx/omAeBfuLL76Cd959X5UyH/ASHR2TQQBZwgDbxCBHElACsMl/kwAEv8PkNCzxTbOsNE2A7ibx/7ck
AHpzM/antyfg69Wrl2nyA1hHYlASsCUGp06bronAa9dvYPr02eggBNB/QDKio6IR0SgaxcZEwmuCgH+S
gF+8P5/NX3pmE5Sd0wLl57VExYVtELwkASErOqLGqkSEremK8A09ELW5D+pvHYDGO4egxe4RaLM/FR0O
j0PXo5PR88Q0DDgzG0NEzqdcWoLxT67ElGvr1LsvuLkTK57bh7V3DmPzK8ex/ZVT2H33LPa9fgGH3riM
U29fx6V3b+Lci09h26Hd2g/PhBYf7UWw82YkAOmJeEMSyKZn4zbezGrirbjd7PbSm1iMICUo6dEU6LZ9
ecOrRxcAmHX05NyP36UAkPesf1oz/jy+gIZ10o7fSaCZQGKW3NiP3/WMzmpk5p2enskjZvtJAOXlBnMt
7oHadcN1Hcd+k4aha/owDNs2A8P3z8HAgzPRZ/9U9Nw3Cb33T0H/Q1JPIji2ECeeuyS3CdcaNBYaJQnw
2pwXRcDfz3MkgGn05qYXN43nzt+g5ypt+Jnvac88Y1xDe8/P38Xf+ayQBz87lvwjTsBp6KO1bATwB/Jf
CcA5jw6dv3uXOZNXNUyuWTMUsULIZghglQcwCcB8bxIA27E9yUNw21xOwxLfNMtK04KDg58QArjPjD7j
fwKa4Oaz/Ql2eozYuFhN6NFIBIYSaKjtmjVtps88Y/xPApg7bwE6d+mGgYOGCGHEISouGj6pYhNi4JdW
T4fflpnRFIFzWiJ4fltUXZyAmss6o87Kbohc2wv1NvZD4y0D0WLHMLTdnYqOB8Yh6bDcmMemIfnkbAyV
2H30RZGnT67CtGvrMe+ZrVh8c5d6943i3bcK2HfdPaNgP/zmFZx8+xouvS+AvC9x9ufv4v1vPsHnP3yF
r77/Bh99/JEmshiHkwDYV05vTEAZoDRubNODmR5OAS6v9NYENQHLNrypVTmIZ+YNbdzcpqS9oRlzx2Oy
64v76f4ChGdU+hokw3rdLsfgvtotKPVmFyDPh9vY5ca5DPwt9PTFfXwQGRWlff2Vq1SGm48nSlcPRHyP
Trqi8Mp9mzBk2zSMP7pYZP98DDw8Ez32TkLnXWPRaddodN09Hj12T8Kh2+cU+ParDJPo+Jgydlnad3Xy
9/FcqApIQiQqoytS3tu6N432hrH7kF192l0o+5hdqvr7pI5dgzyGY8k//Dichhx7pDb5WNbVinPT+/+O
/FcCyJsbo8eMxVtv35NrcVOcZ3PUrh0u4VndhxJAJgk83PsLAfxfdHR0sJyGJb5plpX2lpiY+DYJQOU/
h/CK/De9P0HPR1GZZpIAVUCjhkZikF2BfODBtevPYvnKNeiW1EMJgEoiql4MSo+Ihf+k+igzpQkCZrbQ
ATjVF3ZA7SVdELmqBxqs649mm4eg7faR6Lh7DLrtn4S+h0WWnpiNEacXYOz5ZUi7tBqzrm7E/Ke3YfnN
vVj73EGV8jtfOY09d8/h0OuXcOzNqzj3roDqQ5HTn76Jd776CPe/+xxf//Qdfv4tU76y0JNRLl+8eFHl
NOU/BwJx6i8lPY1A5jbTi7PrjtKUYYIm+WyhgSn9SQj8TEJhHcMA5gfMNpS2TDBS9vO4GiKwnXwXgaWf
Ke3VjO9WDyrGbfodUqdhgigCkhWTgxzae+TIEVSpWkVvDHr+GjVqoFJwEFwF/GVrVERo21j0nzpCieT5
1+5g6qmVmCjx/uiTizDo8Cwk7Z2ADjtT0XbrCLTeOBR7b5zU68TZgCx80AiVzsVLl5Tw6KlJgoZa4bgJ
kp9RTxCTEFhHI+nxurHeIAsqASMUMAmRZigKk/hILM/qd9uX/MMFhIOPPlKbdDTrYqUPk/9KAEWEAArl
Ra48uZE+f6E4mg/1EfpcOo+9AJwHQAKwygNkEkCm5zcJgGTB9mI/ixN3ldOwxDbNstLeunXr9iSz+SQA
TuOld7cHf7TEKcIyNstKAg2FBDg1+OTpc7hy9Tq28tnnffqJ1ByqXYocCxA0uAHKpTVG8MxWqDYvAeGL
uiB2RS80XZuMtluGI3HnWPTalyaeaBZGnhTAn12GKRfXYPaTm7Do6R1YcWMvNjx3GFtfPI5dL5/G/rsX
cPSNKzj91tO48t5zuPnxq+LdxYN/fR8Pvv8S3/78A379P+NZeA8rJAD2kXNhTd6sH35kPBWXI/b0ZuZN
bgMeb069keWVnlpvYNmHpMD3vHE1kSXt9ebnTSx1Shxy45v7mUqBCoPHY1vj8y294Q2w245DYBBMchwe
iyDjdxEc/Mx9SRofiorZunWr3hC0yMhIJYAy5cuiqK8HStUMRO34emgzKgnD10zBm+++he+++w7rbxzE
uNNLMPb0Ugw+Mhvd905E220j0HR9Mg4/d16vjwn+H374QX/D5Sev6Hnz+3XQj5CJgtXm2XXwEutk+1Py
mR5ePTvBLOdOwtDrY/tt1582VBL3NdWEeVxzP8eSfxhBeOSRWjYCsPf+FvL/cZc8yJU7FzZt2iL33Oc4
dvykyn8+QZtPeCb4sxFAGWsCML2/Kf+rVa/2ze9NBKJZVtqbEMDaNm3aatcevTaBbRIAQR8VGaU3VlQU
LcqmBGKkjZEPaNGiOY4eO4Uz5y7j0OHjGDpsJAYMGCzEkIQGDRsgvHczVJnRBmHpHRGzpAearRmADltS
0HPXJAyS+HPU8YWYfHYl5lwWwF/bjlXP7sPG20ew48WT2PuSePe7l3DyjWu48K4A4sOX8PKDt/D2lx/i
o28/FTn/NX745Sdd0eavFN7gHBp74fIFPCkSlI/B5lp97ILjzalSXwDGpB1fCTYC2kz4EaT0xpqsk3q2
J5BZx1duJ5lwO296PYZ67tt60xux/40MBcDvNDw8k4DGsFluZ3u+J9BYbxDTDVUf3wswt2zdoivE8Kbg
6D728ZcLKI/Cvu7wq14e1dpEoXlqF/RZPhojds/Gi++/pt785GtXMV4UwMQzyzHs2DyN/9tuGo7jt9ml
DPz444/6SrLg+XLkHj02ZfnT8nv0PYEtrybxkRxIbrRrNqJQ0Msr3xtqSghbfgN/rxKa1BuqgUQgJKj1
horgcR1L/mECwkGHH6n9LgGY8t+BAPLkySMEeR1ff/O9rp1ZsWJFwVGcvtorAHNOgKMKMMFvEgDbch/B
Ih9TZIlr0ywr7a1jp47DqQDY/2/E/w009ifQTfDXrVtXLTKyrpIAiYFtGtQ3ugc3bNiKEyfPSShwERMn
TUWfvny46EAJKZqgcY+2iJiXiAZLe6PdumHovn08huyfhQknlmHOhfVY9tRO9Ujbbh/HvjtnceTVyzjz
xtO4+q6A7qO7uPvpu7j35cf4ROT8NyLnf/nNeMz1v1J+E6JgSPD+V/dx/fXbWHN4K85duaDr8DEEoLym
KqAX4o3IV8ayBCDjWd6kBAHjVg7JNUFgxLPSziaH1TvKzW0A47p6R9O78Tg8HkHFOnpNsz2Px/iX9XzP
bjbuS2Dws2beBUAcs7By1SqNDQMCA0ROGoN8SpUro+D3qV4WQa3qIG5YPBIXD8NIAf+4Y4vx1NtG3/qL
H7+ByedWIk1sxLF0JePLrzyrcT49PgvBz3Pk0F8O6eV14PmYQ3tpPNdLcr1Yp7+bbS5fMerEzN9NM/a9
rL+f7Xgt+ZkDjq5cleNIeMH2vBb8Pl4Xx5J/iIBw4MFHapOOZJ2k9LvynwSQPw8X7gTXzPjiy28wesw4
BOsMzAitDwwIzKYA7AnANBP8pvwncQhmmaW1xLVplpX21rRp0/r2BMD43/T+JvjZl2waPysJxERnhAIz
Z84RaXMGZ89dwaw5c4UA+mP4iBQdLpzQuzOaLOmLjhtS0H/XFIw7uhhzzgnwn9yJTTcO48CL53D2NQHT
vRfx0v038eZn7+PDrx/g8++/wvci53/7Azn/e+X/5I8K4dMfvsS7X3+EFx+8gcvv38axN57E5mePYNru
JTh0+piOfDMnA12QG1FvVrmBL1y8qHEvb2gCnK/MgPP10uVLtm1i8nr23Dndxn0Ms39/Ubedv3Be+9TP
njuv+56z7XPu/Hljf9mH9eb+3MZ63V8+EzActjx79mx4enrqBBLKSFqJ0v4o4ueB4jXKIqBVGGoPboGW
8/qiz9aJGHN0IcadWoojrxhZ/a9//A4Lr27DpDMrMPLwPNx+92UFvyn7v/76awnrTuHgoUN6jmfPnZXz
uqiEcO585jmbv5fvz5w9I3ZW3/M38vxPnzmjBMLEIX87j8P35u9lOx6P+/Iz7dSp0/rKNo4l/5BDlqD8
d9rEI1lXKvoj+f9Evtzg4h/vf/CRPkI/KaknatSohapVQ5QAsigAAbdJAgp8WyigpCD16v1t8p/7tWjZ
YqWcgiWuTbOstDeRjV6tWrX6iT0AZgJQvb8QgAn+8IhwXbuMxs8kBhIEiYLtU0eNx5GjJ+UfdwULFixB
v34DkJI6Bl0Su6D3wH7ouiYVQ3bPwNQTK7H08nZsEfCdufsUnnv/Vbz92Qf4+JvP8NWP3+KnX42M898p
jP+pFD785lO8/vk9PPvxyzh37waOvHkF+167gB2vnMb6F45g4ZPbMHLrTGw6sF17ATggiIk1eiZT/lPC
UprzM98bST2jq5BSnJ/p+eihzRifPQMqd2UfKgCjb9+QvazjdtbT41PiG3kGQ/YaZshiGkMIMwRgcpEj
/NLS0lC0SFG9ATi2v3r1Giju54OiJTzhW0ukYetQ1BjUBHEzuiBh7VD03zsNY04uxqSzK7D22f0Z4dK2
28cw4fgS3HnnVfxmB34qAHp2ApbnRwVjxPnX1XNrDkR+u6mQNDxQKX9TVYq2k3rmDUxpr7LepohYR6Wk
akiVwDW9ntymakFUAPfhe8fiPFhAmHzgkVo2AhDvn03+m96fBJAnF0aIM/zkE7kf33gLXAcgNKyOTgNm
CEASsCcAWqYKMF5p9t6f7bmfhOX95BQscW2aZaWjtW7d+pPmNgKgVycBmN6foGd/smG1xQwSYHjAdmzf
Tzz+0WOndaGD9Ru2YOCgoaIAUsHHjo0cnYIx62di1sk1WHVlN/bcPoU3PrmHH8Uz87n1f7dQIXz/y4/4
9Hvx8l99hJc+fQtPvf8CzrzzNA6/fkV7Cba9fBLrXzyClc/tw/wbOzDj2kaMPrUISWtHY+nONRoCcD4+
b3jeeAQyY1l+NpJ5jN2NBB/fG7L+Sb1xeXObiT6+N+JYudFV0htxscbvchwT5MYNb8TPbK/hgph2Bdre
c5v2/8t7kg6TlgQ/F/IIkBugishIruLj7VccbqW84RcagIA2tVFtUGNETO2Ahst6o/2WFO3jH3VyEaac
X4V5Vzbjk28/1zzAxdeewTufvK/5kB9+MGJ+PiOBXpzem7+BqscMSfh7KdEJcoKXv4PEdFEUEEHLzwQz
fwPbmqTBUMnYJtdMQhiSCPdX8tCwQMILtpV23E/zDPKbSSyOxXnQfjgN2PdIbeLhrHMUHL2/ffbfTACu
XbcOn3/xpVzH6wirHa5P0AoKCs4gAJJ5BgHYFIC9ZYKf3t+Q/2K/yX1QRU7BEtOmWVY6WsdOHW9RATCe
j6sXlyH/CXQCnxNJaMww85WkQHIwcwEcSHTo0HEcPnJCn3s2evQ4JYBRo8ZixswZWLJ9DdZf3Yd9t88o
+P9uoVKgYvjwmwd4/bN7uP3xq7h07yZOvvkUDoiX3/XKGWy6cxxrnz+IpTd3Y+4zWzD1qXUYd3k5Rl5Y
hOSzc5F0YDKaLxuA+TtX6uIaDAPo0Q2ZLzJWJK8pwSmDGZdSnrO/nbE45ThvXo13ZRtfdbvsy/10u+5z
UbcRPBousD1N9mV785jmNt0u2wgAApEZdM4j4PMbcufJozcE+/ur16gBLwG/Rxkf+IdXQsX4cFQb3Bi1
pyYganESGq7rh/jtI9FrfxpGnJiPKRdWY9qFNXjlvtET8NkXnwv4xfPb+vk//exTQ4aLJCcwL8n5U5pT
4pMUKOf520z5TjPCHOMasY1eN/ls/ibuw/bG5wu2NhLayHsNHWS/jGss7c5JPV/1mNLWsTgPIgj3PlKb
cCjrcuW/J/8fL5AHzvmdheRv48cff9YEYOky5QRXkeAkIE0C2hGAYxhQtqwB/rIkBjvvz/aVK1f+/o96
AGiWlY7WsWPH5RoCkAAE0AS26f1N4FNuqoWFal2EhAUkCYYBJI4169bjwMGjOtd58uTpSgDjxk/CypUr
sfvwPuy/dQZ377+tibi/Wijrv/3pezz47gu888WHeOmTN3H9vRdw7u1ncOS1K9j7inj5O+Llnz+MFbf2
YsHT2zHjqQ2YeGUVUi8sxpCz6eh3ahZ6HJ+CxKMTEX9wDJrtGIK66YlI2zjfWJFHCIAhwKnTpyX+lThU
gMA4mDcx41bepKdtsarexASDvL90icC/bLuBDTsl+504dVLjX42B5WY+cZIhkgESPabU8btOn5HvkzbH
T57Qz2x3Sj4fO34cV8UDc7gxn9Xo4uKCSkFBmkCqWLGSgr9YOT+UqVsZlTtGosbQZqg9LQF1F3VB9Kqe
aLC+P1ptHYbu+yZqpl+H90oYcO6Vayrzf/zpxwzZz7zCgUMHdcEPnvfR48dwUs6DBMDfyrrjJ47refP8
eK76KnVHjh2TV/ksbfib+FvYzjRuYzuznr+Rx+fv42dznzNybczt3Iff71icBwoI++95pOZIABngNwf/
2Mt/if85LPsNkf7ffPsDBg8ZKrK+rKiAOjq92lEBML43CcDeHMHPfQRz78jXW+LZ3iwrHa1Nmza9MhRA
XL0MAqhjRwC1aoXq6LJaQgL8TGVAAmAYYCQCZ2PvvkPaJTh33kIMGZqCCRPTsGf3bpw8exp33nsNP/+a
dUDO7xWGCF/+8I0mBOnln//oNTz57m2cev0aDr4iXv7OaWx+/hjW3DqAJc/uxJxrm5F2ZQ3GXlyG4WcX
IPnUHPQ6Pg1dj0xC+8Nj0eZAKprtHYZGuwchblcy6m7oiWpz2mH0mhm6fNeXX36pTwnirD6u3svuOS4C
QsCqtxNPfvHyRfXklMQEOgcSUb7Sa9OjGb0B/Gx4dtbRk/M923A/evcLFw3ZzG1UCaynlDYSbVcUdAwZ
3vvgfX3+QpHCRVTuq/eXV0+fYiheoSTKR4cgpFMMQke0FPC31zEWESuSELm6J+LW90GzzYPRefdYDDo6
GxNOL8Wss2vx2VdfqOen9Gfh5CEC8MjRoxkEZp676Zn5nudtZvaZkKSHJniZyOM2njPbmgR5lseSa2fW
8xhUFfyN/KxtzmYen9dEj8Pvsikhx+KcLCDst+uR2oSDWdcq1Njf3vub8r+gEEDeXOjatZuOAOQkoIT2
HQT4DN1CshEAwU2gZyUAm+cvZ6gDkwC4X+s2rffJ11vi2d4sKx0tISGhbiYBxGmW35T/BvgF+DbjJAa+
chvbkACYOxgxMgX7DxwRZj+t6wMOH56KCRPSsEsIgKPhfvjJ6F56WGEs/82P3+H+N5/hnc8/xMsiVZ99
7w4uvPksjt8VL39HvPzzx7H+1iEsf3o35j+1FdMvr8P488uRcmYhBgvg+xydjqQjk9Hx4Di025eK5nsE
8LsGo96OgYjZ0R+RW/ugzpaeCN2UhOqrO6PSjJZIXjxWv5+DgbhAaqfOnTBt+nSsWbNGAU1y4KOzXnrl
FQU3b9YzJAR5ZfeVAkJvdMOz85Xyn+AgkHgMtmW9EoXU8aYnEAgWJRfZzviX2wnGW889h7si+3v16gV3
d/csN4q7gN8vsBQqxtVArW4NEDGqLSJnd0bEkq4IX9kN4auTELG6O6LW9kLjTclov2sU+h6cqj0vX337
tWb7TfBT+ew/eEDAf8QGdnblMgtvZPNPye+hZ2cdz5GvrKfxt9K4n3pxUT0kBm7jZ/O3mdtJCAQ92/E3
8pXe3tzXbHNKvsNQGRYKIHk3nPoKEB+hWRKAw9BfQ/7nxhMS/89LT8dnn3+F27df0PxZrdAwna9hhgD8
vxLYNDMEcDRH78/9mjRpwhvXEs/2ZlnpaJMmTczXslXL7x0JgN6fsl+BL1KGQ0xpfE9iCLcRAKcP8wEj
jP/37T8koN+HieL9GQJs27ZDF6O0Kj/8/BM+++5LfPDlfbzx4B7ufPQ6rr3zPM6+dg2HXhIv//wpbL55
BKuf2YtFT23H7Esbtf969OnFGHp8LgYcnYEeh9LQef94JOwdhZa7h6PJjsFosCMZMVv7InJLb9Te3B1h
G7uj1sauCNmQiKrrO6PKuk6otDwe5ac1xditc3WILsdlS0wFPiSDa+V7cipt3QgkJydj6rRpmshhko8L
dHChDRKCJqsEuPRcmtQSj07vf5mvzAHYPCZJwPDwYvRuso1gv/Kkbdy87Mt2BBkHB9167jZatGwJdzc3
hFSrpjcLZ/V5FC+GkkFlUaWhXPueTRE7rgNi53VF1LLuCn7Oqai9qivqCAnUXdsD9Tf2R9ttIzH66EJ8
+/13CnxzbD/nPpiSn+Cjt6b6MEhAYncBKwFL4uJ2hgOsV6AqQRjdliRDEoXRhsfJjPX5SpCTBPjbGFYR
5LwO/C5eA+O7jO8wwwSTRByLc/+dcOqz45Ha+ANZVyrKSP7Ze38SgHNujf9v335enBuwcdMW+PqVkLA6
QsO4TALIOhiIib4M8OtnA/wmAVSsGKj7StjeQL7eEs/2ZllpZa1bt778MAIwwc/RZjS+Zz3bMAdA9SAn
hE2btmHnrn0aCsyaNQ9jx03AqlVr5PDZC739qx+/hefffxXPvnsHZ+9ex6EXL2DnrRPY8MxBLL+6C+mX
NmP6uTXahz3yGCeuzELvA1PQdc8EJOxKRavtw9FsqwB+czLiNgngN/ZCnfXdEbq+G2pu6Irq6wTwazuh
8tqOCF4j8mtte1Rc0x6Ba+IRsKwNSk9tqFnzoGpVFPhcJruCXGReeMptdw8P5MuXTwnBy8tLZ2/16NFT
ftc4bN22TUMEhgovisJhFx/XszP6+SWelRuYnozejTc8k2LqDW3g4c1OUOg2eSXQzN4BrrjEVXw4uKey
AJ/m5Vsc/sHlULNZJGL7tUbDyV3QYEFPHVZdd1V31F7ZFbVWdVELExIIX5OEWFEBQ/bPFK//mwLf9Pxc
bGTPvr0amxOgPBcCjgDl+RHsJ9Xz22J0+Q2am2Bbm+dmjH6CgNW8iAH+zLheYnnx5PzM43Ab9+E2/mYC
XBWBEAjreF1MVWAqDGsCIAi3P1IbfyDrQiVWI/9M+U+V/O49DtaDOMMJ8PIurgo6ODhYQUyjRw+0IwAT
9KbZg9/0/uHh4T8eOHjgCTmsJZbtzbLSykTGT6OUdyQAev8aNWoq8I1BJyQBkZ9SzzxBg/r1dS2BHj26
C9hXY+v2PaICjmDpMvHUY8Zh4qQ0fPed0c1klh9+/lHBf0OAf+7V6zj4/DlseeYwll/ZibnnNiDt1Ar1
WkMPzkHffVORtGsCOu4YpZNVmm8egoYbBPDr+qqXi1gjHn5NV51KXG1lJ1RZ2QGVV7ZH0MoEVFoZj8AV
7RC4ktZWFxopt7INyi5vgzJLWqCkEIB3/9oo2qgCilQsjmL+xeFTwlezrrzYZOOyQgRkYw7IcHV1Rd68
+XRop7HYRl0lvpEpKVi/Yb3G0cwV0IMT2ATAocOHcVDssGzje3pd2r79+3H4yBHZdkg/XxEFwLCgceNG
Sja8vkHBQer52c9fqnJ5hLWIRsPkeLSY1gPNlvRDw9X9EC0gJ9gJ/OpyDWi1VnZB7RVd0WvHRCPZZwd+
zuXfsWsX9u7fJ98v53PokIRuB4zzOHRQ35vnxTZGiCDnLm35nsZz1/dsK9vYlu/Zjqafte1BHD12TNvw
e3gMJgCNfQ5rW14jc58jx45qApDX6ZCcg2Nx7icg7L3tkVo2ArDv+nOQ/8OHD8e9e+/jiy+/Rvv2HeW+
Kq/xPwnAKgdgksDvgZ+kUb9+fS6WYIljR7OstLKmTZs2y0oA4RnxPz0+wU85GhJSTT9zG5OAnD/AVYUG
DhyojwjftHmnqIADOjFo0uSpmDBpCl55JbPvlEN5X7//Lp564xaOvXgZ2585imUXt2PGqdUYc1hi+b0z
0XvHJHTdNhYJm0ei5YbBaLJ2AOqtFg+/qgfqrOiGsOWJqLG0E0KWCNiXJiB4aTwqLW2HikvbIkCswpLW
qLC0FcqJlV3aEmXktcwyMfNVrNSi5vCf2QjFh0fAvX1luISXhHMFD+TxLYzcHgWQz90FhT2LquclIfCf
YP+P4jBcxufMznNgDut4PbiackpqqlyDXSrrjfUCX8aNWzeNrjWqA5tnpffke66uwxCBhOpfsiTqCPHy
BiH4S/qXRGD1YF3Fp8WwzoifJbJ+5WA0Xz8Icev7IkJIsNZqA/whK+SaiFVb3gl9dqXhl19F8gvw+QxA
Fi7ZRfDSe5ue11QphtenFxZPLeemXpqeWzy5mq1e6+Q9t5te3VQ2fDXqDOOxTW/O30rFcPyE8d00/T4x
tlMFIYqE741tFjmAfgLCXlseqY3bn3W58ize35b8ezy/EECuJ3DmzFn8+MNPcg0uihOpIBiqgapVqmYh
AJp5XzkCn2bed5kEEMT7ZIV8tSWOHc2y0spSUlIKCwn8ahIAuwBNAjC9PyebkATYB015w0FA9P5MVo0T
Wbx8+XKJ+XcLCezQUGD2nHSkpU0TRj8qXwEdhfbOpx/g8t1nceDWGay7sg9zTq3DmIMLkLxzKrptFtCv
G4EWqwei4fI+iFkmHn5JV4Qt7owaCzui2sL2qLwgHkEL2qHSorYIXNAKFRa0RvmFLcVaoNwCAfuiFii1
QMDN9QUXNlegl1osJh7feJVtS5uh5OJmKDGnEXwmxKLYgDC4JQSjSMNyKFinBAqEFIdzRU/kK+2KPD6F
lBCclRBc4edfAuUrlNd/SCD/gYzlxKgSuH47vTefpsOFOHgd27ZrJypokuYQdu7epTkD5hJUIYi3Yw/A
zt27UUPCLC69zWtNyc9/PieC1KhTCxFt6qFdSnd0WTAUietSdOIOE3xRG3qj9upuNvB3RNXl7VF1WXv0
3z1VvT5lvznyj3mGVatX6zlQ/tO779lH24vde+WzvGedenfx5vy878B+qduv7VjPocH01nv27lOC27Vn
t81E9ck+tD1yLHp+vhrfZRyXx+Pv3C1tmRjm6569e0SN7JTv36OKQWSt0cZ2Po7Fue9WAeHmR2rZCMDC
+z8u8p8Te94R788ye848uSeKiqIOV/BnVwBZVcDDwW88zKV9+/Yt5LCWOHY0y8qHWYsWLa4Q1EoAEgIo
AciNyZtSwS9GIiApGN6umU4HHjF8BNLT52Hnzp1yExzCxo3bsGPnXixZulLXP1uwYKncjL/oM/iuvnwT
+26cwupLuzHtyHIM2z0L3TeORbtVQ9BkWV/ELBLQL5A4Nl0APy8elee2RdDc1qg4u6U+zaf8rJa6mlCZ
OU3FmuiyYv5zxeYZVnJeU5ScL6/zjVf/BU1RYkFjlFjIRUflPU3AX5LLj0sbv5kNUHxCDLyGh8OzXy24
dwmBq5BB0eYBKFyvjCqDAtV94FypGPKVdTMUQrGCyFXUWQmBY/AD5J9DuU4i4NpvzCOUrxCga7nzQZvF
vIopWTD+a9mqJdKmTMGGjRvV+23bvl23FRPiqFmrJsqRXOQzQ47I6Cg06NQC7Uf3Qu8lo9Bzy3h03jEG
LbcORdzGfghf1x01VzP06YwqAvzgRfEYcWCu9u/TOOKPhSMV10qIQrAS0AQqAUaQkgAIPIKW9ZTfBD5B
abYjYNVkfxOcBD0BrKQh7bjdDBm4L49N0tA6HkfeG/sa38lj8D3b8r1+pxyf+2iIJJ8dixJAz02P1Mbu
y7pUmSb/7Lw/l//KlSeXOMXe+PCj+xKC/Yqk7j3h4+Mriq6q9gCYBGCfAwgIyA58e/DTgsT7Cy5/PHr0
aG75aksMO5pl5cNMCGAhx/ZzHIBJAEwAmgqAr7xJGR6w7z+hfQIGJidj2rRp2LBhgw4bfe75F5QA+KCQ
DfI6ZeoszJw1XzPmHBJ7+NIJrL6wC1MOLsXAbVPQec1ItFjaH7Hzk1BndkdUnxmPKjNao9I0AfzUppqp
LzO9iVhjlJ7WGP7TG6GkWInpDQW8DVFihu11ttSJR6f5cZnxeQ3hmy6valx1WGyBkICYn5CB32KSgXxm
/TxpM6M+fNLiUHx8NLxT6sJrcB0U61sLHt2qqToo2iIQheuXRaEIfxQUQshPQijjhrx+hZFHCCG3W364
envAr1QJncTBWXocuEMZz386pR3/iXzKDtfrqxhYUUddhso1pqfn9WVb/sPZB0wibt8zEZ3H98PglRMx
aMdU9NgzCfG7RqHx1kHq/cPE+xP8VZdJGLS4HVIPpIvk/1mn83J8PwsHE23cvMmIuSXG5sCdw0ePaDzO
uJvvNQ8goDPjciNncUQ9PmNx5gYU0AJkgpM5AjN213hejkXAchu/g8fWfIfszzoD0LKvHOegvN8vbUkK
/My2bKfkoGQipCGEwH0ci3Mf8cI9Nj5SG7s36zTlJ8QRPCEKgCv/EvxP5BcCyJULR48ek//DT7hx45bK
doKfoLckADF70JtmAt/0/NxPwnQ+MeUPRwCaZln5MJNYvqFJAEwC2hOAgl/eU/ozTKD07927FyZMmKCj
/RhXfvvtt/j++++xfsNmHQuwact2zJ27ENNnzMXWbTtwUiTv1j07MO3AMgzcMgWdVg5HkwW9ETk7ETWn
t0OVqS1RKa05yk9ujDITG6L0pIYoObE+SkyuB18Bp28aX+vDd4qAVcx3WgP4cIXh6fVRfEY9+PA5A7Nk
22ypnyM213jmgE+6vJII5ouJGvCjkQTURCmQGKgM0uVVyMBPyMR3egP5Hjn2+BgUT42E99BwFOsfCs+k
6pozcG1ZEUUalEOhukIINXxRIMgLzqIQ8pYogjxeLsjjVgAevl4oXa6MEkFGL4oAnf9IMj2fuUewU1GR
AGgkCvbGDBicjL5Th2Pk+mlI3TcXAw/NRNd9E3S5tNiNfVFnbRJqKPjbSzjUDhOOLFHQ//jDDxmyn+HF
hk0C/kMCdoLcBrxDhwXUCkQm8Y4oOE3Pa4Ken+nNze2U7GZy0AQvicIAr2wTImDCj/sQxGzL45E4dkko
YHp6I6SgCtinZMH9eXzux+/mNoYOlgTQW7xw9w2P1BwJgEowVxGxQvmQyyUv8uTPpwR/770PdPv6DRvh
4lJIwuaaSvA0+xCAlkkAJAN70BvhAkmD+3EQmMh/zgB8XIwkkDNDge2tfoMGn8TYCCCzF8DI+hP87Pbj
+oEcoTZ61CgsXrwY++WfyokkZtm377DEm2s1H7BqzQZMmz4b8+cvls/bsGjZYoxYkYaOyyWOTe+FujM7
odqUNgie2AzlxzdEmXH1UXJcHEqMjYXPOAGfANBnfCyKT5T3tEnyfnKsrjCsNjUWXlPklc8amC4EMJNW
H95CBMVn00gENjKgKhAS8BMyMBSBoQpIBCUkJGBYoEYyYOiQLjZPwgcqCyoOko6ECz4khCF14GUSQoIQ
QouKKCqEULhuKbjU8FNCyF/OA84liiKfVyHk9ywEdx9PePv56HJdvJYkBo4F59h+hg8kBSZimT0emz4F
qeunI+3wEqQcnY9eB6cgfncqGm1JRsT6nqgh0p8Jv6BFbTHjxCqN9825/Czs0tu0ZXMGqPlK8BFopufm
q3pg2aaeXkF4MCNTf5SKQV61d0C2MUPPzyQHGr08exJ4XBIFVYHKfQE3CYAA5/FMz77PFiLsE2M7PQ9p
p4TC87SRC4/Nc3Aszr0EhEnrHqmNcSCAvO4Fkde1APIWyY88hfMjn3M+XSbv/v0H2v3ao2cveHh4avaf
IbQ9ARDkJgHQ7L09QU/Aq2OoblPf4oAFbzXlaxkC5BIzicASyzTLyt8zUQB7OLhHhwLLTcr+fioBJgVZ
z3UDuMLpyJEjBdTzJe7fpQtU2JcXX3wZa9ZuwPr1W7BpM1XAfKSnL1KymDhxIvqMH4JGc3oiYloHhEyS
+H6sSPxR9eE/Kha+qYbHLT5KQDY6El5cVXhsFLzGRcFTrNh4eZ0grxOjUWyyxO5CBl5pMSg2hQ8cESKY
TouDtygCb0dFwKcQCQmoGnAkAVUBhhIgATBJWHKRkStgQlHrmFtgnmF2YwlDJOwQQvCbIETF8x0SAe9+
YfBOqoFiHULg0TII7o0C4BZVDq61/OFatQRcA31QtIwXivh66Eq9JUv7I7CSsL9tcAdzKqmpqVi0ehkm
bU3HzOOrde2+wcfmIHH/BDTbNhgxTPyt6abgZ8y/9NI2Tfh9J8qLhbkWDkhiTE5wGVLc8Nb2HprgZOad
eQiSQIaEF1ASwAwVSACsUw9Nk30Nr22EAQSskTMwQMtjGMdnzG8jARuBmJ7eCCUMmU9Pb5KSmSwkWRnf
bySO7Ytzz/UCwrWP1MbssVit2F0I3s0F+YsU1Ccv37j5nKix3/Dk1Wui8oxnKhLIJgEQ3Px/ZxKALcZ3
AD6dLrFHR2xzvgRaAbF8YiQBjgXIWQJo165dL3p5EgBBzy82BvzE6A3KR4kNHToUc+bM0fXo+Mhrx8I+
59Vr1mPZ8lXYuGkbli9fjbnz5ss+6Rg0aCA69e6KqPHtETKuJQJHNUKpFPH4I6JRfHhdeIsVGxGBYiNF
cqeEw4OWGgH3URHwGFMXnmPFxkUqCahNIhGIpYmRBPTJQ1lJgGrAR9SAQQKGGvClUe6bRCDG/IBpCnjT
hAj8aUIK/uw+VGKQ9+li84Qg5jTWLkX/qQ3gP0EUzOhYlJLfU2pQFEr1iUDprnVQpkMYyrWqhQpNaiIw
tjoC61RFhRpBKF+1IsIjI/TxbOPHj1eVtOLwZsw5uQazL6zXUY+9D01F250j0WBzf+32q7kiEVUXJWDD
U/s15ufyYCy//vabgm7x0iUaUxOglNRM3hGgJAGaemQCTwDJ9gQnwcjE3rYdOxSQ3NdI+hmJPuYImKEn
segxbUk/Pabsz315jN0q4WWbvHK8wY6dOzO2sV57D+SV2X8zqchXo1dhjxIBj79dzsOx5OshXrjb6kdq
VgRQ2MsVhYq5oqibK2oLXj74wHCICxYuRp48+VT+04OTAAhugtxeAfCVqoDkQODT6RJ75mQ7htx8FdVN
WVRErKAYSYAqIGcJYMyYMXnqxcV9wzxApJAAewT45VwCvHPnzjrHf/qM6dgksSVX0LEqjEEPHjymF4Dr
A6xfLzf03HSsWLkWPSR0aNm6FSKSmiBgZAOUGhYDv6Hi7QeHw2tIODyH1Ibn0DpwG1ob7sPrwH2EvKbI
qxCBW2o43EcLIYwRMhAi8BgfCQ+SwERRBCYRZCMBkwgkHDDVgCoCGwnYE0G6kIADEagikHCARKAkIGrA
IAMhAnYrLmyuTzUqtaAZyrIbcl4LlJvbHIGzW6LSrJaoMr0Vqk9pjbCJbRE1rj0aju6E5iMT0XpwFzTr
nYAu/btrFyrVFEOpIxdPYuHZTVh8ZRvSzq/CoGOz0WnvWDTdMgjRIv1rr+qCkMXtsfnaQc30f/vdt3rN
+Z4gXb5yhYJpy/Zt2CwEzV4GAm/7zh0C7u3qXQnyrbKdrwQpAcj3W7ZtVWMbApP72Hf38Thb5JgcBblZ
2m3askWByvzATtm+aesWOe52PRa/m9vZjiTAROSGTRvldbPWb5Fj8Bw2yz5sv13asC3Pl9/B7Y4lXw/x
wl0FiI/QRu/OvlpxsRLFdXamd3FvfewXp/5+9tkX4BOAvb19BfgGqFXOi5kqwIjvM4FPj09na06w40N6
9IncYpyncvbs2QH8OjGSQH4xqoCcJQBa48aNrxH0fCYAk4KU/Z06GoN9pk6dquvLM6P/sMKQ4OLFC5g1
e45ckBVCAluxdOlKrF2zCf37D9BnBoQ1iUaZQTHwHRgO72QB/cAwuCeHwmNwKNwGhsJVXl2HhsFtmNhw
sZG1xYQYHElA1ACJQEmAZlMDXkoEzA1kqgHND5AE7MICX5MI2BNAIhArQSIwjc8sVDIwiMCfRKCvBhmU
EkVgPNZMgL+kNcovbo3AJW0QtCwB1Zd1ROjyrjo9t9nqZHTaMBJ9N09CyuaZGLNhJqauS8eeA/twXGJn
zsF/7s7z2Hn9GJY/tUsX70g9vRA9DkxG6+3Dtduv9qpuqCrg33H9qMb8nNfPQsVFr71i1UqNs+mVCVgC
dZuAmJ6VXtckAW7jexqBTq+rnl3e01OzDYmB9QQ4Acw6gnSHbTuNOQaCmG1IHGYbGolDFYFNQXA/VRg7
+f17lDRMj892qgikLffjd/MYjiV/jzUCwlWP1KwIwD+gLEqVNRbv4NRfFo59cXYugKoCfnpzU02TCNi1
TrDT+Jn19Pbs+SHoW7duo0/sZhc7w20m2k+cOMG523wISEkxDzEXsTxizANY4phmWfkH9ph8+QgyEBNS
ZCCO9OOkmClTpmD16tU6lZU3oFX5/PPPcfr0ae0WXL5iI+aI9KcK2LBxK9LnL8HiJSsRIRejVp1QlEsI
g1ffMKP/vV9NuA2oCVfaQFotFB0kNqSWEIGQAklA1EAGCYwSEhidSQKeJAHNDRhqwEuIQEnAJAKSgBh7
C8xEoUkEvrQMRSBEIMbeAE0A2hOBzVQRkATE6PlLCwmUW9gS5Ra1QoCAP3hZPKqu7IgwidVj1vdB861D
0XnPOF2Ce8rZlVh8aSuWX9yBq3ee1QeHclbehx9+iOtvPIc1T+/Dsus7MfnCSiQfnYkO7PbblIzINd1R
c2lHnLrzpHp79rawcKIVve46ud5Ght3Wv2/z4CQAE5QEGUmBACPoTBIwwGrIcoKZbdUri20Wb02vzTaG
x96qxu8y6gTQVAYkG2lvynvG+QwH+JnANrP7JvD5fQxBSBB8bygM43hmfsCx5O8uIOyy4pHa6F3P2M4m
s4SEGgm6GTNm4v4nD7QuOXkQ8ucXAqhaTUHNnh0aQU6jrKdzJc44mpZP5mIY2K1bN/Tt21ed7bBhwzQs
5AzOV1555VM5bDWxcmLeYoXF8orlKAFQTuTauHGji5z0N+zqY8xP8E+aNAkrxcNwEQxz2WjHwpuRq7lQ
IcycOVMIY7EAfwkWLlyqBLB02WrNCbSLF4BUrYIK0SHw6F0D7mJufaqjqFiRfvI6oAaK9K+Bosk1lQRc
Bxsk4Eo1YCMBhgTuqgaM3ACJwCCByKwkQDWQZiMBVQTsLTB7DCQsUCIQAqCRBGxE4EcjCSgZCAGYZCCv
JdM50KgJ/NOFBGwPNi27qCUqCAFUWtIWlZe31y66uut6oPHmgWi/exQGCJgJak5l5pTmS2/d1Ky9aQ++
/lxXRV5zYz/mPrkJKScXIGnfJF3UI2ZtL4Qu6YxLrz6jxGte/6+++gpr16/H7LlzdaDParnuK1avwnL5
P61aswbLJBxYsWqVtFmHjeKtWcftq9as1vpVa43Py1eKOpPjrBcSWS11S1cs033ZfqUQPl/Xi3xfJ9/B
z9yH7VjPY/D9GvluGs9j/caNUrdW263byGOutbVZi3XyPRn7ynnwM7sqeWzWsQ3P5eCR7HMB8ndfCafE
5Y/URu1kN3zW0qS58dh8PliGg6+oAvz9S6FcufKIjo5RDHHOCL06QU7jezpWevgePXroik8E/OjRoxVr
HFuzYsWKjJm0d+/eXS4vdcQCxXzETALI0RCAbEJZ4SJMdIUx/4ABA5SF+JjoY8eO6YqxVoU3JdeLI/in
z5ihicJu8uM4IIiPDFu7TmJAIYEVK9dgnnwOZhdYcEUUb1UZrj1CUITWS6xPNRTpKyZEkEkCogjsSWC4
jQRoJgmIeTJJ6KAGlASUCOzUAEnA7Da0JwIxJQJVBUIANBKBbXCRPRmwN4AjD0sJCZRd0ELjfxJA0BIh
t2Ud1PvHbeyr8r3ngTSMOrUIC57ahk23DuPwK5fwxQ9Zr+OtD1/BhtuHsezpXZh4bgX6H56BhJ2paLi+
PyKWdcOTr95QqW9m+7l4CT05gc3sOiU443D1vOr9RYbLZ/Ww0o6emNuoDJjZp9dVj2xL1tHzMoxgQtBU
CJq1t21XVSGeWT20SHoa26hqEKMCMFWG7i/fbb6nAuB+VBJGToJhBMMPCQXE2E7zAqIsODyacyZIao4l
f5J44c5LH6mN2pn9gSV9+/fD/AUL8MEHH+tn5rty584j8X1VDBk8WLt1CW5igsb3I0aMQEpKCsaOHYvJ
kyeLepiBBfMX6HB6rkVxSP4PpsoTlchRXe3EosSCxHzFCokRqzlKAOxWcBZzS09P70MpMmbMGPHgC7FX
bgA+TMOq8Mbk4pnrhbnJXEwUJnZOVFnD5cGXr1itTxFmlyAJYM+egxoTcfx8yYiKKNytCgp3r4rCPcR6
ivW2EUEGCdQwwgKSwBA7EmCC0CQBMySw7ymwEYEX1UCGIiARGGpAScCOCHw4GpBmpwqUBEwTdWCSQcm5
QgJz+XTjZig7vznKCwFUXNRaJyfVXJmIqDUS928xVuQZemwuZlxah3U3DmD78yd0hSP7wqXO9r50VrfP
vrwBw4+no8ue8Wi6eRBiVvTAc+++opN6vrXF/FzFZ8NmDrTarP31BBnfE1jaN3+UI/2OGDE2AX/ooJIC
37N7jSAjAVBqU8oTzAQgSYKEYHbbGSGFEUpQovO9AVxj1J4SgBiTj0bosENJgyBnW+6zT75DB/jIPlt3
bBcikBBE9uE2mkkS7Ha8eu2akkTrNq112XPHogTQackjNSsCmD1nji7cypF/Dx58hqDgyvAu7oPGIu0X
LVqk+FkgBEHje9YtWbJEPfxaUUeb5TfvkmtwQK4dH/PGodvmMG6WN99881156SgWI1ZJrLgYcwA52gug
8l+MXQyMMSqlpqb+QCnPjP8HHxgjmxwLM/4iTyBhg7DYdAwaPEilDeMeJhJbtGiJxYuXY8bM2ZoL2LJl
BzbIa9qUGToKrlRAGXg0r4hC3Sob1l3IgCSQoQYcSEBDAvsEoY0EbCFBBgmoGjCIoJgtLPCaaEcC9kQw
NZMIfEwziWCmEIGYEsAsw8xhx/5zmqD0PIMAKixsiaBF7VBtaQfUWZWEBhv7I2FHCvodnIYJZ5dh+fVd
2Hz7qC5rxu46+/L0ey+qMlh2bSfGn1mKvgemos2WEWixbhBefu/1LDE/u12XiBqjfKZXpWxWia9Z9k0Z
7wk4gpWemfKdGXqCi+3ZjsYMPEHLmJ4JRMpwKgmSAQmFUpy5BR6TGXzus1K+l8ehzGeowTZUIWyv3y/H
4MQnblf5L5Ke23lsHmeNGEMVhgs8FnsrONuQx+wiipGj6JydnVGyJHNdWUv+bsvg1HHxI7XUHdkJgMOb
P/vsc32/es1a5MqVW7x/Fe3ZIai5ncA+IcTL9SW5UAzVMhPpfM4k/6fMAdHBUtkx5jcLneuXX365UN6S
AKLFGAKwJ4C9AMSrFZYzzLLyIUYCYLcCYwte/ZorV648v3TpUj3JhxU+UGOH3GizZs1Sz89Yhw8YYVaT
GU4mR/iMgHnpC5A+f5HIvJ1YuWqdeIoj+kSbUv7+KF67PFw6B6FQ14eRgFj/6koCDAksSWCELSQgEXDM
gIYEZlhQF8VEDRQzw4IMRRADbyECbxKBmEkEPvKahQjEOFeAREArMbMhSgoJlJotBDCnGcqlN0fFha1R
ZXECai3rjOg1vdBiyxAk7Z2I1BPyu68IQG6JV375Ih58a9woZvno6wfYe+cM1j27HzMvrMPQI3N0wk+r
dYPx1v17GlqZI/w+/vhjBSTBRi9KyU0AEbCm7CaYSQAEN70rvawm74QIWEciMLrezKy+Id95DPXOchxu
N7z1dt2mx6a3l1eSCo+vkl3IwkgS2j5reyEQfo+c47btBgHxeFQs3MbPJAMmJ8+cP6ff2U8kNKdXcxCN
j3jOsmXK6mQox5K/q8jwjoseqVkRwBdffInvvvteR/7Fxsbp0F8+bo+g/uSTTzQxznyNOVSe/1Pmcuy9
/MPKgwcPuJDDCLF4MeYAmAR0E+M4gN9NANIsKx9iJAAmFfi00bJidV977bUhzPg/rJCxDovkJNMxzqHn
Z88B5X2NmjV00ANXteFDR+cKAUyeMhNr1m6SG2O35gPSpY7z3zkizr1hAFwShQS6BGeSAEMCkkBvGwkw
QWjLCygJ0MyQYBjHDdjUwEhRAlQDJAIxJQKSANWAPRFQEQgReJtEwKHFJhGQBGjTbETAVyEBvxmiBqY3
gP/MxkoAZYUAAtJbInhBW9RY0hF1xfs33jAAHXeM1ifvTjsvHvqZA9jx3Em8+knWQVO//PYLLr99E1tu
HcXiq9sx9uRi9Nw9CT22jcd79z/ISBCyUGUtW7lcvSxH7u0U4BLA9PRGZt2Q6AQqwcc+dY3v5bNm+W3A
NrL+BD09vbQjGWhcTjkuAJf3JAd6bXpltuOxSTQkGIYV3IfHJ9mQEDLVhEkmsp+0p7HXgeTA41FF8Hic
En30+HGkjh6t90eBggV1NiSHQrMrjeDnLErHUrCLyPAOCx6pjbEIAdjvz7Jr1x5dMIarNjNflhPl/fff
5xpk7P9vJlZdjM6Z4wD+MP6nWVY+xEwCILuUF2O80V3kiaE9HQqTgVzmisnBUaNGaZ+lCX6OeqoscVnT
XpAAAGTVSURBVFAluRAcBskBD6NGT8CUabMwZ+4CuVD7hAC24PCR47raUMkSJeBdsywKdaiEQolCACYJ
JNlIoKeNBGx5gQwSMIlASMBtiJ0a4AAiIYJMEjBCA6qBYmMdiIA5AiECb5MIlAxsRCCvxadkEoHvVE5A
qo8SQgKlZggBzGyCckIAgemtUXVRe4QuTUTs6l5os3k4+uxLw/hTS/XZh1tvHcPlt25me/IRFz/d/fwp
rHtmP6adW4PkfTMwYNdUPPjy8yyen88rmC6h2Ky5c7BwyWIsWLwIy1Ys11Bg4eLFWLJ8GZbKZ25j9p7G
Or5qe4k5l9raLFm+XF+Xyiv353HYjp/ZM2AcawUWyX6LlkicKnXmMdhW99XjLMPiZUuxaOkSPR8el9vn
L1qYYdzGY3BkIo9DQmDCcMasmTrSNHfu3AbwAyqgtACfj7/yK1kCefLn1TX1HUvBLiLD289/pDZ6R/Zn
Fn73vfF/iqtXX5eWY+Y/JwpVg4QAE+VtFzEetKKYlxiHA/+h/KdZVj7EHAkgVqy7xP7ZRj7wxuQTa9jX
z6fV9O7dW7tBuOAhhztymKPObrLNbeZEh5iYepg2fQYmT56KNWs2iNc6oF2CS5augp/EfZw771avAlw6
CQkwHPgdEija10YCA7KqATcSgYYFNjUgYYEH1UBKJhl4WhHBeAcisCMDTjxSIhDz4ezAqfVQcpoQwPRG
KCsEEDCnOYLS26DG4g6IWtEdzTcMRJed4zDy6HzMvSjS+KZI/5cu4OOvsyZQ+czCC288o4ueLryyFalH
5uvCKJ9/9YVe3x8l7mfhaEt2vVH6M1FmZtSZiKPXptdVJSDeXj2ueG+V2nwv7Wj0wKbRY+uAG1EG6qXF
Q3N/SnEjXDBlv1FHz85XJvk2qsxnOLFVY3wej+/p8akCjNzABj1XHoPv125cryv9XL1+DXPmzdWRpXy6
EY0zH5kHotfnYip5Czobq+kUzodcxXiPZy0FE0WGJ8x7pGZFACz79x/S2J8z+vbs2Wur/Xvl3XffvS8v
fPwXvX8NsVJiVOh/2P9vmmXlQ4wEQNotKsY4g10OZJ6JErdkPM2DSb87d+7omHXOBxgyZAji4+P1H8vh
jBzbnLGwYTljSWOTBMaMGYfxEyZj+oxZ2LlzH7ZsYQb5GMLrhCsJFA/2R5FWgXDpWMnICZAEmBcwSUDM
7CosSjPVgA4espEARxKaakCJQNSAEoGYjQg8HYlgrJCAkoGQAG2ChAZiBhlwBmIMfIQIfCbH6QSgkhzz
P60Rys9shopzW6FqejzqLO6Chqv7ImHrSCQfmI6pZ1Zh7fV92CXS/6WP37Bdvczy2oN31Puvub4XaSdX
YOKhxfj6O4kRKftt/fxMEk2eOkW9MxNmTLqtXLNGPTTfG551JZavXqV1Zp89PTr79pdJHfvpmahjco59
7jwOvTeTcBsFtAQy92Hf/IrVK7XPnu0JaBr3Z/zOhJ4e06Yw6NF5DuzrpyLgd6l6kDCF7aguSBD7Dx3C
vAXz0bxFC3h7e6OQi4uCnkavz7UQChYupKvoKvA9CyBPicLIW45+KGspmLhQQDj3kdqo7dmfWfjbb/+n
w37z5XP+096f8T8TfGaCl/39zBUwz8OEO3sC5HWyNG0jxtg/QIzen9n/PxwCbJpl5UOMBzSTgGSa2mJM
PAy7d+9eRvBKacqsJmf2sYuQ04Ip/ZnsU/AL6MnopvEfzTrGd02atsDosWNlv/E6QejAoWPikfZKGCEq
wM9PScC9blkUbF8xGwkUJgk45AWykIBdbsBtEEnARgSiCFQNCBF4jKhtEAHVwMOIQExJwI4MSAA030mx
KJkmBDClAUoLAVSY2RyV57VBrYUdEbO8B1quH4weuyZizHGRxE9ux3aR/ufFy3/3syERzfLVD9/g1KtX
seXGEcy7sBHppzfgm2+/0Rvhp58Nz89nC4waOwZTZ0xXCZ6+cCGmzZyBufPTkS7yetbcuZg5e5bWpy9Y
gFlzZmNO+jwJCRZhkUhzyvI56dKW3U8i3/k5feECleZsR1DOl3oajzl/sVE/S7w027C9sZ+EAnI8tuH2
2bJd20k4kr6Qx1iox5o7f77uO0POiWREpcAegI6dOumMOGb2/Ur4oTzlfuky8BfguxQR4OfLpYtp5PIo
gNx+BvCdg4ohf3X2dGUtBTuLDG8355HaqG3Zc2Lr1m0QpDnp/X/gwEF9yAzBfP/+fcbwmuXn492o5viw
WD4Pks9O1KdKcy1EUXbsLt0ihLlKiJU5NXllX3FLsXAxSn/2/TP2Z/LvT60ITLOs/B0zuwH5ZSFijcV6
iCSdb2Ysmclk3yWlP0cI8rmA9P5M+NHbE/RkdZr5aGN7EuCS2qmjxumCoVw3kEYiSEzsol1APmVKoGij
8ijYwUYCnYQEmBcgCUhIoERghgRWRGBTA24OROBuhgViSgJiniQBkwhoJILRYvLqRSIQVcBpyN7jhQQm
CgFQAUyuB38hgPLTmqDizJa6bFmEeP8mq/uj89bRGHZgNmafX49NzxzCoTvn8d6XxuAQ+8LnH3D58xWX
d2Dtpd3qBTiun68st27fVoDTo67kaDrx3sYIPnrqterx+d7wyPT0RlxONUDJTm9P76yj8WQ7vTs9/1L1
3CvVqxsqQby5gFW9uuzP4/E4BC6NakM9vCiQNXIsduHpfnIMHo9t9L1NebCbj6EJY/9uSUkaAjKzX7x4
cb0XKPN5P7i6uxrAdxHgu+dHbp9CyFvWVYDvqcAvEOaLghEl9FrYlwKd0gWEsx+pWRFAlSohcHV1Q2ho
mIKZXX+7mVSVsImgZhc5x8gQNxxKv5L/M1FIHAvAcQHz5gmxzp6tQ+05MYyDhE6dOpUqh64lRs9PPFL6
/6kJQPZmWfk7Zg4EYgqWX1xXjBKk91tvvfWJvCqz8WSZ9ecwRvb3c74y434T/OzSoVmRAGc+cY3AkSmj
hekWSXx4RmJPLghxTPt+uWSWZzXxDm0CDSXQwUYCVANCBIWVCKgGbCGBLTegJMDcQD9DDeicgmR7IhAS
oBogEdjIgIrAk0QgoYFnigMZkAjEvEkAYj7jY+A3UQhgUn2USWuICtOaofLsNgid3xFxS3ug3fph6Ld7
CiafFAA9tQe7b5/C7fdfyfYsxM+++wrHX76M9df2Y9tTh1RREfzmEl6cn09PT69PQBFka8QIXAWl3EAE
IQFHcBLATLQtFDMIw5D4bM9tTNQRrAS9AVbbEGDxNGxLMuHx+F083gLx6Hw1QL1av5uA5rFWSB0JgsdY
Lvvz2DTub0wD3qUEz5luXC2Zg3n4f+e9wASfl7cXHsubS9fOy+VmA34ZV+TLAL4fCtQtiYJR/nCJ9tfr
YV9cSABtZz5SS92W/anF9P7BwVV00g6BzQE/DI85uo+g5kg/roMxftx4HfnHpDnXfSDQhw8fpmE0nSmH
A3NYcEpKCmN/DvhhXyjH5Jiz/xii/2nvT7Os/B0z8wD8QnY3VBXj4IPWEpuky6uu/MOT50rAjP05sYHy
nzE+wc5/NoFMy0YCYiSBHj16IW3KdB0fwETgkSMntEcgZdRo9RYkAddoCQXaBcIlQUjADAmyqAEhAZsa
yBhGrEQgJGBLErr2FxIwFYGqglC4kwjsycCeCJQMbESQahCBF0lgTBR8x8WgxIQ4+E+qh7JpjVFpanNU
nxOPyEXd0HzVACRtHY/UQ+lYeHELtt04inN3r6vUty98/Nmt917GtqeP4MjNcyr5qahMdcWltcdNnICZ
IucJNIKa0ptqgLI7XaQ25bYpwSn751LmaxggclxeZwo5kzwYg8+jLJd2bE+jTJ8t3obH0BBBJPtM2c5j
EPhz5Lv4nm3ZhuEEwwAzPKDx3HgMPZ60ZX6AycH+A5N1NeO8efPqcun8fxP0XFKd02RzM7NP4Ls6I3dx
F+QtXVRXXs5fzVuBX5DAF9C7xAj5x/jre8fi0mkenNrMeKRmRQDFinkjMjJKQU5w0zkOGjQI/fv3R98+
fRQrBDbDZU72YY8Z5wew25zjZhISEhRLnHvDyXdLly6l92e8z0QIY346ZXr+P1wAxNEsK3/HeHCGAUzB
crQRxwMwFKASaPzOO+98yZu2j/wonji9v5n8o7xnXGeAv0Q2ErAnAoYKi5Ysx9BhKcKO03Dk6Ans3rMf
585fQnh4XSUB77J+KNy4HArGCwnQ
gitextract_nkdwtkcl/ ├── .gitattributes ├── .gitignore ├── LICENSE ├── PrimeHack Updater/ │ ├── App.config │ ├── ILMerge.props │ ├── PrimeHack Updater.csproj │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ └── app.manifest │ ├── Source/ │ │ ├── CfgManager.cs │ │ ├── TimedWebClient.cs │ │ ├── Updater.cs │ │ ├── VersionCheck.cs │ │ └── WinForms/ │ │ ├── UpdateUI.Designer.cs │ │ ├── UpdateUI.cs │ │ └── UpdateUI.resx │ └── packages.config ├── PrimeHack Updater.sln └── README.md
SYMBOL INDEX (55 symbols across 7 files)
FILE: PrimeHack Updater/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: PrimeHack Updater/Source/CfgManager.cs
class CfgManager (line 6) | class CfgManager
method CfgManager (line 13) | public CfgManager()
method loadCfg (line 18) | public void loadCfg()
method getISOPath (line 57) | public string getISOPath()
method getImmersiveMode (line 65) | public bool getImmersiveMode()
method getVersion (line 73) | public string getVersion()
method isMainBranch (line 81) | public bool isMainBranch()
method saveCfg (line 89) | public void saveCfg()
method setVersion (line 109) | public void setVersion(string ver)
method setISOPath (line 115) | public void setISOPath(string path)
method setImmersiveMode (line 121) | public void setImmersiveMode(bool mode)
method setMainbranch (line 127) | public void setMainbranch(bool branch)
method isVersionsEqual (line 133) | public bool isVersionsEqual(string remote)
FILE: PrimeHack Updater/Source/TimedWebClient.cs
class TimedWebClient (line 10) | class TimedWebClient : WebClient
method GetWebRequest (line 12) | protected override WebRequest GetWebRequest(Uri address)
FILE: PrimeHack Updater/Source/Updater.cs
class Updater (line 18) | class Updater
method Main (line 26) | [STAThread]
method Update (line 84) | public static void Update(string url)
method DownloadLatest (line 104) | public static void DownloadLatest(string url)
method InstallPrimeHack (line 120) | public static void InstallPrimeHack(object sender, AsyncCompletedEvent...
method restartAsAdmin (line 163) | public static void restartAsAdmin()
method migrate (line 188) | public static void migrate(UpdateUI ui)
method runPrimeHack (line 310) | public static void runPrimeHack(string path)
method IsPathValid (line 347) | public static bool IsPathValid(string path)
method WriteAccess (line 359) | public static bool WriteAccess(string folderName)
FILE: PrimeHack Updater/Source/VersionCheck.cs
class VersionCheck (line 13) | class VersionCheck
method getVersion (line 15) | public static string getVersion(string html)
method getJSONInfo (line 29) | public static string getJSONInfo(string url)
method VersionCheckError (line 60) | public static void VersionCheckError()
FILE: PrimeHack Updater/Source/WinForms/UpdateUI.Designer.cs
class UpdateUI (line 3) | partial class UpdateUI
method Dispose (line 14) | protected override void Dispose(bool disposing)
method InitializeComponent (line 29) | private void InitializeComponent()
FILE: PrimeHack Updater/Source/WinForms/UpdateUI.cs
class UpdateUI (line 12) | public partial class UpdateUI : Form
method UpdateUI (line 14) | public UpdateUI()
method UpdateUI (line 24) | public UpdateUI(string url)
method writeLine (line 34) | public void writeLine(string line)
method ISOSelection (line 39) | public void ISOSelection()
method Yes_Click (line 52) | private void Yes_Click(object sender, EventArgs e)
method Never_Click (line 58) | private void Never_Click(object sender, EventArgs e)
method Later_Click (line 64) | private void Later_Click(object sender, EventArgs e)
method browse_button_Click (line 69) | private void browse_button_Click(object sender, EventArgs e)
method ImmersiveChecked (line 82) | private void ImmersiveChecked(object sender, EventArgs e)
method PortableChecked (line 87) | private void PortableChecked(object sender, EventArgs e)
method UpdateProgress (line 95) | public void UpdateProgress(object sender, DownloadProgressChangedEvent...
method FinishedInstalling (line 103) | public void FinishedInstalling()
method STAShowDialog (line 110) | public static DialogResult STAShowDialog(FileDialog dialog)
class DialogState (line 127) | public class DialogState
method ThreadProcShowDialog (line 132) | public void ThreadProcShowDialog()
method FlashWindowEx (line 138) | [DllImport("user32.dll")]
type FLASHWINFO (line 145) | [StructLayout(LayoutKind.Sequential)]
method FlashWindowEx (line 154) | public static bool FlashWindowEx(Form form)
method AddFontMemResourceEx (line 168) | [System.Runtime.InteropServices.DllImport("gdi32.dll")]
method LoadFont (line 175) | public void LoadFont()
Condensed preview — 20 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (319K chars).
[
{
"path": ".gitattributes",
"chars": 2518,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".gitignore",
"chars": 4628,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "PrimeHack Updater/App.config",
"chars": 182,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".N"
},
{
"path": "PrimeHack Updater/ILMerge.props",
"chars": 3540,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "PrimeHack Updater/PrimeHack Updater.csproj",
"chars": 8518,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
},
{
"path": "PrimeHack Updater/Properties/AssemblyInfo.cs",
"chars": 1402,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "PrimeHack Updater/Properties/Resources.Designer.cs",
"chars": 3146,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "PrimeHack Updater/Properties/Resources.resx",
"chars": 6082,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "PrimeHack Updater/Properties/app.manifest",
"chars": 3162,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n <ass"
},
{
"path": "PrimeHack Updater/Source/CfgManager.cs",
"chars": 3557,
"preview": "using System;\nusing System.IO;\n\nnamespace PrimeHack_Updater\n{\n class CfgManager\n {\n string version = \"\";\n "
},
{
"path": "PrimeHack Updater/Source/TimedWebClient.cs",
"chars": 410,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing System.Th"
},
{
"path": "PrimeHack Updater/Source/Updater.cs",
"chars": 14032,
"preview": "using Newtonsoft.Json.Linq;\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.IO.Compression;\nusing"
},
{
"path": "PrimeHack Updater/Source/VersionCheck.cs",
"chars": 2333,
"preview": "using Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing S"
},
{
"path": "PrimeHack Updater/Source/WinForms/UpdateUI.Designer.cs",
"chars": 12084,
"preview": "namespace PrimeHack_Updater.Source.WinForms\n{\n partial class UpdateUI\n {\n /// <summary>\n /// Requir"
},
{
"path": "PrimeHack Updater/Source/WinForms/UpdateUI.cs",
"chars": 5895,
"preview": "using System;\nusing System.Drawing.Text;\nusing System.IO;\nusing System.Net;\nusing System.Runtime.InteropServices;\nusing"
},
{
"path": "PrimeHack Updater/Source/WinForms/UpdateUI.resx",
"chars": 219551,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "PrimeHack Updater/packages.config",
"chars": 289,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"ILMerge\" version=\"3.0.29\" targetFramework=\"net452\" />\n"
},
{
"path": "PrimeHack Updater.sln",
"chars": 1858,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3050"
},
{
"path": "README.md",
"chars": 471,
"preview": "# PrimeHack-Updater\nAn Updater/Installer for the [latest PrimeHack versions by Shiiion](https://github.com/shiiion/dolph"
}
]
About this extraction
This page contains the full source code of the SirMangler/PrimeHack-Updater GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 20 files (304.4 KB), approximately 158.1k tokens, and a symbol index with 55 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.