Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
Stunserver
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
Stunserver
Commits
3d23f8f8
Commit
3d23f8f8
authored
Mar 12, 2017
by
jselbie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support for configuration file
parent
2fa4f5de
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
829 additions
and
569 deletions
+829
-569
common/commonincludes.hpp
common/commonincludes.hpp
+2
-0
resources/stunserver.1
resources/stunserver.1
+18
-0
resources/stunserver.md
resources/stunserver.md
+14
-0
resources/stunserver.txtcode
resources/stunserver.txtcode
+597
-522
server/main.cpp
server/main.cpp
+164
-47
testcode/stun.conf
testcode/stun.conf
+34
-0
No files found.
common/commonincludes.hpp
View file @
3d23f8f8
...
@@ -51,6 +51,8 @@
...
@@ -51,6 +51,8 @@
#include <boost/shared_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_array.hpp>
#include <boost/scoped_array.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <map>
#include <map>
#include <vector>
#include <vector>
...
...
resources/stunserver.1
View file @
3d23f8f8
...
@@ -31,6 +31,7 @@ The following options are supported.
...
@@ -31,6 +31,7 @@ The following options are supported.
\-\-ddp
\-\-ddp
\-\-primaryadvertised
\-\-primaryadvertised
\-\-altadvertised
\-\-altadvertised
\-\-configfile
\-\-help
\-\-help
\f[]
\f[]
.fi
.fi
...
@@ -205,6 +206,23 @@ correctly set these parameters for use within Amazon EC2.
...
@@ -205,6 +206,23 @@ correctly set these parameters for use within Amazon EC2.
.PP
.PP
* * * * *
* * * * *
.PP
.PP
\f[B]\-\-configfile\f[] FILENAME
.PP
The \-\-configfile switch allows the server to be configured with a JSON
configuration file rather that through command line parameters.
If this switch is specified, most other command line parameters will be
ignored.
(\-\-verbosity is the only one honored).
Instead of configuring the server with command line parameters, the
configuration will be read from file.
Since multiple configurations can be specified, this has the added
advantage of allowing multiple protocols and IP families to run within
the same process (each in a separate thread).
The fields of each configuration node are named identical to the
corresponding command line parameters (with the leading dashes removed).
An example stun.conf configuration file is shipped in the "testcode"
folder of the source package ____
.PP
\f[B]\-\-help\f[]
\f[B]\-\-help\f[]
.PP
.PP
Prints this help page
Prints this help page
...
...
resources/stunserver.md
View file @
3d23f8f8
...
@@ -29,6 +29,7 @@ The following options are supported.
...
@@ -29,6 +29,7 @@ The following options are supported.
--ddp
--ddp
--primaryadvertised
--primaryadvertised
--altadvertised
--altadvertised
--configfile
--help
--help
Details of each option are as follows.
Details of each option are as follows.
...
@@ -185,6 +186,18 @@ For more details, visit www.stunprotocol.org for details on how to correctly set
...
@@ -185,6 +186,18 @@ For more details, visit www.stunprotocol.org for details on how to correctly set
____
____
**--configfile**
FILENAME
The --configfile switch allows the server to be configured with a JSON configuration file rather
that through command line parameters. If this switch is specified, most other command line parameters will be ignored.
(--verbosity is the only one honored). Instead of configuring the server with command line parameters, the configuration
will be read from file. Since multiple configurations can be specified, this has the added advantage of allowing multiple
protocols and IP families to run within the same process (each in a separate thread). The fields of each configuration node
are named identical to the corresponding command line parameters (with the leading dashes removed). An example stun.conf
configuration file is shipped in the "testcode" folder of the source package
____
**--help**
**--help**
Prints this help page
Prints this help page
...
@@ -214,6 +227,7 @@ stunserver --mode full --primaryinterface eth0 --altinterface eth1
...
@@ -214,6 +227,7 @@ stunserver --mode full --primaryinterface eth0 --altinterface eth1
enumerated by the system. The "ifconfig" or "ipconfig" command will
enumerated by the system. The "ifconfig" or "ipconfig" command will
enumerate available interface names.
enumerate available interface names.
# AUTHOR
# AUTHOR
john selbie (john@selbie.com)
john selbie (john@selbie.com)
...
...
resources/stunserver.txtcode
View file @
3d23f8f8
...
@@ -52,570 +52,645 @@ const char stunserver_text[] = {
...
@@ -52,570 +52,645 @@ const char stunserver_text[] = {
0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20,
0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65,
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65,
0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61, 0x69,
0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x0a,
0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f,
0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73,
0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65,
0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x2e, 0x0a, 0x0a, 0x2d,
0x61, 0x63, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61,
0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x0a, 0x0a,
0x72, 0x65, 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77,
0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x4f,
0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d,
0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x4f, 0x44, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69,
0x68, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61,
0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x62, 0x61,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x66, 0x75, 0x6c,
0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65,
0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63,
0x72, 0x20, 0x22, 0x62, 0x61, 0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x20, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20,
0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e,
0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20,
0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c,
0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x20, 0x42, 0x61, 0x73, 0x69,
0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20,
0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x75,
0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e,
0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20,
0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x74,
0x69, 0x73, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e,
0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x20, 0x73, 0x63, 0x65,
0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20,
0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68,
0x4e, 0x41, 0x54, 0x20, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61,
0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x6c, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20,
0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69,
0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63,
0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x69, 0x74, 0x73, 0x20, 0x65,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20,
0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61,
0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f,
0x69, 0x74, 0x73, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x72, 0x74,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72,
0x61, 0x6e, 0x64, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61,
0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72,
0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e,
0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74,
0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61,
0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68,
0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73,
0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47,
0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f,
0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x20, 0x61, 0x74,
0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20,
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e,
0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45,
0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,
0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f,
0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70,
0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e,
0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20,
0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74,
0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72,
0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74,
0x76, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73,
0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20,
0x20, 0x6f, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66,
0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20,
0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f,
0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x2e, 0x20, 0x41, 0x20, 0x63,
0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e,
0x6f, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68,
0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x61,
0x2e, 0x20, 0x41, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62,
0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x6e,
0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65,
0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x73, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74,
0x66, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b,
0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66,
0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f,
0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c,
0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x70, 0x6f, 0x72,
0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64,
0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f,
0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x74, 0x65,
0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c,
0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x74,
0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c,
0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20,
0x69, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x4e, 0x41, 0x54,
0x74, 0x73, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e,
0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x61, 0x6e,
0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
0x72, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
0x6f, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66,
0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68,
0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65,
0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f,
0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65,
0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20,
0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75,
0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x49,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75,
0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20,
0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69,
0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x2e,
0x71, 0x75, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6f, 0x76,
0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
0x68, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e,
0x75, 0x6e, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c,
0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x43, 0x48, 0x41,
0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65,
0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x20,
0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x66, 0x72,
0x61, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51,
0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x55, 0x45, 0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
0x74, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20,
0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f,
0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70,
0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65,
0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e,
0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41,
0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x4e,
0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45,
0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69,
0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74,
0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c,
0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28,
0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31,
0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36,
0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29,
0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74,
0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74,
0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74,
0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61,
0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x74,
0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e,
0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22,
0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22, 0x29, 0x2e, 0x0a, 0x0a, 0x54,
0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64,
0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x77, 0x69,
0x65, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75,
0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62,
0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69,
0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72,
0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a,
0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61,
0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69,
0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x64, 0x61, 0x70,
0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49, 0x4e, 0x41, 0x44, 0x44, 0x52,
0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74,
0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61,
0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x6e,
0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61,
0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
0x4e, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20,
0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e,
0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52,
0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73, 0x70,
0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65,
0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61,
0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e,
0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33, 0x22, 0x29, 0x20, 0x6f, 0x66,
0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x72,
0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66,
0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65, 0x2e,
0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x31, 0x22, 0x29, 0x2e, 0x0a,
0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x6c,
0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20,
0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x63,
0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68,
0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73,
0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20,
0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x
73, 0x65, 0x63, 0x6f
,
0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x
66, 0x69, 0x72, 0x73
,
0x
6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c
,
0x
74, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68
,
0x6
8, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72
,
0x6
f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20
,
0x
20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66
,
0x
77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69
,
0x6
9, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61
, 0x64,
0x6
7, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64
, 0x64,
0x
64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a
, 0x2d, 0x2d, 0x2d, 0x2d,
0x
72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x2d
, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57,
0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41,
0x43, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61,
0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20,
0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33,
0x22, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f,
0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68,
0x31, 0x22, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20,
0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x69, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66,
0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f,
0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64,
0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d,
0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54,
0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31,
0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a,
0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20,
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68,
0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69,
0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68,
0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74,
0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e,
0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69,
0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65,
0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36,
0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36,
0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c,
0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f,
0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20,
0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x62,
0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67,
0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65,
0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71,
0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73,
0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72,
0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64,
0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61, 0x64,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74,
0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65,
0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69,
0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e,
0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e,
0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a,
0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e,
0x0a, 0x2d, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50,
0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f,
0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76,
0x72, 0x65, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e,
0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e,
0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22,
0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e,
0x34, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f,
0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50,
0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x56, 0x34, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a,
0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e,
0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73,
0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34,
0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73,
0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x61, 0x67, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73,
0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20,
0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70,
0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e,
0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69,
0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x33,
0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x66, 0x61,
0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49,
0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x50,
0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x69, 0x73, 0x20, 0x65,
0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x34, 0x22, 0x20, 0x6f, 0x72,
0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63,
0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x61, 0x67,
0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50, 0x56, 0x34, 0x20, 0x6f, 0x72,
0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x66, 0x61, 0x6d, 0x69,
0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72,
0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f,
0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x20, 0x69, 0x73, 0x20,
0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54,
0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x49, 0x50, 0x20, 0x70, 0x72,
0x4f, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x22, 0x75, 0x64, 0x70,
0x49, 0x50, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c,
0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74, 0x63, 0x70, 0x22, 0x2e, 0x0a,
0x20, 0x22, 0x75, 0x64, 0x70, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74,
0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x63, 0x70, 0x22, 0x2e, 0x0a, 0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d,
0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a,
0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f,
0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f, 0x6e, 0x6e, 0x20, 0x4d, 0x41,
0x6e, 0x6e, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a,
0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65,
0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e,
0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x20, 0x69, 0x73, 0x20,
0x4e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77,
0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61,
0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31, 0x30,
0x6e, 0x64, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a,
0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x54,
0x46, 0x6f, 0x72, 0x20, 0x54, 0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69,
0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d,
0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6e, 0x75,
0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66,
0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x69, 0x6d, 0x75,
0x20, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75,
0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x20, 0x63, 0x6f, 0x6e,
0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61,
0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65,
0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20,
0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20,
0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e,
0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a,
0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73,
0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69,
0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72,
0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x77, 0x68,
0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20,
0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x55, 0x44, 0x50, 0x2e, 0x20,
0x55, 0x44, 0x50, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x31, 0x30, 0x30,
0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f,
0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f,
0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56, 0x45,
0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72,
0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4c, 0x4f, 0x47,
0x65, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69,
0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72,
0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72,
0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f,
0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75,
0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30,
0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x54, 0x68,
0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61,
0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x68,
0x69, 0x65, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68,
0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x70,
0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20,
0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68,
0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f,
0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x77, 0x69,
0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61,
0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x73, 0x20, 0x74,
0x72, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69,
0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61,
0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65,
0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73,
0x72, 0x72, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e,
0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76,
0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x20,
0x69, 0x74, 0x79, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x30,
0x20, 0x6f, 0x66, 0x20, 0x30, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61,
0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d,
0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x61,
0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e,
0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20,
0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e,
0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61,
0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20,
0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x31, 0x20, 0x73, 0x68, 0x6f,
0x31, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67,
0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x20,
0x68, 0x74, 0x6c, 0x79, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41,
0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75,
0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20,
0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73,
0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d,
0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20,
0x6f, 0x72, 0x65, 0x2e, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79,
0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x33,
0x69, 0x6e, 0x67, 0x20, 0x33, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73,
0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x61,
0x68, 0x6f, 0x77, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f,
0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x0a,
0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a,
0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x64,
0x0a, 0x0a, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65,
0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x64, 0x64,
0x20, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63,
0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20,
0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69,
0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65,
0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65, 0x6e, 0x69, 0x61, 0x6c, 0x20,
0x6e, 0x69, 0x61, 0x6c, 0x20, 0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72,
0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x29,
0x76, 0x69, 0x63, 0x65, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63,
0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22,
0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63,
0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c,
0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x73, 0x20,
0x6f, 0x6f, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20,
0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f,
0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e,
0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65,
0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x69, 0x6e,
0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72,
0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x74,
0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x74,
0x73, 0x20, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61,
0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x22, 0x70, 0x65, 0x6e,
0x20, 0x22, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f,
0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f, 0x78, 0x22, 0x20, 0x74, 0x68,
0x78, 0x22, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c,
0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73,
0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71,
0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61,
0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72,
0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73,
0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x49, 0x50, 0x20, 0x74,
0x20, 0x49, 0x50, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72,
0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64,
0x6f, 0x70, 0x70, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72,
0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61,
0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65,
0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65,
0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f,
0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65, 0x73, 0x70,
0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70,
0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61,
0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74,
0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52,
0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59,
0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64,
0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65,
0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x41, 0x4c, 0x54,
0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68,
0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50,
0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d,
0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x20, 0x61, 0x6e,
0x49, 0x50, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49,
0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x20, 0x61, 0x72, 0x65,
0x50, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72,
0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61,
0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x65,
0x67, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30,
0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30, 0x31, 0x2e, 0x32, 0x33, 0x2e,
0x31, 0x2e, 0x32, 0x33, 0x2e, 0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29,
0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29, 0x20, 0x74, 0x68, 0x61, 0x74,
0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68,
0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x62,
0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20,
0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66,
0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74,
0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x2d,
0x61, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74,
0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20,
0x73, 0x73, 0x65, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73,
0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x62,
0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54,
0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20,
0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72,
0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20,
0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
0x66, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64,
0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x75, 0x73, 0x61, 0x67,
0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e,
0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69,
0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e,
0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66,
0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70,
0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f,
0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69,
0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20,
0x6e, 0x67, 0x20, 0x61, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65,
0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61,
0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x45,
0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f,
0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20,
0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72,
0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20,
0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65,
0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e,
0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x62,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61,
0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54, 0x2e,
0x20, 0x4e, 0x41, 0x54, 0x2e, 0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74,
0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20,
0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61,
0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65,
0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f,
0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20,
0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79,
0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20,
0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x69, 0x74, 0x20, 0x63, 0x72,
0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a,
0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x4e, 0x6f, 0x72, 0x6d,
0x0a, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77,
0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75,
0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65,
0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61,
0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67,
0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74,
0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x52,
0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74,
0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48,
0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44,
0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61,
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e,
0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44,
0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41,
0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65,
0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53,
0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20,
0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20,
0x62, 0x79, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20,
0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x65,
0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64,
0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x71, 0x75,
0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f,
0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72,
0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73,
0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20,
0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79,
0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20,
0x69, 0x6e, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
0x73, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69,
0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61,
0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x20, 0x77,
0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74,
0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f,
0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20,
0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x72,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72,
0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6d,
0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68,
0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f,
0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d,
0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74,
0x61, 0x79, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20,
0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x75,
0x20, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c,
0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76,
0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45,
0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
0x53, 0x53, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e,
0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x45,
0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20,
0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x2c, 0x20, 0x61,
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73,
0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41,
0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x62,
0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e,
0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20,
0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63,
0x6f, 0x66, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20,
0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65,
0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63,
0x53, 0x20, 0x6f, 0x72, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52,
0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c,
0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x6f, 0x72, 0x20,
0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20,
0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52,
0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74,
0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73,
0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64,
0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x69,
0x6f, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69,
0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69,
0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20,
0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x4e, 0x41, 0x54,
0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e,
0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x74, 0x65,
0x67, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72,
0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66,
0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x73,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74,
0x74, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65,
0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63,
0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69,
0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x46,
0x73, 0x69, 0x74, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e,
0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67,
0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69, 0x73, 0x69, 0x74, 0x20, 0x77,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x20, 0x6f, 0x6e, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63,
0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74,
0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x68,
0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63,
0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73,
0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73,
0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61,
0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a,
0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65,
0x20, 0x46, 0x49, 0x4c, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x0a, 0x0a, 0x54,
0x68, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66,
0x69, 0x6c, 0x65, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x61,
0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69,
0x74, 0x68, 0x20, 0x61, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20,
0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68,
0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e,
0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73,
0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74,
0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x77,
0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x45,
0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20,
0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x28,
0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
0x6f, 0x6e, 0x65, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x29,
0x2e, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x69, 0x6e, 0x67,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20,
0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70,
0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e,
0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
0x77, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x20,
0x61, 0x6e, 0x64, 0x20, 0x49, 0x50, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c,
0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x77,
0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61,
0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x28,
0x65, 0x61, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61,
0x64, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72,
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28,
0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61,
0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x61, 0x73, 0x68, 0x65, 0x73, 0x20,
0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x29, 0x2e, 0x20, 0x41, 0x6e,
0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x75,
0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c,
0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64,
0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x74, 0x65, 0x73,
0x74, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x65,
0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x65, 0x6c,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x50,
0x70, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68,
0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68,
0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x61, 0x67, 0x65,
0x65, 0x6c, 0x70, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x0a, 0x0a, 0x0a,
0x0a, 0x0a, 0x0a, 0x0a, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53,
0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x0a, 0x0a, 0x0a, 0x73,
0x0a, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65,
0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0a, 0x20, 0x20,
0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6e,
0x20, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x6f, 0x70,
0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74,
0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x62, 0x61, 0x73, 0x69,
0x73, 0x20, 0x61, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x53, 0x54,
0x63, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69,
0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73,
0x6e, 0x67, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x55, 0x44,
0x6e, 0x20, 0x55, 0x44, 0x50, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x33,
0x50, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x33, 0x34, 0x37, 0x38, 0x2e,
0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65,
0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20,
0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e,
0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38,
0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x20, 0x2d, 0x2d, 0x61,
0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39,
0x36, 0x2e, 0x37, 0x39, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62,
0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x20,
0x6f, 0x76, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20,
0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72,
0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x75, 0x61,
0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x75, 0x61, 0x6c, 0x2d, 0x68, 0x6f,
0x6c, 0x2d, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20,
0x73, 0x74, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74,
0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x22,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38,
0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x22, 0x20, 0x61, 0x6e,
0x22, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33,
0x64, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36,
0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20, 0x54, 0x68,
0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20,
0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72,
0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x55, 0x44, 0x50,
0x20, 0x55, 0x44, 0x50, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20,
0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x20,
0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x31,
0x20, 0x20, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36,
0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a,
0x2e, 0x37, 0x38, 0x3a, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38,
0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61,
0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31,
0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a,
0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e,
0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e,
0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37,
0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a, 0x33, 0x34, 0x37,
0x39, 0x20, 0x28, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
0x39, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49,
0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a, 0x41, 0x6e,
0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33,
0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72,
0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x38,
0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64,
0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f,
0x66, 0x69, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20,
0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35,
0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65,
0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x28, 0x41,
0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20,
0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x49, 0x50, 0x2c,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x50,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x73, 0x74,
0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a, 0x41, 0x6e, 0x20, 0x65, 0x72, 0x72,
0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d,
0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x69, 0x66,
0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x68, 0x30, 0x20, 0x2d, 0x2d, 0x61,
0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73,
0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63,
0x65, 0x74, 0x68, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x61, 0x6d,
0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x6e,
0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20,
0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76,
0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69,
0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72,
0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20,
0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20,
0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x61, 0x6d,
0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72,
0x65, 0x74, 0x68, 0x30, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e,
0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x68, 0x31,
0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73,
0x22, 0x69, 0x66, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x6f,
0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65,
0x72, 0x20, 0x22, 0x69, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22,
0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c,
0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70,
0x6c, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20,
0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e,
0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61,
0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64,
0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52,
0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74,
0x0a, 0x0a, 0x0a, 0x6a, 0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x62,
0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x69, 0x66, 0x63,
0x69, 0x65, 0x20, 0x28, 0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73, 0x65, 0x6c,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x69,
0x62, 0x69, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00};
0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x6e,
0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69,
0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x0a, 0x0a,
0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x0a, 0x0a, 0x0a, 0x6a,
0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x62, 0x69, 0x65, 0x20, 0x28,
0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73, 0x65, 0x6c, 0x62, 0x69, 0x65, 0x2e,
0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00};
server/main.cpp
View file @
3d23f8f8
...
@@ -34,6 +34,9 @@
...
@@ -34,6 +34,9 @@
#include "resolvehostname.h"
#include "resolvehostname.h"
using
namespace
boost
::
property_tree
;
void
PrintUsage
(
bool
fSummaryUsage
)
void
PrintUsage
(
bool
fSummaryUsage
)
{
{
size_t
width
=
GetConsoleWidth
();
size_t
width
=
GetConsoleWidth
();
...
@@ -120,6 +123,7 @@ struct StartupArgs
...
@@ -120,6 +123,7 @@ struct StartupArgs
std
::
string
strVerbosity
;
std
::
string
strVerbosity
;
std
::
string
strMaxConnections
;
std
::
string
strMaxConnections
;
std
::
string
strDosProtect
;
std
::
string
strDosProtect
;
std
::
string
strConfigFile
;
};
};
...
@@ -527,6 +531,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
...
@@ -527,6 +531,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
cmdline
.
AddOption
(
"help"
,
no_argument
,
&
pStartupArgs
->
strHelp
);
cmdline
.
AddOption
(
"help"
,
no_argument
,
&
pStartupArgs
->
strHelp
);
cmdline
.
AddOption
(
"verbosity"
,
required_argument
,
&
pStartupArgs
->
strVerbosity
);
cmdline
.
AddOption
(
"verbosity"
,
required_argument
,
&
pStartupArgs
->
strVerbosity
);
cmdline
.
AddOption
(
"ddp"
,
no_argument
,
&
pStartupArgs
->
strDosProtect
);
cmdline
.
AddOption
(
"ddp"
,
no_argument
,
&
pStartupArgs
->
strDosProtect
);
cmdline
.
AddOption
(
"configfile"
,
required_argument
,
&
pStartupArgs
->
strConfigFile
);
cmdline
.
ParseCommandLine
(
argc
,
argv
,
startindex
,
&
fError
);
cmdline
.
ParseCommandLine
(
argc
,
argv
,
startindex
,
&
fError
);
...
@@ -534,6 +539,79 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
...
@@ -534,6 +539,79 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
}
}
HRESULT
LoadConfigsFromFile
(
const
std
::
string
&
filename
,
std
::
vector
<
StartupArgs
>&
configurations
)
{
ptree
tree
;
bool
error
=
false
;
std
::
string
errorMessage
;
/* EXAMPLE configuration file
{
"configurations": [
{
"description" : "UDP Full Mode listening on default ports",
"mode": "full",
"family": "4",
"protocol": "udp",
"ddp": "1"
},
{
"description" : "TCP Full Mode listening on default port",
"mode": "full",
"family": "6",
"protocol": "tcp",
"ddp": "1"
}
]
}
*/
try
{
read_json
(
filename
,
tree
);
ptree
root
=
tree
.
get_child
(
"configurations"
);
for
(
ptree
::
iterator
itor
=
root
.
begin
();
itor
!=
root
.
end
();
itor
++
)
{
const
ptree
&
child
=
itor
->
second
;
StartupArgs
args
;
args
.
strMode
=
child
.
get
(
"mode"
,
""
);
args
.
strPrimaryInterface
=
child
.
get
(
"primaryinterface"
,
""
);
args
.
strAltInterface
=
child
.
get
(
"altinterface"
,
""
);
args
.
strPrimaryAdvertised
=
child
.
get
(
"primaryadvertised"
,
""
);
args
.
strAlternateAdvertised
=
child
.
get
(
"altadvertised"
,
""
);
args
.
strPrimaryPort
=
child
.
get
(
"primaryport"
,
""
);
args
.
strAltPort
=
child
.
get
(
"altport"
,
""
);
args
.
strFamily
=
child
.
get
(
"family"
,
""
);
args
.
strProtocol
=
child
.
get
(
"protocol"
,
""
);
args
.
strMaxConnections
=
child
.
get
(
"maxconn"
,
""
);
args
.
strDosProtect
=
child
.
get
(
"ddp"
,
""
);
configurations
.
push_back
(
args
);
}
}
catch
(
ptree_error
ex1
)
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"Error processing configuration file: %s"
,
ex1
.
what
());
error
=
true
;
}
if
(
!
error
&&
configurations
.
size
()
==
0
)
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"File is valid json, but no configurations found"
);
error
=
true
;
}
if
(
error
)
{
configurations
.
clear
();
return
E_FAIL
;
}
return
S_OK
;
}
HRESULT
BlockSignal
(
int
sig
)
HRESULT
BlockSignal
(
int
sig
)
{
{
HRESULT
hr
=
S_OK
;
HRESULT
hr
=
S_OK
;
...
@@ -589,7 +667,7 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
...
@@ -589,7 +667,7 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
hr
=
CStunServer
::
CreateInstance
(
config
,
spServer
.
GetPointerPointer
());
hr
=
CStunServer
::
CreateInstance
(
config
,
spServer
.
GetPointerPointer
());
if
(
FAILED
(
hr
))
if
(
FAILED
(
hr
))
{
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"Unable to initialize server (error code = x%x)"
,
hr
);
Logging
::
LogMsg
(
LL_ALWAYS
,
"Unable to initialize
UDP
server (error code = x%x)"
,
hr
);
LogHR
(
LL_ALWAYS
,
hr
);
LogHR
(
LL_ALWAYS
,
hr
);
return
hr
;
return
hr
;
}
}
...
@@ -597,10 +675,11 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
...
@@ -597,10 +675,11 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
hr
=
spServer
->
Start
();
hr
=
spServer
->
Start
();
if
(
FAILED
(
hr
))
if
(
FAILED
(
hr
))
{
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"Unable to start server (error code = x%x)"
,
hr
);
Logging
::
LogMsg
(
LL_ALWAYS
,
"Unable to start
UDP
server (error code = x%x)"
,
hr
);
LogHR
(
LL_ALWAYS
,
hr
);
LogHR
(
LL_ALWAYS
,
hr
);
return
hr
;
return
hr
;
}
}
sleep
(
1
);
return
S_OK
;
return
S_OK
;
}
}
...
@@ -625,6 +704,8 @@ HRESULT StartTCP(CRefCountedPtr<CTCPServer>& spTCPServer, CStunServerConfig& con
...
@@ -625,6 +704,8 @@ HRESULT StartTCP(CRefCountedPtr<CTCPServer>& spTCPServer, CStunServerConfig& con
return
hr
;
return
hr
;
}
}
sleep
(
1
);
return
S_OK
;
return
S_OK
;
}
}
...
@@ -633,9 +714,22 @@ int main(int argc, char** argv)
...
@@ -633,9 +714,22 @@ int main(int argc, char** argv)
{
{
HRESULT
hr
=
S_OK
;
HRESULT
hr
=
S_OK
;
StartupArgs
args
;
StartupArgs
args
;
CStunServerConfig
config
;
std
::
vector
<
StartupArgs
>
argsVector
;
CRefCountedPtr
<
CStunServer
>
spServer
;
int
serverindex
=
1
;
CRefCountedPtr
<
CTCPServer
>
spTCPServer
;
typedef
CRefCountedPtr
<
CStunServer
>
UdpServerPtr
;
typedef
CRefCountedPtr
<
CTCPServer
>
TcpServerPtr
;
std
::
vector
<
UdpServerPtr
>
udpServers
;
std
::
vector
<
TcpServerPtr
>
tcpServers
;
// block sigpipe so that socket send calls from raising SIGPIPE
signal
(
SIGPIPE
,
SIG_IGN
);
BlockSignal
(
SIGPIPE
);
// Block SIGTERM and SIGINT such that the child threads will never get that signal (so that subsequent WaitForAppExitSignal hooks on *this* thread)
BlockSignal
(
SIGTERM
);
BlockSignal
(
SIGINT
);
#ifdef DEBUG
#ifdef DEBUG
...
@@ -668,68 +762,91 @@ int main(int argc, char** argv)
...
@@ -668,68 +762,91 @@ int main(int argc, char** argv)
}
}
}
}
if
(
args
.
strConfigFile
.
empty
()
==
false
)
{
hr
=
LoadConfigsFromFile
(
args
.
strConfigFile
,
argsVector
);
if
(
FAILED
(
hr
))
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"Can't process configuration file"
);
return
-
3
;
}
}
else
{
argsVector
.
push_back
(
args
);
}
if
(
SUCCEEDED
(
hr
))
if
(
SUCCEEDED
(
hr
))
{
{
for
(
std
::
vector
<
StartupArgs
>::
iterator
itor
=
argsVector
.
begin
();
itor
!=
argsVector
.
end
();
itor
++
)
{
CStunServerConfig
config
;
StartupArgs
args
=
*
itor
;
Logging
::
LogMsg
(
LL_DEBUG
,
"Starting server %d"
,
serverindex
);
serverindex
++
;
::
DumpStartupArgs
(
args
);
::
DumpStartupArgs
(
args
);
hr
=
BuildServerConfigurationFromArgs
(
args
,
&
config
);
hr
=
BuildServerConfigurationFromArgs
(
args
,
&
config
);
}
if
(
FAILED
(
hr
))
if
(
FAILED
(
hr
))
{
{
Logging
::
LogMsg
(
LL_ALWAYS
,
"Error building configuration from command line options"
);
Logging
::
LogMsg
(
LL_ALWAYS
,
"Error building configuration from options given"
);
PrintUsage
(
true
);
break
;
return
-
3
;
}
}
DumpConfig
(
config
);
DumpConfig
(
config
);
if
(
config
.
fTCP
)
// block sigpipe so that socket send calls from raising SIGPIPE
signal
(
SIGPIPE
,
SIG_IGN
);
BlockSignal
(
SIGPIPE
);
// Block SIGTERM and SIGINT such that the child threads will never get that signal (so that subsequent WaitForAppExitSignal hooks on *this* thread)
BlockSignal
(
SIGTERM
);
BlockSignal
(
SIGINT
);
if
(
config
.
fTCP
==
false
)
{
{
hr
=
StartUDP
(
spServer
,
config
);
TcpServerPtr
spTcpServer
;
if
(
FAILED
(
hr
))
hr
=
StartTCP
(
spTcpServer
,
config
);
if
(
SUCCEEDED
(
hr
))
{
{
return
-
4
;
tcpServers
.
push_back
(
spTcpServer
)
;
}
}
}
}
else
else
{
{
hr
=
StartTCP
(
spTCPServer
,
config
);
UdpServerPtr
spUdpServer
;
hr
=
StartUDP
(
spUdpServer
,
config
);
if
(
SUCCEEDED
(
hr
))
{
udpServers
.
push_back
(
spUdpServer
);
}
}
if
(
FAILED
(
hr
))
if
(
FAILED
(
hr
))
{
{
return
-
5
;
break
;
}
}
}
}
}
Logging
::
LogMsg
(
LL_DEBUG
,
"Successfully started server."
);
if
(
SUCCEEDED
(
hr
))
{
Logging
::
LogMsg
(
LL_DEBUG
,
"Successfully started server."
);
WaitForAppExitSignal
();
WaitForAppExitSignal
();
}
Logging
::
LogMsg
(
LL_DEBUG
,
"Server is exiting"
);
Logging
::
LogMsg
(
LL_DEBUG
,
"Server is exiting"
);
if
(
spServer
!=
NULL
)
for
(
std
::
vector
<
UdpServerPtr
>::
iterator
itor
=
udpServers
.
begin
();
itor
!=
udpServers
.
end
();
itor
++
)
{
{
spServer
->
Stop
();
Logging
::
LogMsg
(
LL_DEBUG
,
"Shutting down UDP server"
);
spServer
.
ReleaseAndClear
();
UdpServerPtr
server
=
*
itor
;
server
->
Stop
();
}
}
if
(
spTCPServer
!=
NULL
)
for
(
std
::
vector
<
TcpServerPtr
>::
iterator
itor
=
tcpServers
.
begin
();
itor
!=
tcpServers
.
end
();
itor
++
)
{
{
spTCPServer
->
Stop
();
Logging
::
LogMsg
(
LL_DEBUG
,
"Shutting down TCP server"
);
spTCPServer
.
ReleaseAndClear
();
TcpServerPtr
server
=
*
itor
;
server
->
Stop
();
}
}
return
0
;
return
0
;
}
}
testcode/stun.conf
0 → 100644
View file @
3d23f8f8
{
"configurations"
: [
{
"_description"
:
"STUN over UDP on IPv4 on default ports (basic mode)"
,
"mode"
:
"basic"
,
"primaryinterface"
:
""
,
"secondaryinterface"
:
""
,
"primaryport"
:
"3478"
,
"secondaryport"
:
"3479"
,
"family"
:
"4"
,
"protocol"
:
"udp"
,
"maxconn"
:
""
,
"primaryadvertised"
:
""
,
"altadvertised"
:
""
,
"ddp"
:
"1"
},
{
"_description"
:
"STUN over UDP on IPv6 on default ports (basic mode)"
,
"mode"
:
"basic"
,
"primaryinterface"
:
""
,
"secondaryinterface"
:
""
,
"primaryport"
:
"3478"
,
"secondaryport"
:
"3479"
,
"family"
:
"6"
,
"protocol"
:
"udp"
,
"maxconn"
:
""
,
"primaryadvertised"
:
""
,
"altadvertised"
:
""
,
"ddp"
:
"1"
}
]
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment