]> git.seodisparate.com - UDPConnection/commitdiff
deploy: 6e39e6dc1631d8682e76d9e50b4e612940f366a6
authorStephen-Seo <Stephen-Seo@users.noreply.github.com>
Thu, 9 Sep 2021 09:12:17 +0000 (09:12 +0000)
committerStephen-Seo <Stephen-Seo@users.noreply.github.com>
Thu, 9 Sep 2021 09:12:17 +0000 (09:12 +0000)
92 files changed:
.nojekyll [new file with mode: 0644]
UDPC_8h.html [new file with mode: 0644]
UDPC_8h_source.html [new file with mode: 0644]
annotated.html [new file with mode: 0644]
bc_s.png [new file with mode: 0644]
bdwn.png [new file with mode: 0644]
classes.html [new file with mode: 0644]
closed.png [new file with mode: 0644]
dir_68267d1309a1af8e8297ef4c3efbcdba.html [new file with mode: 0644]
doc.png [new file with mode: 0644]
doxygen.css [new file with mode: 0644]
doxygen.svg [new file with mode: 0644]
dynsections.js [new file with mode: 0644]
files.html [new file with mode: 0644]
folderclosed.png [new file with mode: 0644]
folderopen.png [new file with mode: 0644]
functions.html [new file with mode: 0644]
functions_vars.html [new file with mode: 0644]
globals.html [new file with mode: 0644]
globals_defs.html [new file with mode: 0644]
globals_func.html [new file with mode: 0644]
globals_type.html [new file with mode: 0644]
globals_vars.html [new file with mode: 0644]
index.html [new file with mode: 0644]
jquery.js [new file with mode: 0644]
menu.js [new file with mode: 0644]
menudata.js [new file with mode: 0644]
nav_f.png [new file with mode: 0644]
nav_g.png [new file with mode: 0644]
nav_h.png [new file with mode: 0644]
open.png [new file with mode: 0644]
search/all_0.html [new file with mode: 0644]
search/all_0.js [new file with mode: 0644]
search/all_1.html [new file with mode: 0644]
search/all_1.js [new file with mode: 0644]
search/all_2.html [new file with mode: 0644]
search/all_2.js [new file with mode: 0644]
search/all_3.html [new file with mode: 0644]
search/all_3.js [new file with mode: 0644]
search/all_4.html [new file with mode: 0644]
search/all_4.js [new file with mode: 0644]
search/all_5.html [new file with mode: 0644]
search/all_5.js [new file with mode: 0644]
search/all_6.html [new file with mode: 0644]
search/all_6.js [new file with mode: 0644]
search/classes_0.html [new file with mode: 0644]
search/classes_0.js [new file with mode: 0644]
search/classes_1.html [new file with mode: 0644]
search/classes_1.js [new file with mode: 0644]
search/close.svg [new file with mode: 0644]
search/defines_0.html [new file with mode: 0644]
search/defines_0.js [new file with mode: 0644]
search/files_0.html [new file with mode: 0644]
search/files_0.js [new file with mode: 0644]
search/functions_0.html [new file with mode: 0644]
search/functions_0.js [new file with mode: 0644]
search/mag_sel.svg [new file with mode: 0644]
search/nomatches.html [new file with mode: 0644]
search/pages_0.html [new file with mode: 0644]
search/pages_0.js [new file with mode: 0644]
search/search.css [new file with mode: 0644]
search/search.js [new file with mode: 0644]
search/search_l.png [new file with mode: 0644]
search/search_m.png [new file with mode: 0644]
search/search_r.png [new file with mode: 0644]
search/searchdata.js [new file with mode: 0644]
search/typedefs_0.html [new file with mode: 0644]
search/typedefs_0.js [new file with mode: 0644]
search/variables_0.html [new file with mode: 0644]
search/variables_0.js [new file with mode: 0644]
search/variables_1.html [new file with mode: 0644]
search/variables_1.js [new file with mode: 0644]
search/variables_2.html [new file with mode: 0644]
search/variables_2.js [new file with mode: 0644]
search/variables_3.html [new file with mode: 0644]
search/variables_3.js [new file with mode: 0644]
search/variables_4.html [new file with mode: 0644]
search/variables_4.js [new file with mode: 0644]
search/variables_5.html [new file with mode: 0644]
search/variables_5.js [new file with mode: 0644]
splitbar.png [new file with mode: 0644]
structUDPC__ConnectionId.html [new file with mode: 0644]
structUDPC__Event.html [new file with mode: 0644]
structUDPC__PacketInfo.html [new file with mode: 0644]
sync_off.png [new file with mode: 0644]
sync_on.png [new file with mode: 0644]
tab_a.png [new file with mode: 0644]
tab_b.png [new file with mode: 0644]
tab_h.png [new file with mode: 0644]
tab_s.png [new file with mode: 0644]
tabs.css [new file with mode: 0644]
unionUDPC__Event_1_1Value.html [new file with mode: 0644]

diff --git a/.nojekyll b/.nojekyll
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/UDPC_8h.html b/UDPC_8h.html
new file mode 100644 (file)
index 0000000..72e9219
--- /dev/null
@@ -0,0 +1,1832 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: src/UDPC.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">UDPC.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Public API for UDPConnection.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;winsock2.h&gt;</code><br />
+<code>#include &lt;Ws2ipdef.h&gt;</code><br />
+<code>#include &lt;In6addr.h&gt;</code><br />
+<code>#include &lt;stdint.h&gt;</code><br />
+</div>
+<p><a href="UDPC_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data identifying a peer via addr, port, and scope_id.  <a href="structUDPC__ConnectionId.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data representing a received/sent packet.  <a href="structUDPC__PacketInfo.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__Event.html">UDPC_Event</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A struct containing information related to the type of event.  <a href="structUDPC__Event.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionUDPC__Event_1_1Value.html">UDPC_Event::Value</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a8ed92f1223b3f658536728f22d3b3827"><td class="memItemLeft" align="right" valign="top"><a id="a8ed92f1223b3f658536728f22d3b3827"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827">UDPC_PACKET_MAX_SIZE</a>&#160;&#160;&#160;8192</td></tr>
+<tr class="memdesc:a8ed92f1223b3f658536728f22d3b3827"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum size of a UDP packet. <br /></td></tr>
+<tr class="separator:a8ed92f1223b3f658536728f22d3b3827"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a780462f48fb18ccb15545ad9d05c70df"><td class="memItemLeft" align="right" valign="top"><a id="a780462f48fb18ccb15545ad9d05c70df"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_DEFAULT_PROTOCOL_ID</b>&#160;&#160;&#160;1357924680</td></tr>
+<tr class="separator:a780462f48fb18ccb15545ad9d05c70df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a6414a39d34be1f50a660ef89f01c800a"><td class="memItemLeft" align="right" valign="top"><a id="a6414a39d34be1f50a660ef89f01c800a"></a>
+typedef struct UDPC_Context *&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_HContext</b></td></tr>
+<tr class="separator:a6414a39d34be1f50a660ef89f01c800a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf09773dbd86360fc70149232bfd3e8e"><td class="memItemLeft" align="right" valign="top"><a id="acf09773dbd86360fc70149232bfd3e8e"></a>
+typedef enum UDPC_EXPORT UDPC_LoggingType&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_LoggingType</b></td></tr>
+<tr class="separator:acf09773dbd86360fc70149232bfd3e8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a228cd7ddf56a4e76e216bc3b80e8bd4a"><td class="memItemLeft" align="right" valign="top">typedef enum UDPC_EXPORT <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a></td></tr>
+<tr class="separator:a228cd7ddf56a4e76e216bc3b80e8bd4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5afb11964c7a55edf34ddf9097779b2"><td class="memItemLeft" align="right" valign="top">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">UDPC_ConnectionId</a></td></tr>
+<tr class="memdesc:ae5afb11964c7a55edf34ddf9097779b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data identifying a peer via addr, port, and scope_id.  <a href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">More...</a><br /></td></tr>
+<tr class="separator:ae5afb11964c7a55edf34ddf9097779b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0261958047ebb5c6a402aa805e4e55b"><td class="memItemLeft" align="right" valign="top">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">UDPC_PacketInfo</a></td></tr>
+<tr class="memdesc:ae0261958047ebb5c6a402aa805e4e55b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data representing a received/sent packet.  <a href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">More...</a><br /></td></tr>
+<tr class="separator:ae0261958047ebb5c6a402aa805e4e55b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adaa0534bf7f04bb2f6ce8975c99c4af0"><td class="memItemLeft" align="right" valign="top">typedef enum UDPC_EXPORT <a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a></td></tr>
+<tr class="memdesc:adaa0534bf7f04bb2f6ce8975c99c4af0"><td class="mdescLeft">&#160;</td><td class="mdescRight">An enum describing the type of event.  <a href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">More...</a><br /></td></tr>
+<tr class="separator:adaa0534bf7f04bb2f6ce8975c99c4af0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b3215b65686670720f098eda2ca1eed"><td class="memItemLeft" align="right" valign="top">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__Event.html">UDPC_Event</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">UDPC_Event</a></td></tr>
+<tr class="memdesc:a7b3215b65686670720f098eda2ca1eed"><td class="mdescLeft">&#160;</td><td class="mdescRight">A struct containing information related to the type of event.  <a href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">More...</a><br /></td></tr>
+<tr class="separator:a7b3215b65686670720f098eda2ca1eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aea7e32ca9fdc04530f95c97459391e6d"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">UDPC_create_id</a> (UDPC_IPV6_ADDR_TYPE addr, uint16_t port)</td></tr>
+<tr class="memdesc:aea7e32ca9fdc04530f95c97459391e6d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr and port.  <a href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">More...</a><br /></td></tr>
+<tr class="separator:aea7e32ca9fdc04530f95c97459391e6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7cb345ce117c04017afd443e5748f19"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">UDPC_create_id_full</a> (UDPC_IPV6_ADDR_TYPE addr, uint32_t scope_id, uint16_t port)</td></tr>
+<tr class="memdesc:ab7cb345ce117c04017afd443e5748f19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr, scope_id, and port.  <a href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">More...</a><br /></td></tr>
+<tr class="separator:ab7cb345ce117c04017afd443e5748f19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fa3e1e54877029a226ab9cfb74215df"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">UDPC_create_id_anyaddr</a> (uint16_t port)</td></tr>
+<tr class="memdesc:a0fa3e1e54877029a226ab9cfb74215df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given port.  <a href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">More...</a><br /></td></tr>
+<tr class="separator:a0fa3e1e54877029a226ab9cfb74215df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b80d2df882f03aeee8a92bed7fb0131"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">UDPC_create_id_easy</a> (const char *addrString, uint16_t port)</td></tr>
+<tr class="memdesc:a8b80d2df882f03aeee8a92bed7fb0131"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr string and port.  <a href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">More...</a><br /></td></tr>
+<tr class="separator:a8b80d2df882f03aeee8a92bed7fb0131"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a980a8258674d2445604499efc7c75462"><td class="memItemLeft" align="right" valign="top"><a id="a980a8258674d2445604499efc7c75462"></a>
+UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_create_id_hostname</b> (const char *hostname, uint16_t port)</td></tr>
+<tr class="separator:a980a8258674d2445604499efc7c75462"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89dee65fcd5b70d25abbf6d4a3ee59f2"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT UDPC_HContext&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">UDPC_init</a> (<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId, int isClient, int isUsingLibsodium)</td></tr>
+<tr class="memdesc:a89dee65fcd5b70d25abbf6d4a3ee59f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an UDPC_HContext that holds state for connections.  <a href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">More...</a><br /></td></tr>
+<tr class="separator:a89dee65fcd5b70d25abbf6d4a3ee59f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a614e2a058b89839d53fe9d348a058323"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT UDPC_HContext&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">UDPC_init_threaded_update</a> (<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId, int isClient, int isUsingLibsodium)</td></tr>
+<tr class="memdesc:a614e2a058b89839d53fe9d348a058323"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an UDPC_HContext that holds state for connections that auto-updates via a thread.  <a href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">More...</a><br /></td></tr>
+<tr class="separator:a614e2a058b89839d53fe9d348a058323"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9a5258877ad3084f7d29954be525bd6"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT UDPC_HContext&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">UDPC_init_threaded_update_ms</a> (<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId, int isClient, int updateMS, int isUsingLibsodium)</td></tr>
+<tr class="memdesc:ab9a5258877ad3084f7d29954be525bd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an UDPC_HContext that holds state for connections that auto-updates via a thread at a specified interval.  <a href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">More...</a><br /></td></tr>
+<tr class="separator:ab9a5258877ad3084f7d29954be525bd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fafce547e9185c29f42d06213b0ff4f"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">UDPC_enable_threaded_update</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a0fafce547e9185c29f42d06213b0ff4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables auto updating on a separate thread for the given UDPC_HContext.  <a href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">More...</a><br /></td></tr>
+<tr class="separator:a0fafce547e9185c29f42d06213b0ff4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a50763773d55aa7a2a9c7ad69575833"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">UDPC_enable_threaded_update_ms</a> (UDPC_HContext ctx, int updateMS)</td></tr>
+<tr class="memdesc:a1a50763773d55aa7a2a9c7ad69575833"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enables auto updating on a separate thread for the given UDPC_HContext with the specified update interval.  <a href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">More...</a><br /></td></tr>
+<tr class="separator:a1a50763773d55aa7a2a9c7ad69575833"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a404d2c7a83903004f928737241ecc63a"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">UDPC_disable_threaded_update</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a404d2c7a83903004f928737241ecc63a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disables auto updating on a separate thread for the given UDPC_HContext.  <a href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">More...</a><br /></td></tr>
+<tr class="separator:a404d2c7a83903004f928737241ecc63a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac01480f803b063e2b44794420df0f671"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">UDPC_is_valid_context</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:ac01480f803b063e2b44794420df0f671"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the given UDPC_HContext is valid (successfully initialized)  <a href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">More...</a><br /></td></tr>
+<tr class="separator:ac01480f803b063e2b44794420df0f671"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad0e88866d4c5cb9c0676bc8d7df574e"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">UDPC_destroy</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:aad0e88866d4c5cb9c0676bc8d7df574e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cleans up the UDPC_HContext.  <a href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">More...</a><br /></td></tr>
+<tr class="separator:aad0e88866d4c5cb9c0676bc8d7df574e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68fefba9edca7cd0a81d97ac27c70c0b"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">UDPC_update</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a68fefba9edca7cd0a81d97ac27c70c0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Updates the context.  <a href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">More...</a><br /></td></tr>
+<tr class="separator:a68fefba9edca7cd0a81d97ac27c70c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1192e0307f75feeac888fe5d49976f55"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">UDPC_client_initiate_connection</a> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId, int enableLibSodium)</td></tr>
+<tr class="memdesc:a1192e0307f75feeac888fe5d49976f55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initiate a connection to a server peer.  <a href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">More...</a><br /></td></tr>
+<tr class="separator:a1192e0307f75feeac888fe5d49976f55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7527954b63f502479bdd3771df7cf3a4"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">UDPC_queue_send</a> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> destinationId, int isChecked, const void *data, uint32_t size)</td></tr>
+<tr class="memdesc:a7527954b63f502479bdd3771df7cf3a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queues a packet to be sent to the specified peer.  <a href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">More...</a><br /></td></tr>
+<tr class="separator:a7527954b63f502479bdd3771df7cf3a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3f67ad23ae34b647b7f4dd17a8a96dd"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">UDPC_get_queue_send_current_size</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:aa3f67ad23ae34b647b7f4dd17a8a96dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the size of the data structure holding queued packets.  <a href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">More...</a><br /></td></tr>
+<tr class="separator:aa3f67ad23ae34b647b7f4dd17a8a96dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fb87c1522d353bd9fde4c94ec8454c2"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">UDPC_get_queued_size</a> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> id, int *exists)</td></tr>
+<tr class="memdesc:a1fb87c1522d353bd9fde4c94ec8454c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the size of a connection's queue of queued packets.  <a href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">More...</a><br /></td></tr>
+<tr class="separator:a1fb87c1522d353bd9fde4c94ec8454c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7983f38fe13677f5b35b90cefa54974f"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">UDPC_get_max_queued_size</a> ()</td></tr>
+<tr class="memdesc:a7983f38fe13677f5b35b90cefa54974f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the size limit of a connection's queue of queued packets.  <a href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">More...</a><br /></td></tr>
+<tr class="separator:a7983f38fe13677f5b35b90cefa54974f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a32e217a02b2e8ba05568aabfaecbcdcb"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">UDPC_set_accept_new_connections</a> (UDPC_HContext ctx, int isAccepting)</td></tr>
+<tr class="memdesc:a32e217a02b2e8ba05568aabfaecbcdcb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set whether or not the UDPC context will accept new connections.  <a href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">More...</a><br /></td></tr>
+<tr class="separator:a32e217a02b2e8ba05568aabfaecbcdcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44bc5cc29862c93e938ac8a625c56380"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">UDPC_drop_connection</a> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId, int dropAllWithAddr)</td></tr>
+<tr class="memdesc:a44bc5cc29862c93e938ac8a625c56380"><td class="mdescLeft">&#160;</td><td class="mdescRight">Drops an existing connection to a peer.  <a href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">More...</a><br /></td></tr>
+<tr class="separator:a44bc5cc29862c93e938ac8a625c56380"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a555a011e95445ed4a2aa88deb17082"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">UDPC_has_connection</a> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId)</td></tr>
+<tr class="memdesc:a4a555a011e95445ed4a2aa88deb17082"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a connection exists to the peer identified by the given <code>connectionId</code>.  <a href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">More...</a><br /></td></tr>
+<tr class="separator:a4a555a011e95445ed4a2aa88deb17082"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fe3e502f4c6f86ce5b2cd1f303aa213"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">UDPC_get_list_connected</a> (UDPC_HContext ctx, unsigned int *size)</td></tr>
+<tr class="memdesc:a7fe3e502f4c6f86ce5b2cd1f303aa213"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets a dynamically allocated array of connected peers' identifiers.  <a href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">More...</a><br /></td></tr>
+<tr class="separator:a7fe3e502f4c6f86ce5b2cd1f303aa213"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8880067a93211c257763c42264f6ceef"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">UDPC_free_list_connected</a> (<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> *list)</td></tr>
+<tr class="memdesc:a8880067a93211c257763c42264f6ceef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cleans up a dynamically allocated array of connected peers' identifiers.  <a href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">More...</a><br /></td></tr>
+<tr class="separator:a8880067a93211c257763c42264f6ceef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab6fb21c6f5b44123e2660f84561d404"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">UDPC_get_protocol_id</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:aab6fb21c6f5b44123e2660f84561d404"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the protocol id of the UDPC context.  <a href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">More...</a><br /></td></tr>
+<tr class="separator:aab6fb21c6f5b44123e2660f84561d404"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0720bec1922660c983b1b3d9f6a5de3a"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">UDPC_set_protocol_id</a> (UDPC_HContext ctx, uint32_t id)</td></tr>
+<tr class="memdesc:a0720bec1922660c983b1b3d9f6a5de3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the protocol id of the UDPC context.  <a href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">More...</a><br /></td></tr>
+<tr class="separator:a0720bec1922660c983b1b3d9f6a5de3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0c7d69eeda20e98696d5c89bbbab096"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT UDPC_LoggingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">UDPC_get_logging_type</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:ad0c7d69eeda20e98696d5c89bbbab096"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the logging type of the UDPC context.  <a href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">More...</a><br /></td></tr>
+<tr class="separator:ad0c7d69eeda20e98696d5c89bbbab096"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c90dc723e67a07bf65c1fc97e526305"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT UDPC_LoggingType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">UDPC_set_logging_type</a> (UDPC_HContext ctx, UDPC_LoggingType loggingType)</td></tr>
+<tr class="memdesc:a6c90dc723e67a07bf65c1fc97e526305"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the logging type of the UDPC context.  <a href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">More...</a><br /></td></tr>
+<tr class="separator:a6c90dc723e67a07bf65c1fc97e526305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c74f1b9ee0fec610087f83096c9679d"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">UDPC_get_receiving_events</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a8c74f1b9ee0fec610087f83096c9679d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns non-zero if the UDPC context will record events.  <a href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">More...</a><br /></td></tr>
+<tr class="separator:a8c74f1b9ee0fec610087f83096c9679d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a380c91ee395cff22189c7988c3381787"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">UDPC_set_receiving_events</a> (UDPC_HContext ctx, int isReceivingEvents)</td></tr>
+<tr class="memdesc:a380c91ee395cff22189c7988c3381787"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets whether or not UDPC will record events.  <a href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">More...</a><br /></td></tr>
+<tr class="separator:a380c91ee395cff22189c7988c3381787"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c05c6fe89edde1e05ba9b6d8b5f7510"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__Event.html">UDPC_Event</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">UDPC_get_event</a> (UDPC_HContext ctx, unsigned long *remaining)</td></tr>
+<tr class="memdesc:a2c05c6fe89edde1e05ba9b6d8b5f7510"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets a recorded event.  <a href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">More...</a><br /></td></tr>
+<tr class="separator:a2c05c6fe89edde1e05ba9b6d8b5f7510"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:affa8655a4e7e3475be441060e92213b3"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT <a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">UDPC_get_received</a> (UDPC_HContext ctx, unsigned long *remaining)</td></tr>
+<tr class="memdesc:affa8655a4e7e3475be441060e92213b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a received packet from a given UDPC context.  <a href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">More...</a><br /></td></tr>
+<tr class="separator:affa8655a4e7e3475be441060e92213b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68ed6dcb37c6024486fad28ab0bed845"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC_free_PacketInfo</a> (<a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> pInfo)</td></tr>
+<tr class="memdesc:a68ed6dcb37c6024486fad28ab0bed845"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a <a class="el" href="structUDPC__PacketInfo.html" title="Data representing a received/sent packet.">UDPC_PacketInfo</a>.  <a href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">More...</a><br /></td></tr>
+<tr class="separator:a68ed6dcb37c6024486fad28ab0bed845"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd0a7d5c0a17cf3351dbe5abf5f70df1"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">UDPC_set_libsodium_keys</a> (UDPC_HContext ctx, const unsigned char *sk, const unsigned char *pk)</td></tr>
+<tr class="memdesc:abd0a7d5c0a17cf3351dbe5abf5f70df1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets public/private keys used for packet verification.  <a href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">More...</a><br /></td></tr>
+<tr class="separator:abd0a7d5c0a17cf3351dbe5abf5f70df1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7eb0c77561f84a63dad29388d099fbe"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">UDPC_set_libsodium_key_easy</a> (UDPC_HContext ctx, const unsigned char *sk)</td></tr>
+<tr class="memdesc:ad7eb0c77561f84a63dad29388d099fbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the public/private keys used for packet verification.  <a href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">More...</a><br /></td></tr>
+<tr class="separator:ad7eb0c77561f84a63dad29388d099fbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62a5131b90653ccbfc86ad5db4031ba9"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">UDPC_unset_libsodium_keys</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a62a5131b90653ccbfc86ad5db4031ba9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes set keys if any used for packet verification.  <a href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">More...</a><br /></td></tr>
+<tr class="separator:a62a5131b90653ccbfc86ad5db4031ba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71f9bf85a02ddd1b4c921fe9b6694fe8"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">UDPC_add_whitelist_pk</a> (UDPC_HContext ctx, const unsigned char *pk)</td></tr>
+<tr class="memdesc:a71f9bf85a02ddd1b4c921fe9b6694fe8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a public key to the whitelist.  <a href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">More...</a><br /></td></tr>
+<tr class="separator:a71f9bf85a02ddd1b4c921fe9b6694fe8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94660d04e7f9b4d9c51a7b2c67707172"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">UDPC_has_whitelist_pk</a> (UDPC_HContext ctx, const unsigned char *pk)</td></tr>
+<tr class="memdesc:a94660d04e7f9b4d9c51a7b2c67707172"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a public key is in the whitelist.  <a href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">More...</a><br /></td></tr>
+<tr class="separator:a94660d04e7f9b4d9c51a7b2c67707172"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc2d3284e5c45d6cd888154e813a1383"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">UDPC_remove_whitelist_pk</a> (UDPC_HContext ctx, const unsigned char *pk)</td></tr>
+<tr class="memdesc:abc2d3284e5c45d6cd888154e813a1383"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes a public key from the whitelist.  <a href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">More...</a><br /></td></tr>
+<tr class="separator:abc2d3284e5c45d6cd888154e813a1383"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e2e0c6a6a442db2cb3223d26f849d26"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">UDPC_clear_whitelist</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:a0e2e0c6a6a442db2cb3223d26f849d26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clears the public key whitelist.  <a href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">More...</a><br /></td></tr>
+<tr class="separator:a0e2e0c6a6a442db2cb3223d26f849d26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab79769e36a92c346c6c410be158ddfe4"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">UDPC_get_auth_policy</a> (UDPC_HContext ctx)</td></tr>
+<tr class="memdesc:ab79769e36a92c346c6c410be158ddfe4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets how peers are handled regarding public key verification.  <a href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">More...</a><br /></td></tr>
+<tr class="separator:ab79769e36a92c346c6c410be158ddfe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d0dbbd258e17844a2f9a0e277789581"><td class="memItemLeft" align="right" valign="top">UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">UDPC_set_auth_policy</a> (UDPC_HContext ctx, int value)</td></tr>
+<tr class="memdesc:a8d0dbbd258e17844a2f9a0e277789581"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets how peers are handled regarding public key verification.  <a href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">More...</a><br /></td></tr>
+<tr class="separator:a8d0dbbd258e17844a2f9a0e277789581"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab858dbafe5755daded65ffa4b3e587ab"><td class="memItemLeft" align="right" valign="top"><a id="ab858dbafe5755daded65ffa4b3e587ab"></a>
+UDPC_EXPORT const char *&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_atostr_cid</b> (UDPC_HContext ctx, <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId)</td></tr>
+<tr class="separator:ab858dbafe5755daded65ffa4b3e587ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7bdaf35dc1691c3c13aab24eefa9003"><td class="memItemLeft" align="right" valign="top"><a id="af7bdaf35dc1691c3c13aab24eefa9003"></a>
+UDPC_EXPORT const char *&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_atostr</b> (UDPC_HContext ctx, UDPC_IPV6_ADDR_TYPE addr)</td></tr>
+<tr class="separator:af7bdaf35dc1691c3c13aab24eefa9003"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ae8e7d87f785dd3b3353a00005c3dc6"><td class="memItemLeft" align="right" valign="top"><a id="a2ae8e7d87f785dd3b3353a00005c3dc6"></a>
+UDPC_EXPORT UDPC_IPV6_ADDR_TYPE&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">UDPC_strtoa</a> (const char *addrStr)</td></tr>
+<tr class="memdesc:a2ae8e7d87f785dd3b3353a00005c3dc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">addrStr must be a valid ipv6 address or a valid ipv4 address <br /></td></tr>
+<tr class="separator:a2ae8e7d87f785dd3b3353a00005c3dc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c4ad0e4ce9a97b3506335aae16cb49"><td class="memItemLeft" align="right" valign="top"><a id="ad1c4ad0e4ce9a97b3506335aae16cb49"></a>
+UDPC_EXPORT UDPC_IPV6_ADDR_TYPE&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_strtoa_link</b> (const char *addrStr, uint32_t *linkId_out)</td></tr>
+<tr class="separator:ad1c4ad0e4ce9a97b3506335aae16cb49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac891801289f8be17e5db81b5de781190"><td class="memItemLeft" align="right" valign="top"><a id="ac891801289f8be17e5db81b5de781190"></a>
+UDPC_EXPORT UDPC_IPV6_ADDR_TYPE&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_a4toa6</b> (uint32_t a4_be)</td></tr>
+<tr class="separator:ac891801289f8be17e5db81b5de781190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f81a1abecf149abe26902ca5d72e316"><td class="memItemLeft" align="right" valign="top"><a id="a5f81a1abecf149abe26902ca5d72e316"></a>
+UDPC_EXPORT int&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_is_big_endian</b> ()</td></tr>
+<tr class="separator:a5f81a1abecf149abe26902ca5d72e316"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09093c7edd8ed04407c84a94e0d02587"><td class="memItemLeft" align="right" valign="top"><a id="a09093c7edd8ed04407c84a94e0d02587"></a>
+UDPC_EXPORT uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_no16i</b> (uint16_t i)</td></tr>
+<tr class="separator:a09093c7edd8ed04407c84a94e0d02587"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e62beb3d497732f5e1d79e19878198c"><td class="memItemLeft" align="right" valign="top"><a id="a3e62beb3d497732f5e1d79e19878198c"></a>
+UDPC_EXPORT uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_no32i</b> (uint32_t i)</td></tr>
+<tr class="separator:a3e62beb3d497732f5e1d79e19878198c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d6d9407ed6743a23283d8711652d757"><td class="memItemLeft" align="right" valign="top"><a id="a0d6d9407ed6743a23283d8711652d757"></a>
+UDPC_EXPORT uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_no64i</b> (uint64_t i)</td></tr>
+<tr class="separator:a0d6d9407ed6743a23283d8711652d757"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61f1ec575cd8a1020bf4d53a72497ab6"><td class="memItemLeft" align="right" valign="top"><a id="a61f1ec575cd8a1020bf4d53a72497ab6"></a>
+UDPC_EXPORT float&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_no32f</b> (float f)</td></tr>
+<tr class="separator:a61f1ec575cd8a1020bf4d53a72497ab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93a1a33c4d5dcd4f3e829ce4b15df11c"><td class="memItemLeft" align="right" valign="top"><a id="a93a1a33c4d5dcd4f3e829ce4b15df11c"></a>
+UDPC_EXPORT double&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_no64f</b> (double f)</td></tr>
+<tr class="separator:a93a1a33c4d5dcd4f3e829ce4b15df11c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:aa5c197773a0914125cb358771139065c"><td class="memItemLeft" align="right" valign="top"><a id="aa5c197773a0914125cb358771139065c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">UDPC_SILENT</a></td></tr>
+<tr class="memdesc:aa5c197773a0914125cb358771139065c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Does not log anything. <br /></td></tr>
+<tr class="separator:aa5c197773a0914125cb358771139065c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac04213a4287500a9c5330f543eac3103"><td class="memItemLeft" align="right" valign="top"><a id="ac04213a4287500a9c5330f543eac3103"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">UDPC_ERROR</a></td></tr>
+<tr class="memdesc:ac04213a4287500a9c5330f543eac3103"><td class="mdescLeft">&#160;</td><td class="mdescRight">Only log errors. <br /></td></tr>
+<tr class="separator:ac04213a4287500a9c5330f543eac3103"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cc5d705069747eb439a1c5607baac17"><td class="memItemLeft" align="right" valign="top"><a id="a9cc5d705069747eb439a1c5607baac17"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">UDPC_WARNING</a></td></tr>
+<tr class="memdesc:a9cc5d705069747eb439a1c5607baac17"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log errors and warnings. <br /></td></tr>
+<tr class="separator:a9cc5d705069747eb439a1c5607baac17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a248f51c4df127b7fd3a5c91ad5509d15"><td class="memItemLeft" align="right" valign="top"><a id="a248f51c4df127b7fd3a5c91ad5509d15"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">UDPC_INFO</a></td></tr>
+<tr class="memdesc:a248f51c4df127b7fd3a5c91ad5509d15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log errors, warnings, and info. <br /></td></tr>
+<tr class="separator:a248f51c4df127b7fd3a5c91ad5509d15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5741af4e5cf1da40fe4a7b92cd1c431"><td class="memItemLeft" align="right" valign="top"><a id="ad5741af4e5cf1da40fe4a7b92cd1c431"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">UDPC_VERBOSE</a></td></tr>
+<tr class="memdesc:ad5741af4e5cf1da40fe4a7b92cd1c431"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log errors, warning, info, and verbose. <br /></td></tr>
+<tr class="separator:ad5741af4e5cf1da40fe4a7b92cd1c431"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96ecd597f88d458ed108f33e4f0a6612"><td class="memItemLeft" align="right" valign="top"><a id="a96ecd597f88d458ed108f33e4f0a6612"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">UDPC_AUTH_POLICY_FALLBACK</a> =0</td></tr>
+<tr class="memdesc:a96ecd597f88d458ed108f33e4f0a6612"><td class="mdescLeft">&#160;</td><td class="mdescRight">All peers will not be denied regardless of use of public key verification. <br /></td></tr>
+<tr class="separator:a96ecd597f88d458ed108f33e4f0a6612"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6af4629253b3ed1f411015410cee9ad3"><td class="memItemLeft" align="right" valign="top"><a id="a6af4629253b3ed1f411015410cee9ad3"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">UDPC_AUTH_POLICY_STRICT</a></td></tr>
+<tr class="memdesc:a6af4629253b3ed1f411015410cee9ad3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Only peers with public key verification will be allowed. <br /></td></tr>
+<tr class="separator:a6af4629253b3ed1f411015410cee9ad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72343e4853bf37ad09cb5cebfadc0de6"><td class="memItemLeft" align="right" valign="top"><a id="a72343e4853bf37ad09cb5cebfadc0de6"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_NONE</b></td></tr>
+<tr class="separator:a72343e4853bf37ad09cb5cebfadc0de6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21a88eb4529c120f49036db4b33505cd"><td class="memItemLeft" align="right" valign="top"><a id="a21a88eb4529c120f49036db4b33505cd"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_REQUEST_CONNECT</b></td></tr>
+<tr class="separator:a21a88eb4529c120f49036db4b33505cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b4bd6a74bd9c6d2d93ca1c1e12bcf94"><td class="memItemLeft" align="right" valign="top"><a id="a6b4bd6a74bd9c6d2d93ca1c1e12bcf94"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_REQUEST_DISCONNECT</b></td></tr>
+<tr class="separator:a6b4bd6a74bd9c6d2d93ca1c1e12bcf94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcb673b618b1a667fde68d33b1458aba"><td class="memItemLeft" align="right" valign="top"><a id="abcb673b618b1a667fde68d33b1458aba"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_CONNECTED</b></td></tr>
+<tr class="separator:abcb673b618b1a667fde68d33b1458aba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac839f06a0f38fbe1234f834c21595ef"><td class="memItemLeft" align="right" valign="top"><a id="aac839f06a0f38fbe1234f834c21595ef"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_DISCONNECTED</b></td></tr>
+<tr class="separator:aac839f06a0f38fbe1234f834c21595ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8619c6ec9a86458dfa4492967586a5d5"><td class="memItemLeft" align="right" valign="top"><a id="a8619c6ec9a86458dfa4492967586a5d5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_FAIL_CONNECT</b></td></tr>
+<tr class="separator:a8619c6ec9a86458dfa4492967586a5d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a339bec321cb608fcd90fcd7cea102b11"><td class="memItemLeft" align="right" valign="top"><a id="a339bec321cb608fcd90fcd7cea102b11"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>UDPC_ET_GOOD_MODE</b></td></tr>
+<tr class="separator:a339bec321cb608fcd90fcd7cea102b11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Public API for UDPConnection. </p>
+</div><h2 class="groupheader">Typedef Documentation</h2>
+<a id="a228cd7ddf56a4e76e216bc3b80e8bd4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a228cd7ddf56a4e76e216bc3b80e8bd4a">&#9670;&nbsp;</a></span>UDPC_AuthPolicy</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum UDPC_EXPORT <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Note auth policy will only take effect if public key verification of packets is enabled (if libsodium is enabled). </p>
+
+</div>
+</div>
+<a id="ae5afb11964c7a55edf34ddf9097779b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5afb11964c7a55edf34ddf9097779b2">&#9670;&nbsp;</a></span>UDPC_ConnectionId</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Data identifying a peer via addr, port, and scope_id. </p>
+<p>This struct needn't be used directly; use <a class="el" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d" title="Creates an UDPC_ConnectionId with the given addr and port.">UDPC_create_id()</a>, <a class="el" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19" title="Creates an UDPC_ConnectionId with the given addr, scope_id, and port.">UDPC_create_id_full()</a>, <a class="el" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df" title="Creates an UDPC_ConnectionId with the given port.">UDPC_create_id_anyaddr()</a>, or <a class="el" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131" title="Creates an UDPC_ConnectionId with the given addr string and port.">UDPC_create_id_easy()</a> to create one. This struct does not hold dynamic data, so there is no need to free it. </p>
+
+</div>
+</div>
+<a id="a7b3215b65686670720f098eda2ca1eed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b3215b65686670720f098eda2ca1eed">&#9670;&nbsp;</a></span>UDPC_Event</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__Event.html">UDPC_Event</a> <a class="el" href="structUDPC__Event.html">UDPC_Event</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A struct containing information related to the type of event. </p>
+<p>Note that instances of this struct received from a call to <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a> will not store any useful data in its union member variable <code>v</code> (it will only be used internally). Thus, all events received through a call to <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a> will contain a valid <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> <code>conId</code> that identifies the peer that the event is referring to. </p>
+
+</div>
+</div>
+<a id="adaa0534bf7f04bb2f6ce8975c99c4af0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adaa0534bf7f04bb2f6ce8975c99c4af0">&#9670;&nbsp;</a></span>UDPC_EventType</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum UDPC_EXPORT <a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>An enum describing the type of event. </p>
+<p>Note that only the following values will be presented when using <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a></p><ul>
+<li>UDPC_ET_NONE: No events have ocurred</li>
+<li>UDPC_ET_CONNECTED: A peer has initiated a connection</li>
+<li>UDPC_ET_DISCONNECTED: A peer has disconnected</li>
+<li>UDPC_ET_FAIL_CONNECT: Failed to establish a connection to server peer</li>
+<li>UDPC_ET_GOOD_MODE: The connection has switched to "good mode"</li>
+<li>UDPC_ET_BAD_MODE: The connection has switched to "bad mode"</li>
+</ul>
+<p>The other unmentioned enum values are used internally, and should never be returned in a call to <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a>.</p>
+<p>All events returned by <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a> will have set the member variable <code>conId</code> in the <a class="el" href="structUDPC__Event.html" title="A struct containing information related to the type of event.">UDPC_Event</a> which refers to the peer with which the event ocurred. </p>
+
+</div>
+</div>
+<a id="ae0261958047ebb5c6a402aa805e4e55b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0261958047ebb5c6a402aa805e4e55b">&#9670;&nbsp;</a></span>UDPC_PacketInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct UDPC_EXPORT <a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> <a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Data representing a received/sent packet. </p>
+<p>If data is NULL or dataSize is 0, then this packet is invalid.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This struct must be free'd with a call to UDPC_free_PacketInfo to avoid a memory leak. </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a71f9bf85a02ddd1b4c921fe9b6694fe8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71f9bf85a02ddd1b4c921fe9b6694fe8">&#9670;&nbsp;</a></span>UDPC_add_whitelist_pk()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_add_whitelist_pk </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>pk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Adds a public key to the whitelist. </p>
+<p>By default the whitelist is empty and any peer regardless of key will not be denied connection.</p>
+<p>This function adds one public key to the whitelist. If the whitelist is not empty, then all peers that do not have the matching public key will be denied connection.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>The size of the whitelist on success, zero otherwise </dd></dl>
+
+</div>
+</div>
+<a id="a0e2e0c6a6a442db2cb3223d26f849d26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e2e0c6a6a442db2cb3223d26f849d26">&#9670;&nbsp;</a></span>UDPC_clear_whitelist()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_clear_whitelist </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Clears the public key whitelist. </p>
+<p>If the whitelist is empty, then no connections will be denied.</p>
+<p>If there are keys in the whitelist, then new connections will only be allowed if the peer uses a public key in the whitelist.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Zero if the context is invalid or libsodium is not enabled, non-zero if the whitelist was successfully cleared </dd></dl>
+
+</div>
+</div>
+<a id="a1192e0307f75feeac888fe5d49976f55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1192e0307f75feeac888fe5d49976f55">&#9670;&nbsp;</a></span>UDPC_client_initiate_connection()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_client_initiate_connection </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>connectionId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>enableLibSodium</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initiate a connection to a server peer. </p>
+<p>Note that this function does nothing on a server context.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The context to initiate a connection from </td></tr>
+    <tr><td class="paramname">connectionId</td><td>The server peer to initiate a connection to </td></tr>
+    <tr><td class="paramname">enableLibSodium</td><td>If packet headers should be verified with the server peer (Fails if UDPC was not compiled with libsodium support) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aea7e32ca9fdc04530f95c97459391e6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea7e32ca9fdc04530f95c97459391e6d">&#9670;&nbsp;</a></span>UDPC_create_id()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> UDPC_create_id </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_IPV6_ADDR_TYPE&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr and port. </p>
+<p>port should be in native byte order (not network/big-endian). This means that there is no need to convert the 16-bit value to network byte order, this will be done automatically by this library when necessary (without modifying the value in the used <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a>).</p>
+<dl class="section return"><dt>Returns</dt><dd>An initialized <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> </dd></dl>
+
+</div>
+</div>
+<a id="a0fa3e1e54877029a226ab9cfb74215df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fa3e1e54877029a226ab9cfb74215df">&#9670;&nbsp;</a></span>UDPC_create_id_anyaddr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> UDPC_create_id_anyaddr </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given port. </p>
+<p>The address contained in the returned <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> will be zeroed out (the "anyaddr" address). port should be in native byte order (not network/big-endian).</p>
+<dl class="section return"><dt>Returns</dt><dd>An initialized <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> </dd></dl>
+
+</div>
+</div>
+<a id="a8b80d2df882f03aeee8a92bed7fb0131"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b80d2df882f03aeee8a92bed7fb0131">&#9670;&nbsp;</a></span>UDPC_create_id_easy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> UDPC_create_id_easy </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>addrString</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr string and port. </p>
+<p>The address string should be a valid ipv6 or ipv4 address. (If an ipv4 address is given, the internal address of the returned <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> will be ipv4-mapped ipv6 address.) port should be in native byte order (not network/big-endian).</p>
+<dl class="section return"><dt>Returns</dt><dd>An initialized <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab7cb345ce117c04017afd443e5748f19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7cb345ce117c04017afd443e5748f19">&#9670;&nbsp;</a></span>UDPC_create_id_full()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> UDPC_create_id_full </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_IPV6_ADDR_TYPE&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>scope_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> with the given addr, scope_id, and port. </p>
+<p>port should be in native byte order (not network/big-endian).</p>
+<dl class="section return"><dt>Returns</dt><dd>An initialized <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> </dd></dl>
+
+</div>
+</div>
+<a id="aad0e88866d4c5cb9c0676bc8d7df574e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad0e88866d4c5cb9c0676bc8d7df574e">&#9670;&nbsp;</a></span>UDPC_destroy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_destroy </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cleans up the UDPC_HContext. </p>
+<p>If auto updating was enabled for the given context, it will gracefully stop the thread before cleaning up the context.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This function must be called after a UDPC_HContext is no longer used to avoid memory leaks. </dd></dl>
+
+</div>
+</div>
+<a id="a404d2c7a83903004f928737241ecc63a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a404d2c7a83903004f928737241ecc63a">&#9670;&nbsp;</a></span>UDPC_disable_threaded_update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_disable_threaded_update </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Disables auto updating on a separate thread for the given UDPC_HContext. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The context to disable auto updating for </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if auto updating is disabled. If the context already had auto updating disabled, this function will return zero. </dd></dl>
+
+</div>
+</div>
+<a id="a44bc5cc29862c93e938ac8a625c56380"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44bc5cc29862c93e938ac8a625c56380">&#9670;&nbsp;</a></span>UDPC_drop_connection()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_drop_connection </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>connectionId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>dropAllWithAddr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Drops an existing connection to a peer. </p>
+<p>Note that UDPC will send a disconnect packet to the peer before removing the internal connection data handling the connection to that peer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">connectionId</td><td>The identifier of the peer to disconnect from </td></tr>
+    <tr><td class="paramname">dropAllWithAddr</td><td>Set to non-zero to drop all peers with the ip address specified in <code>connectionId</code> </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0fafce547e9185c29f42d06213b0ff4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fafce547e9185c29f42d06213b0ff4f">&#9670;&nbsp;</a></span>UDPC_enable_threaded_update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_enable_threaded_update </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enables auto updating on a separate thread for the given UDPC_HContext. </p>
+<p>By default, the update interval is set to 8 milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The context to enable auto updating for </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if auto updating is enabled. If the context already had auto updating enabled, this function will return zero. </dd></dl>
+
+</div>
+</div>
+<a id="a1a50763773d55aa7a2a9c7ad69575833"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a50763773d55aa7a2a9c7ad69575833">&#9670;&nbsp;</a></span>UDPC_enable_threaded_update_ms()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_enable_threaded_update_ms </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>updateMS</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enables auto updating on a separate thread for the given UDPC_HContext with the specified update interval. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The context to enable auto updating for </td></tr>
+    <tr><td class="paramname">updateMS</td><td>The interval to update at in milliseconds (clamped at a minimum of 4 ms and a maximum of 333 ms) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if auto updating is enabled. If the context already had auto updating enabled, this function will return zero. </dd></dl>
+
+</div>
+</div>
+<a id="a8880067a93211c257763c42264f6ceef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8880067a93211c257763c42264f6ceef">&#9670;&nbsp;</a></span>UDPC_free_list_connected()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_free_list_connected </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> *&#160;</td>
+          <td class="paramname"><em>list</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cleans up a dynamically allocated array of connected peers' identifiers. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>The array to clean up </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a68ed6dcb37c6024486fad28ab0bed845"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68ed6dcb37c6024486fad28ab0bed845">&#9670;&nbsp;</a></span>UDPC_free_PacketInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_free_PacketInfo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a>&#160;</td>
+          <td class="paramname"><em>pInfo</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Frees a <a class="el" href="structUDPC__PacketInfo.html" title="Data representing a received/sent packet.">UDPC_PacketInfo</a>. </p>
+<p>Internally, the member variable <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">UDPC_PacketInfo::data</a> will be free'd and set to NULL and <a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">UDPC_PacketInfo::dataSize</a> will be set to 0 if the given packet is valid. </p>
+
+</div>
+</div>
+<a id="ab79769e36a92c346c6c410be158ddfe4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab79769e36a92c346c6c410be158ddfe4">&#9670;&nbsp;</a></span>UDPC_get_auth_policy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_get_auth_policy </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets how peers are handled regarding public key verification. </p>
+<p>If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>The current auth policy (see <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a>) , or zero on fail </dd></dl>
+
+</div>
+</div>
+<a id="a2c05c6fe89edde1e05ba9b6d8b5f7510"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c05c6fe89edde1e05ba9b6d8b5f7510">&#9670;&nbsp;</a></span>UDPC_get_event()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__Event.html">UDPC_Event</a> UDPC_get_event </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>remaining</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets a recorded event. </p>
+<p>See <a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a> for possible types of a <a class="el" href="structUDPC__Event.html" title="A struct containing information related to the type of event.">UDPC_Event</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">remaining</td><td>Pointer to set the number of remaining events that can be returned </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>An <a class="el" href="structUDPC__Event.html" title="A struct containing information related to the type of event.">UDPC_Event</a> (will be of type UDPC_ET_NONE if there are no more events) </dd></dl>
+
+</div>
+</div>
+<a id="a7fe3e502f4c6f86ce5b2cd1f303aa213"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7fe3e502f4c6f86ce5b2cd1f303aa213">&#9670;&nbsp;</a></span>UDPC_get_list_connected()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>* UDPC_get_list_connected </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned int *&#160;</td>
+          <td class="paramname"><em>size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets a dynamically allocated array of connected peers' identifiers. </p>
+<p>Note that an additional element is appended to the array that is initialized with all fields to zero.</p>
+<dl class="section warning"><dt>Warning</dt><dd>One must call <a class="el" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef" title="Cleans up a dynamically allocated array of connected peers&#39; identifiers.">UDPC_free_list_connected()</a> with the returned array to clean up data to avoid a memory leak</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">size</td><td>Pointer to an unsigned int to set the size of the returned array (set to NULL to not get a size) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A dynamically allocated array of identifiers </dd></dl>
+
+</div>
+</div>
+<a id="ad0c7d69eeda20e98696d5c89bbbab096"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0c7d69eeda20e98696d5c89bbbab096">&#9670;&nbsp;</a></span>UDPC_get_logging_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT UDPC_LoggingType UDPC_get_logging_type </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the logging type of the UDPC context. </p>
+<p>See UDPC_LoggingType for possible values.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The logging type of the UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="a7983f38fe13677f5b35b90cefa54974f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7983f38fe13677f5b35b90cefa54974f">&#9670;&nbsp;</a></span>UDPC_get_max_queued_size()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT unsigned long UDPC_get_max_queued_size </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the size limit of a connection's queue of queued packets. </p>
+<p>Note that a call to this function does not use any locks, as the limit is known at compile time and is the same for all UDPC connections.</p>
+<dl class="section return"><dt>Returns</dt><dd>The size limit of a connection's queue </dd></dl>
+
+</div>
+</div>
+<a id="aab6fb21c6f5b44123e2660f84561d404"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab6fb21c6f5b44123e2660f84561d404">&#9670;&nbsp;</a></span>UDPC_get_protocol_id()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT uint32_t UDPC_get_protocol_id </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the protocol id of the UDPC context. </p>
+<p>UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.</p>
+<p>One can use <a class="el" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a" title="Sets the protocol id of the UDPC context.">UDPC_set_protocol_id()</a> to change it.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The protocol id of the given UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="aa3f67ad23ae34b647b7f4dd17a8a96dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3f67ad23ae34b647b7f4dd17a8a96dd">&#9670;&nbsp;</a></span>UDPC_get_queue_send_current_size()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT unsigned long UDPC_get_queue_send_current_size </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the size of the data structure holding queued packets. </p>
+<p>Note that a UDPC context holds a different data structure per established connection that holds a limited amount of packets to send. If a connection's queue is full, it will not be removed from the main queue that this function (and <a class="el" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4" title="Queues a packet to be sent to the specified peer.">UDPC_queue_send()</a>) uses. The queue that this function refers to does not have an imposed limit as it is implemented as a thread-safe linked list (data is dynamically stored on the heap) and access to this data structure is faster than accessing a connection's internal queue. Also note that this queue holds packets for all connections this context maintains. Thus if one connection has free space, then it may partially remove packets only destined for that connection from the queue this function refers to.</p>
+<dl class="section return"><dt>Returns</dt><dd>The size of the queue </dd></dl>
+
+</div>
+</div>
+<a id="a1fb87c1522d353bd9fde4c94ec8454c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fb87c1522d353bd9fde4c94ec8454c2">&#9670;&nbsp;</a></span>UDPC_get_queued_size()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT unsigned long UDPC_get_queued_size </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>exists</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the size of a connection's queue of queued packets. </p>
+<p>Note that a UDPC context holds a queue per established connection that holds a limited amount of packets to send. This function checks a connection's internal queue, but must do so after locking an internal mutex (a call to <a class="el" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b" title="Updates the context.">UDPC_update()</a> will lock this mutex, regardless of whether or not the context is using threaded update).</p>
+<p>If <code>exists</code> is a non-null pointer to an <code>int</code>, and a connection to a peer identified by <code>id</code> exists, then the value of <code>exists</code> will be set to non-zero, otherwise a non-existing peer will set the value of <code>exists</code> to zero.</p>
+<dl class="section return"><dt>Returns</dt><dd>The size of a connection's queue </dd></dl>
+
+</div>
+</div>
+<a id="affa8655a4e7e3475be441060e92213b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#affa8655a4e7e3475be441060e92213b3">&#9670;&nbsp;</a></span>UDPC_get_received()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT <a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> UDPC_get_received </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>remaining</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get a received packet from a given UDPC context. </p>
+<dl class="section warning"><dt>Warning</dt><dd>The received packet (if valid) must be free'd with a call to <a class="el" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC_free_PacketInfo()</a> to avoid a memory leak. </dd></dl>
+
+</div>
+</div>
+<a id="a8c74f1b9ee0fec610087f83096c9679d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c74f1b9ee0fec610087f83096c9679d">&#9670;&nbsp;</a></span>UDPC_get_receiving_events()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_get_receiving_events </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns non-zero if the UDPC context will record events. </p>
+<p>Events that have ocurred can by polled by calling <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a></p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if receiving events </dd></dl>
+
+</div>
+</div>
+<a id="a4a555a011e95445ed4a2aa88deb17082"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a555a011e95445ed4a2aa88deb17082">&#9670;&nbsp;</a></span>UDPC_has_connection()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_has_connection </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>connectionId</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Checks if a connection exists to the peer identified by the given <code>connectionId</code>. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">connectionId</td><td>The identifier for a peer</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if a connection to the peer exists </dd></dl>
+
+</div>
+</div>
+<a id="a94660d04e7f9b4d9c51a7b2c67707172"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94660d04e7f9b4d9c51a7b2c67707172">&#9670;&nbsp;</a></span>UDPC_has_whitelist_pk()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_has_whitelist_pk </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>pk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Checks if a public key is in the whitelist. </p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Non-zero if the given public key is in the whitelist </dd></dl>
+
+</div>
+</div>
+<a id="a89dee65fcd5b70d25abbf6d4a3ee59f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a89dee65fcd5b70d25abbf6d4a3ee59f2">&#9670;&nbsp;</a></span>UDPC_init()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT UDPC_HContext UDPC_init </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>listenId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isClient</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isUsingLibsodium</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an UDPC_HContext that holds state for connections. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">listenId</td><td>The addr and port to listen on (contained in a <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a>) </td></tr>
+    <tr><td class="paramname">isClient</td><td>Whether or not this instance is a client or a server </td></tr>
+    <tr><td class="paramname">isUsingLibsodium</td><td>Set to non-zero if libsodium verification of packets should be enabled (fails if libsodium support was not compiled)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p><a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671" title="Checks if the given UDPC_HContext is valid (successfully initialized)">UDPC_is_valid_context()</a> may be used to check if the context was successfully created.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The received UDPC_HContext must be freed with a call to <a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e" title="Cleans up the UDPC_HContext.">UDPC_destroy()</a>.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="a614e2a058b89839d53fe9d348a058323"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a614e2a058b89839d53fe9d348a058323">&#9670;&nbsp;</a></span>UDPC_init_threaded_update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>listenId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isClient</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isUsingLibsodium</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an UDPC_HContext that holds state for connections that auto-updates via a thread. </p>
+<p>By default, the update interval is set to 8 milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">listenId</td><td>The addr and port to listen on (contained in a <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a>) </td></tr>
+    <tr><td class="paramname">isClient</td><td>Whether or not this instance is a client or a server </td></tr>
+    <tr><td class="paramname">isUsingLibsodium</td><td>Set to non-zero if libsodium verification of packets should be enabled (fails if libsodium support was not compiled)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p><a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671" title="Checks if the given UDPC_HContext is valid (successfully initialized)">UDPC_is_valid_context()</a> may be used to check if the context was successfully created.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The received UDPC_HContext must be freed with a call to <a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e" title="Cleans up the UDPC_HContext.">UDPC_destroy()</a>.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="ab9a5258877ad3084f7d29954be525bd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9a5258877ad3084f7d29954be525bd6">&#9670;&nbsp;</a></span>UDPC_init_threaded_update_ms()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update_ms </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>listenId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isClient</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>updateMS</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isUsingLibsodium</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates an UDPC_HContext that holds state for connections that auto-updates via a thread at a specified interval. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">listenId</td><td>The addr and port to listen on (contained in a <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a>) </td></tr>
+    <tr><td class="paramname">isClient</td><td>Whether or not this instance is a client or a server </td></tr>
+    <tr><td class="paramname">updateMS</td><td>The interval to update at in milliseconds (clamped at a minimum of 4 ms and a maximum of 333 ms) </td></tr>
+    <tr><td class="paramname">isUsingLibsodium</td><td>Set to non-zero if libsodium verification of packets should be enabled (fails if libsodium support was not compiled)</td></tr>
+  </table>
+  </dd>
+</dl>
+<p><a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671" title="Checks if the given UDPC_HContext is valid (successfully initialized)">UDPC_is_valid_context()</a> may be used to check if the context was successfully created.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The received UDPC_HContext must be freed with a call to <a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e" title="Cleans up the UDPC_HContext.">UDPC_destroy()</a>.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="ac01480f803b063e2b44794420df0f671"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac01480f803b063e2b44794420df0f671">&#9670;&nbsp;</a></span>UDPC_is_valid_context()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_is_valid_context </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Checks if the given UDPC_HContext is valid (successfully initialized) </p>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if the given context is valid </dd></dl>
+
+</div>
+</div>
+<a id="a7527954b63f502479bdd3771df7cf3a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7527954b63f502479bdd3771df7cf3a4">&#9670;&nbsp;</a></span>UDPC_queue_send()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_queue_send </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td>
+          <td class="paramname"><em>destinationId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isChecked</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Queues a packet to be sent to the specified peer. </p>
+<p>Note that there must already be an established connection with the peer. If a packet is queued for a peer that is not connected, it will be dropped and logged with log-level warning. A client can establish a connection to a server peer via a call to <a class="el" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55" title="Initiate a connection to a server peer.">UDPC_client_initiate_connection()</a> or UDPC_client_initiate_connection_pk(). A server must receive an initiate-connection-packet from a client to establish a connection (sent by previously mentioned UDPC_client_initiate_* functions).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The context to send a packet on </td></tr>
+    <tr><td class="paramname">destinationId</td><td>The peer to send a packet to </td></tr>
+    <tr><td class="paramname">isChecked</td><td>Set to non-zero if the packet should be re-sent if the peer doesn't receive it </td></tr>
+    <tr><td class="paramname">data</td><td>A pointer to data to be sent in a packet </td></tr>
+    <tr><td class="paramname">size</td><td>The size in bytes of the data to be sent </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="abc2d3284e5c45d6cd888154e813a1383"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc2d3284e5c45d6cd888154e813a1383">&#9670;&nbsp;</a></span>UDPC_remove_whitelist_pk()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_remove_whitelist_pk </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>pk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Removes a public key from the whitelist. </p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Non-zero if a public key was removed </dd></dl>
+
+</div>
+</div>
+<a id="a32e217a02b2e8ba05568aabfaecbcdcb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a32e217a02b2e8ba05568aabfaecbcdcb">&#9670;&nbsp;</a></span>UDPC_set_accept_new_connections()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_set_accept_new_connections </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isAccepting</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set whether or not the UDPC context will accept new connections. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">isAccepting</td><td>Set to non-zero to accept connections </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The previous setting (1 if accepting, 0 if not) </dd></dl>
+
+</div>
+</div>
+<a id="a8d0dbbd258e17844a2f9a0e277789581"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d0dbbd258e17844a2f9a0e277789581">&#9670;&nbsp;</a></span>UDPC_set_auth_policy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_set_auth_policy </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets how peers are handled regarding public key verification. </p>
+<p>If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>The previous auth policy (see <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a>), or zero on fail </dd></dl>
+
+</div>
+</div>
+<a id="ad7eb0c77561f84a63dad29388d099fbe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7eb0c77561f84a63dad29388d099fbe">&#9670;&nbsp;</a></span>UDPC_set_libsodium_key_easy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_set_libsodium_key_easy </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>sk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the public/private keys used for packet verification. </p>
+<p>This function is almost identical with UDPC_set_libsodium_keys, except it will utilize libsodium to generate the associated public key with the given private key.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Non-zero if keys were successfully set, zero if context is invalid or libsodium is not enabled </dd></dl>
+
+</div>
+</div>
+<a id="abd0a7d5c0a17cf3351dbe5abf5f70df1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd0a7d5c0a17cf3351dbe5abf5f70df1">&#9670;&nbsp;</a></span>UDPC_set_libsodium_keys()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_set_libsodium_keys </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>sk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>pk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets public/private keys used for packet verification. </p>
+<p>If keys are not set and packet verification is enabled, for each new connection new keys will be generated then used. The auto-generated keys used will be unique per connection. Conversely if keys are set, then new connections will use the given keys.</p>
+<p>Note that connections established before calling this function will not use the given keys.</p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Non-zero if keys were successfully set, zero if context is invalid or libsodium is not enabled </dd></dl>
+
+</div>
+</div>
+<a id="a6c90dc723e67a07bf65c1fc97e526305"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c90dc723e67a07bf65c1fc97e526305">&#9670;&nbsp;</a></span>UDPC_set_logging_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT UDPC_LoggingType UDPC_set_logging_type </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UDPC_LoggingType&#160;</td>
+          <td class="paramname"><em>loggingType</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the logging type of the UDPC context. </p>
+<p>See UDPC_LoggingType for possible values.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">loggingType</td><td>The logging type to set to </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The previously set logging type </dd></dl>
+
+</div>
+</div>
+<a id="a0720bec1922660c983b1b3d9f6a5de3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0720bec1922660c983b1b3d9f6a5de3a">&#9670;&nbsp;</a></span>UDPC_set_protocol_id()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT uint32_t UDPC_set_protocol_id </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the protocol id of the UDPC context. </p>
+<p>UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">id</td><td>The new id to use as the protocol id </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The previous protocol id of the UDPC context </dd></dl>
+
+</div>
+</div>
+<a id="a380c91ee395cff22189c7988c3381787"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a380c91ee395cff22189c7988c3381787">&#9670;&nbsp;</a></span>UDPC_set_receiving_events()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_set_receiving_events </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>isReceivingEvents</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets whether or not UDPC will record events. </p>
+<p>Events that have ocurred can by polled by calling <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a></p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ctx</td><td>The UDPC context </td></tr>
+    <tr><td class="paramname">isReceivingEvents</td><td>Set to non-zero to receive events </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>non-zero if UDPC was previously receiving events </dd></dl>
+
+</div>
+</div>
+<a id="a62a5131b90653ccbfc86ad5db4031ba9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62a5131b90653ccbfc86ad5db4031ba9">&#9670;&nbsp;</a></span>UDPC_unset_libsodium_keys()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT int UDPC_unset_libsodium_keys </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Removes set keys if any used for packet verification. </p>
+<p>Note that public key verification will not occur if it is not enabled during the call to <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2" title="Creates an UDPC_HContext that holds state for connections.">UDPC_init()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>Zero if context is invalid or libsodium is not enabled </dd></dl>
+
+</div>
+</div>
+<a id="a68fefba9edca7cd0a81d97ac27c70c0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68fefba9edca7cd0a81d97ac27c70c0b">&#9670;&nbsp;</a></span>UDPC_update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">UDPC_EXPORT void UDPC_update </td>
+          <td>(</td>
+          <td class="paramtype">UDPC_HContext&#160;</td>
+          <td class="paramname"><em>ctx</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Updates the context. </p>
+<p>Updating consists of:</p><ul>
+<li>Checking if peers have timed out</li>
+<li>Handling requests to connect to server peers as a client</li>
+<li>Sending packets to connected peers</li>
+<li>Receiving packets from connected peers</li>
+<li>Calculating round-trip-time (RTT) to peers</li>
+<li>Checking if a peer has not received a packet and queuing that packet to be resent (this is done by using an ack)</li>
+</ul>
+<p>If auto updating was enabled for the context, then there is no need to call this function.</p>
+<p>Note that the context can only receive at most one packet per call to update (due to the fact that UDPC created its UDP socket to not block on receive checks). This is why it is expected to either call this function several times a second (such as in a game's update loop), or have auto-updating enabled via <a class="el" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323" title="Creates an UDPC_HContext that holds state for connections that auto-updates via a thread.">UDPC_init_threaded_update()</a>, <a class="el" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6" title="Creates an UDPC_HContext that holds state for connections that auto-updates via a thread at a specifi...">UDPC_init_threaded_update_ms()</a>, <a class="el" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f" title="Enables auto updating on a separate thread for the given UDPC_HContext.">UDPC_enable_threaded_update()</a>, or <a class="el" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833" title="Enables auto updating on a separate thread for the given UDPC_HContext with the specified update inte...">UDPC_enable_threaded_update_ms()</a>. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/UDPC_8h_source.html b/UDPC_8h_source.html
new file mode 100644 (file)
index 0000000..1da0baa
--- /dev/null
@@ -0,0 +1,418 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: src/UDPC.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">UDPC.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="UDPC_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#ifndef UDPC_CONNECTION_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#define UDPC_CONNECTION_H</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">// Determine platform macros</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor"># define UDPC_PLATFORM_WINDOWS 1</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor"># define UDPC_PLATFORM_MAC 2</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor"># define UDPC_PLATFORM_LINUX 3</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor"># define UDPC_PLATFORM_UNKNOWN 0</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor"># if defined _WIN32</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#  define UDPC_PLATFORM UDPC_PLATFORM_WINDOWS</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor"># elif defined __APPLE__</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#  define UDPC_PLATFORM UDPC_PLATFORM_MAC</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor"># elif defined __linux__</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#  define UDPC_PLATFORM UDPC_PLATFORM_LINUX</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#  define UDPC_PLATFORM UDPC_PLATFORM_UNKNOWN</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// OS-based networking macros</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor"># include &lt;winsock2.h&gt;</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor"># ifdef UDPC_PLATFORM_MINGW</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#  include &lt;ws2ipdef.h&gt;</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#  include &lt;in6addr.h&gt;</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#  include &lt;Ws2ipdef.h&gt;</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#  include &lt;In6addr.h&gt;</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor"># ifndef DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#  define UDPC_CLEANUPSOCKET(x) closesocket(x)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#  define UDPC_SOCKETTYPE SOCKET</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_SOCKADDR_TYPE SOCKADDR_IN6</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_ADDR_TYPE IN6_ADDR</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_ADDR_SUB(addr) addr.u.Byte</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#  define UDPC_SOCKET_RETURN_ERROR(socket) (socket == INVALID_SOCKET)</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor"># endif </span><span class="comment">// DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#elif UDPC_PLATFORM == UDPC_PLATFORM_MAC || UDPC_PLATFORM == UDPC_PLATFORM_LINUX</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor"># include &lt;fcntl.h&gt;</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor"># include &lt;netinet/in.h&gt;</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor"># include &lt;sys/socket.h&gt;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor"># include &lt;unistd.h&gt;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor"># ifndef DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#  define UDPC_CLEANUPSOCKET(x) close(x)</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#  define UDPC_SOCKETTYPE int</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_SOCKADDR_TYPE struct sockaddr_in6</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_ADDR_TYPE struct in6_addr</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#  define UDPC_IPV6_ADDR_SUB(addr) addr.s6_addr</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#  define UDPC_SOCKET_RETURN_ERROR(socket) (socket &lt;= 0)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor"># endif </span><span class="comment">// DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor"># ifndef DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">#  define UDPC_CLEANUPSOCKET(x) ((void)0)</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor"># endif </span><span class="comment">// DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment">// other defines</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827">   81</a></span>&#160;<span class="comment"></span><span class="preprocessor">#define UDPC_PACKET_MAX_SIZE 8192</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#define UDPC_DEFAULT_PROTOCOL_ID 1357924680 </span><span class="comment">// 0x50f04948</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment">// other defines continued</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor"># ifndef UDPC_LIBSODIUM_ENABLED</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor">#  ifndef crypto_sign_PUBLICKEYBYTES</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#   define crypto_sign_PUBLICKEYBYTES 1</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#  ifndef crypto_sign_SECRETKEYBYTES</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#   define crypto_sign_SECRETKEYBYTES 1</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor">#  ifndef crypto_sign_BYTES</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#   define crypto_sign_BYTES 1</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor"># if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor">#  define UDPC_EXPORT __declspec(dllexport)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#  define UDPC_EXPORT</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// DOXYGEN_SHOULD_SKIP_THIS</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="preprocessor"># include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor"># include &lt;stdint.h&gt;</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="keyword">struct </span>UDPC_Context;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>UDPC_Context *UDPC_HContext;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> UDPC_EXPORT UDPC_LoggingType {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">  121</a></span>&#160;    <a class="code" href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">UDPC_SILENT</a>,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">  123</a></span>&#160;    <a class="code" href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">UDPC_ERROR</a>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">  125</a></span>&#160;    <a class="code" href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">UDPC_WARNING</a>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">  127</a></span>&#160;    <a class="code" href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">UDPC_INFO</a>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">  129</a></span>&#160;    <a class="code" href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">UDPC_VERBOSE</a>,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    UDPC_DEBUG</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;} UDPC_LoggingType;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160; </div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">  136</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> UDPC_EXPORT <a class="code" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">  138</a></span>&#160;    <a class="code" href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">UDPC_AUTH_POLICY_FALLBACK</a>=0,</div>
+<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">  140</a></span>&#160;    <a class="code" href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">UDPC_AUTH_POLICY_STRICT</a>,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="comment">// Used internally to get max size of enum</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    UDPC_AUTH_POLICY_SIZE</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;} <a class="code" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="structUDPC__ConnectionId.html">  153</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    UDPC_IPV6_ADDR_TYPE addr;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    uint32_t scope_id;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    uint16_t port;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">  157</a></span>&#160;} <a class="code" href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">UDPC_ConnectionId</a>;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html">  167</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>UDPC_EXPORT <a class="code" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="comment">// id is stored at offset 8, size 4 (uint32_t) even for &quot;empty&quot; PktInfos</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">  173</a></span>&#160;    <span class="keywordtype">char</span> *<a class="code" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">data</a>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">  184</a></span>&#160;    uint32_t <a class="code" href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">flags</a>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">  192</a></span>&#160;    uint32_t <a class="code" href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">id</a>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">  202</a></span>&#160;    uint16_t <a class="code" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">dataSize</a>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    uint16_t rtt;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">  205</a></span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">sender</a>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">  207</a></span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">receiver</a>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">  208</a></span>&#160;} <a class="code" href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">UDPC_PacketInfo</a>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div>
+<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">  229</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> UDPC_EXPORT <a class="code" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    UDPC_ET_NONE,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    UDPC_ET_REQUEST_CONNECT,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    UDPC_ET_REQUEST_DISCONNECT,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    UDPC_ET_CONNECTED,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    UDPC_ET_DISCONNECTED,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    UDPC_ET_FAIL_CONNECT,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    UDPC_ET_GOOD_MODE,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    UDPC_ET_BAD_MODE</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;} <a class="code" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160; </div>
+<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structUDPC__Event.html">  250</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>UDPC_EXPORT <a class="code" href="structUDPC__Event.html">UDPC_Event</a> {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <a class="code" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a> type;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> conId;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="unionUDPC__Event_1_1Value.html">  253</a></span>&#160;    <span class="keyword">union </span><a class="code" href="unionUDPC__Event_1_1Value.html">Value</a> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <span class="keywordtype">int</span> dropAllWithAddr;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        <span class="keywordtype">int</span> enableLibSodium;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    } v;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">  257</a></span>&#160;} <a class="code" href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">UDPC_Event</a>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">  269</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">UDPC_create_id</a>(UDPC_IPV6_ADDR_TYPE addr, uint16_t port);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
+<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">  278</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">UDPC_create_id_full</a>(UDPC_IPV6_ADDR_TYPE addr, uint32_t scope_id, uint16_t port);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160; </div>
+<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">  289</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">UDPC_create_id_anyaddr</a>(uint16_t port);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
+<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">  301</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <a class="code" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">UDPC_create_id_easy</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *addrString, uint16_t port);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160; </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> UDPC_create_id_hostname(<span class="keyword">const</span> <span class="keywordtype">char</span> *hostname, uint16_t port);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160; </div>
+<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">  321</a></span>&#160;UDPC_EXPORT UDPC_HContext <a class="code" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">UDPC_init</a>(<a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId, <span class="keywordtype">int</span> isClient, <span class="keywordtype">int</span> isUsingLibsodium);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">  341</a></span>&#160;UDPC_EXPORT UDPC_HContext <a class="code" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">UDPC_init_threaded_update</a>(</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="keywordtype">int</span> isClient,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="keywordtype">int</span> isUsingLibsodium);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">  364</a></span>&#160;UDPC_EXPORT UDPC_HContext <a class="code" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">UDPC_init_threaded_update_ms</a>(</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> listenId,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keywordtype">int</span> isClient,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    <span class="keywordtype">int</span> updateMS,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keywordtype">int</span> isUsingLibsodium);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
+<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">  379</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">UDPC_enable_threaded_update</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">  390</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">UDPC_enable_threaded_update_ms</a>(UDPC_HContext ctx, <span class="keywordtype">int</span> updateMS);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">  399</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">UDPC_disable_threaded_update</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160; </div>
+<div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">  406</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">UDPC_is_valid_context</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160; </div>
+<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">  417</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">UDPC_destroy</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160; </div>
+<div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">  441</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">UDPC_update</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160; </div>
+<div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">  453</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">UDPC_client_initiate_connection</a>(</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    UDPC_HContext ctx,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keywordtype">int</span> enableLibSodium);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160; </div>
+<div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">  476</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">UDPC_queue_send</a>(UDPC_HContext ctx, <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> destinationId,</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;                     <span class="keywordtype">int</span> isChecked, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, uint32_t size);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160; </div>
+<div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">  495</a></span>&#160;UDPC_EXPORT <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">UDPC_get_queue_send_current_size</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160; </div>
+<div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">  513</a></span>&#160;UDPC_EXPORT <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">UDPC_get_queued_size</a>(UDPC_HContext ctx, <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> <span class="keywordtype">id</span>, <span class="keywordtype">int</span> *exists);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160; </div>
+<div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">  523</a></span>&#160;UDPC_EXPORT <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">UDPC_get_max_queued_size</a>();</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160; </div>
+<div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">  531</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">UDPC_set_accept_new_connections</a>(UDPC_HContext ctx, <span class="keywordtype">int</span> isAccepting);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160; </div>
+<div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">  544</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">UDPC_drop_connection</a>(UDPC_HContext ctx, <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId, <span class="keywordtype">int</span> dropAllWithAddr);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160; </div>
+<div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">  555</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">UDPC_has_connection</a>(UDPC_HContext ctx, <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160; </div>
+<div class="line"><a name="l00571"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">  571</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>* <a class="code" href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">UDPC_get_list_connected</a>(UDPC_HContext ctx, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *size);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160; </div>
+<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">  577</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">UDPC_free_list_connected</a>(<a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> *list);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160; </div>
+<div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">  590</a></span>&#160;UDPC_EXPORT uint32_t <a class="code" href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">UDPC_get_protocol_id</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160; </div>
+<div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">  602</a></span>&#160;UDPC_EXPORT uint32_t <a class="code" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">UDPC_set_protocol_id</a>(UDPC_HContext ctx, uint32_t <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160; </div>
+<div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">  612</a></span>&#160;UDPC_EXPORT UDPC_LoggingType <a class="code" href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">UDPC_get_logging_type</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160; </div>
+<div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">  623</a></span>&#160;UDPC_EXPORT UDPC_LoggingType <a class="code" href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">UDPC_set_logging_type</a>(UDPC_HContext ctx, UDPC_LoggingType loggingType);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160; </div>
+<div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">  633</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">UDPC_get_receiving_events</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160; </div>
+<div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">  644</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">UDPC_set_receiving_events</a>(UDPC_HContext ctx, <span class="keywordtype">int</span> isReceivingEvents);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160; </div>
+<div class="line"><a name="l00657"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">  657</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__Event.html">UDPC_Event</a> <a class="code" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">UDPC_get_event</a>(UDPC_HContext ctx, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *remaining);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160; </div>
+<div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">  665</a></span>&#160;UDPC_EXPORT <a class="code" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> <a class="code" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">UDPC_get_received</a>(UDPC_HContext ctx, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *remaining);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160; </div>
+<div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">  674</a></span>&#160;UDPC_EXPORT <span class="keywordtype">void</span> <a class="code" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC_free_PacketInfo</a>(<a class="code" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a> pInfo);</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160; </div>
+<div class="line"><a name="l00693"></a><span class="lineno"><a class="line" href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">  693</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">UDPC_set_libsodium_keys</a>(UDPC_HContext ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *sk, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pk);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160; </div>
+<div class="line"><a name="l00708"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">  708</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">UDPC_set_libsodium_key_easy</a>(UDPC_HContext ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *sk);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160; </div>
+<div class="line"><a name="l00718"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">  718</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">UDPC_unset_libsodium_keys</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160; </div>
+<div class="line"><a name="l00735"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">  735</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">UDPC_add_whitelist_pk</a>(UDPC_HContext ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pk);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160; </div>
+<div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">  745</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">UDPC_has_whitelist_pk</a>(UDPC_HContext ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pk);</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160; </div>
+<div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">  755</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">UDPC_remove_whitelist_pk</a>(UDPC_HContext ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pk);</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160; </div>
+<div class="line"><a name="l00771"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">  771</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">UDPC_clear_whitelist</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160; </div>
+<div class="line"><a name="l00787"></a><span class="lineno"><a class="line" href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">  787</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">UDPC_get_auth_policy</a>(UDPC_HContext ctx);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160; </div>
+<div class="line"><a name="l00803"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">  803</a></span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> <a class="code" href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">UDPC_set_auth_policy</a>(UDPC_HContext ctx, <span class="keywordtype">int</span> value);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160; </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;UDPC_EXPORT <span class="keyword">const</span> <span class="keywordtype">char</span> *UDPC_atostr_cid(UDPC_HContext ctx, <a class="code" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> connectionId);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160; </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;UDPC_EXPORT <span class="keyword">const</span> <span class="keywordtype">char</span> *UDPC_atostr(UDPC_HContext ctx, UDPC_IPV6_ADDR_TYPE addr);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160; </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;<span class="comment">// =============================================================================</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;<span class="comment">// Helpers</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160; </div>
+<div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">  813</a></span>&#160;UDPC_EXPORT UDPC_IPV6_ADDR_TYPE <a class="code" href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">UDPC_strtoa</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *addrStr);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160; </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa_link(<span class="keyword">const</span> <span class="keywordtype">char</span> *addrStr, uint32_t *linkId_out);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160; </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_a4toa6(uint32_t a4_be);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160; </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;UDPC_EXPORT <span class="keywordtype">int</span> UDPC_is_big_endian();</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;UDPC_EXPORT uint16_t UDPC_no16i(uint16_t i);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;UDPC_EXPORT uint32_t UDPC_no32i(uint32_t i);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;UDPC_EXPORT uint64_t UDPC_no64i(uint64_t i);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;UDPC_EXPORT <span class="keywordtype">float</span> UDPC_no32f(<span class="keywordtype">float</span> f);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;UDPC_EXPORT <span class="keywordtype">double</span> UDPC_no64f(<span class="keywordtype">double</span> f);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160; </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;}</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aUDPC_8h_html_a0720bec1922660c983b1b3d9f6a5de3a"><div class="ttname"><a href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">UDPC_set_protocol_id</a></div><div class="ttdeci">UDPC_EXPORT uint32_t UDPC_set_protocol_id(UDPC_HContext ctx, uint32_t id)</div><div class="ttdoc">Sets the protocol id of the UDPC context.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a0e2e0c6a6a442db2cb3223d26f849d26"><div class="ttname"><a href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">UDPC_clear_whitelist</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_clear_whitelist(UDPC_HContext ctx)</div><div class="ttdoc">Clears the public key whitelist.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a0fa3e1e54877029a226ab9cfb74215df"><div class="ttname"><a href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">UDPC_create_id_anyaddr</a></div><div class="ttdeci">UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_anyaddr(uint16_t port)</div><div class="ttdoc">Creates an UDPC_ConnectionId with the given port.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a0fafce547e9185c29f42d06213b0ff4f"><div class="ttname"><a href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">UDPC_enable_threaded_update</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_enable_threaded_update(UDPC_HContext ctx)</div><div class="ttdoc">Enables auto updating on a separate thread for the given UDPC_HContext.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a1192e0307f75feeac888fe5d49976f55"><div class="ttname"><a href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">UDPC_client_initiate_connection</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_client_initiate_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId, int enableLibSodium)</div><div class="ttdoc">Initiate a connection to a server peer.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a1a50763773d55aa7a2a9c7ad69575833"><div class="ttname"><a href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">UDPC_enable_threaded_update_ms</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_enable_threaded_update_ms(UDPC_HContext ctx, int updateMS)</div><div class="ttdoc">Enables auto updating on a separate thread for the given UDPC_HContext with the specified update inte...</div></div>
+<div class="ttc" id="aUDPC_8h_html_a1fb87c1522d353bd9fde4c94ec8454c2"><div class="ttname"><a href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">UDPC_get_queued_size</a></div><div class="ttdeci">UDPC_EXPORT unsigned long UDPC_get_queued_size(UDPC_HContext ctx, UDPC_ConnectionId id, int *exists)</div><div class="ttdoc">Gets the size of a connection's queue of queued packets.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a228cd7ddf56a4e76e216bc3b80e8bd4a"><div class="ttname"><a href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC_AuthPolicy</a></div><div class="ttdeci">enum UDPC_EXPORT UDPC_AuthPolicy UDPC_AuthPolicy</div><div class="ttdef"><b>Definition:</b> UDPC.h:136</div></div>
+<div class="ttc" id="aUDPC_8h_html_a248f51c4df127b7fd3a5c91ad5509d15"><div class="ttname"><a href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">UDPC_INFO</a></div><div class="ttdeci">UDPC_INFO</div><div class="ttdoc">Log errors, warnings, and info.</div><div class="ttdef"><b>Definition:</b> UDPC.h:127</div></div>
+<div class="ttc" id="aUDPC_8h_html_a2ae8e7d87f785dd3b3353a00005c3dc6"><div class="ttname"><a href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">UDPC_strtoa</a></div><div class="ttdeci">UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa(const char *addrStr)</div><div class="ttdoc">addrStr must be a valid ipv6 address or a valid ipv4 address</div></div>
+<div class="ttc" id="aUDPC_8h_html_a2c05c6fe89edde1e05ba9b6d8b5f7510"><div class="ttname"><a href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">UDPC_get_event</a></div><div class="ttdeci">UDPC_EXPORT UDPC_Event UDPC_get_event(UDPC_HContext ctx, unsigned long *remaining)</div><div class="ttdoc">Gets a recorded event.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a32e217a02b2e8ba05568aabfaecbcdcb"><div class="ttname"><a href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">UDPC_set_accept_new_connections</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_set_accept_new_connections(UDPC_HContext ctx, int isAccepting)</div><div class="ttdoc">Set whether or not the UDPC context will accept new connections.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a380c91ee395cff22189c7988c3381787"><div class="ttname"><a href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">UDPC_set_receiving_events</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_set_receiving_events(UDPC_HContext ctx, int isReceivingEvents)</div><div class="ttdoc">Sets whether or not UDPC will record events.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a404d2c7a83903004f928737241ecc63a"><div class="ttname"><a href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">UDPC_disable_threaded_update</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_disable_threaded_update(UDPC_HContext ctx)</div><div class="ttdoc">Disables auto updating on a separate thread for the given UDPC_HContext.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a44bc5cc29862c93e938ac8a625c56380"><div class="ttname"><a href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">UDPC_drop_connection</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_drop_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId, int dropAllWithAddr)</div><div class="ttdoc">Drops an existing connection to a peer.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a4a555a011e95445ed4a2aa88deb17082"><div class="ttname"><a href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">UDPC_has_connection</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_has_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId)</div><div class="ttdoc">Checks if a connection exists to the peer identified by the given connectionId.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a614e2a058b89839d53fe9d348a058323"><div class="ttname"><a href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">UDPC_init_threaded_update</a></div><div class="ttdeci">UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update(UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium)</div><div class="ttdoc">Creates an UDPC_HContext that holds state for connections that auto-updates via a thread.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a62a5131b90653ccbfc86ad5db4031ba9"><div class="ttname"><a href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">UDPC_unset_libsodium_keys</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_unset_libsodium_keys(UDPC_HContext ctx)</div><div class="ttdoc">Removes set keys if any used for packet verification.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a68ed6dcb37c6024486fad28ab0bed845"><div class="ttname"><a href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC_free_PacketInfo</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_free_PacketInfo(UDPC_PacketInfo pInfo)</div><div class="ttdoc">Frees a UDPC_PacketInfo.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a68fefba9edca7cd0a81d97ac27c70c0b"><div class="ttname"><a href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">UDPC_update</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_update(UDPC_HContext ctx)</div><div class="ttdoc">Updates the context.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a6af4629253b3ed1f411015410cee9ad3"><div class="ttname"><a href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">UDPC_AUTH_POLICY_STRICT</a></div><div class="ttdeci">UDPC_AUTH_POLICY_STRICT</div><div class="ttdoc">Only peers with public key verification will be allowed.</div><div class="ttdef"><b>Definition:</b> UDPC.h:140</div></div>
+<div class="ttc" id="aUDPC_8h_html_a6c90dc723e67a07bf65c1fc97e526305"><div class="ttname"><a href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">UDPC_set_logging_type</a></div><div class="ttdeci">UDPC_EXPORT UDPC_LoggingType UDPC_set_logging_type(UDPC_HContext ctx, UDPC_LoggingType loggingType)</div><div class="ttdoc">Sets the logging type of the UDPC context.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a71f9bf85a02ddd1b4c921fe9b6694fe8"><div class="ttname"><a href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">UDPC_add_whitelist_pk</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_add_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk)</div><div class="ttdoc">Adds a public key to the whitelist.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a7527954b63f502479bdd3771df7cf3a4"><div class="ttname"><a href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">UDPC_queue_send</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_queue_send(UDPC_HContext ctx, UDPC_ConnectionId destinationId, int isChecked, const void *data, uint32_t size)</div><div class="ttdoc">Queues a packet to be sent to the specified peer.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a7983f38fe13677f5b35b90cefa54974f"><div class="ttname"><a href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">UDPC_get_max_queued_size</a></div><div class="ttdeci">UDPC_EXPORT unsigned long UDPC_get_max_queued_size()</div><div class="ttdoc">Gets the size limit of a connection's queue of queued packets.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a7b3215b65686670720f098eda2ca1eed"><div class="ttname"><a href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">UDPC_Event</a></div><div class="ttdeci">struct UDPC_EXPORT UDPC_Event UDPC_Event</div><div class="ttdoc">A struct containing information related to the type of event.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a7fe3e502f4c6f86ce5b2cd1f303aa213"><div class="ttname"><a href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">UDPC_get_list_connected</a></div><div class="ttdeci">UDPC_EXPORT UDPC_ConnectionId * UDPC_get_list_connected(UDPC_HContext ctx, unsigned int *size)</div><div class="ttdoc">Gets a dynamically allocated array of connected peers' identifiers.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a8880067a93211c257763c42264f6ceef"><div class="ttname"><a href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">UDPC_free_list_connected</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_free_list_connected(UDPC_ConnectionId *list)</div><div class="ttdoc">Cleans up a dynamically allocated array of connected peers' identifiers.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a89dee65fcd5b70d25abbf6d4a3ee59f2"><div class="ttname"><a href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">UDPC_init</a></div><div class="ttdeci">UDPC_EXPORT UDPC_HContext UDPC_init(UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium)</div><div class="ttdoc">Creates an UDPC_HContext that holds state for connections.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a8b80d2df882f03aeee8a92bed7fb0131"><div class="ttname"><a href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">UDPC_create_id_easy</a></div><div class="ttdeci">UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_easy(const char *addrString, uint16_t port)</div><div class="ttdoc">Creates an UDPC_ConnectionId with the given addr string and port.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a8c74f1b9ee0fec610087f83096c9679d"><div class="ttname"><a href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">UDPC_get_receiving_events</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_get_receiving_events(UDPC_HContext ctx)</div><div class="ttdoc">Returns non-zero if the UDPC context will record events.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a8d0dbbd258e17844a2f9a0e277789581"><div class="ttname"><a href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">UDPC_set_auth_policy</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_set_auth_policy(UDPC_HContext ctx, int value)</div><div class="ttdoc">Sets how peers are handled regarding public key verification.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a94660d04e7f9b4d9c51a7b2c67707172"><div class="ttname"><a href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">UDPC_has_whitelist_pk</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_has_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk)</div><div class="ttdoc">Checks if a public key is in the whitelist.</div></div>
+<div class="ttc" id="aUDPC_8h_html_a96ecd597f88d458ed108f33e4f0a6612"><div class="ttname"><a href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">UDPC_AUTH_POLICY_FALLBACK</a></div><div class="ttdeci">UDPC_AUTH_POLICY_FALLBACK</div><div class="ttdoc">All peers will not be denied regardless of use of public key verification.</div><div class="ttdef"><b>Definition:</b> UDPC.h:138</div></div>
+<div class="ttc" id="aUDPC_8h_html_a9cc5d705069747eb439a1c5607baac17"><div class="ttname"><a href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">UDPC_WARNING</a></div><div class="ttdeci">UDPC_WARNING</div><div class="ttdoc">Log errors and warnings.</div><div class="ttdef"><b>Definition:</b> UDPC.h:125</div></div>
+<div class="ttc" id="aUDPC_8h_html_aa3f67ad23ae34b647b7f4dd17a8a96dd"><div class="ttname"><a href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">UDPC_get_queue_send_current_size</a></div><div class="ttdeci">UDPC_EXPORT unsigned long UDPC_get_queue_send_current_size(UDPC_HContext ctx)</div><div class="ttdoc">Gets the size of the data structure holding queued packets.</div></div>
+<div class="ttc" id="aUDPC_8h_html_aa5c197773a0914125cb358771139065c"><div class="ttname"><a href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">UDPC_SILENT</a></div><div class="ttdeci">UDPC_SILENT</div><div class="ttdoc">Does not log anything.</div><div class="ttdef"><b>Definition:</b> UDPC.h:121</div></div>
+<div class="ttc" id="aUDPC_8h_html_aab6fb21c6f5b44123e2660f84561d404"><div class="ttname"><a href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">UDPC_get_protocol_id</a></div><div class="ttdeci">UDPC_EXPORT uint32_t UDPC_get_protocol_id(UDPC_HContext ctx)</div><div class="ttdoc">Gets the protocol id of the UDPC context.</div></div>
+<div class="ttc" id="aUDPC_8h_html_aad0e88866d4c5cb9c0676bc8d7df574e"><div class="ttname"><a href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">UDPC_destroy</a></div><div class="ttdeci">UDPC_EXPORT void UDPC_destroy(UDPC_HContext ctx)</div><div class="ttdoc">Cleans up the UDPC_HContext.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ab79769e36a92c346c6c410be158ddfe4"><div class="ttname"><a href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">UDPC_get_auth_policy</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_get_auth_policy(UDPC_HContext ctx)</div><div class="ttdoc">Gets how peers are handled regarding public key verification.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ab7cb345ce117c04017afd443e5748f19"><div class="ttname"><a href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">UDPC_create_id_full</a></div><div class="ttdeci">UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_full(UDPC_IPV6_ADDR_TYPE addr, uint32_t scope_id, uint16_t port)</div><div class="ttdoc">Creates an UDPC_ConnectionId with the given addr, scope_id, and port.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ab9a5258877ad3084f7d29954be525bd6"><div class="ttname"><a href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">UDPC_init_threaded_update_ms</a></div><div class="ttdeci">UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update_ms(UDPC_ConnectionId listenId, int isClient, int updateMS, int isUsingLibsodium)</div><div class="ttdoc">Creates an UDPC_HContext that holds state for connections that auto-updates via a thread at a specifi...</div></div>
+<div class="ttc" id="aUDPC_8h_html_abc2d3284e5c45d6cd888154e813a1383"><div class="ttname"><a href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">UDPC_remove_whitelist_pk</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_remove_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk)</div><div class="ttdoc">Removes a public key from the whitelist.</div></div>
+<div class="ttc" id="aUDPC_8h_html_abd0a7d5c0a17cf3351dbe5abf5f70df1"><div class="ttname"><a href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">UDPC_set_libsodium_keys</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_set_libsodium_keys(UDPC_HContext ctx, const unsigned char *sk, const unsigned char *pk)</div><div class="ttdoc">Sets public/private keys used for packet verification.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ac01480f803b063e2b44794420df0f671"><div class="ttname"><a href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">UDPC_is_valid_context</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_is_valid_context(UDPC_HContext ctx)</div><div class="ttdoc">Checks if the given UDPC_HContext is valid (successfully initialized)</div></div>
+<div class="ttc" id="aUDPC_8h_html_ac04213a4287500a9c5330f543eac3103"><div class="ttname"><a href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">UDPC_ERROR</a></div><div class="ttdeci">UDPC_ERROR</div><div class="ttdoc">Only log errors.</div><div class="ttdef"><b>Definition:</b> UDPC.h:123</div></div>
+<div class="ttc" id="aUDPC_8h_html_ad0c7d69eeda20e98696d5c89bbbab096"><div class="ttname"><a href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">UDPC_get_logging_type</a></div><div class="ttdeci">UDPC_EXPORT UDPC_LoggingType UDPC_get_logging_type(UDPC_HContext ctx)</div><div class="ttdoc">Gets the logging type of the UDPC context.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ad5741af4e5cf1da40fe4a7b92cd1c431"><div class="ttname"><a href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">UDPC_VERBOSE</a></div><div class="ttdeci">UDPC_VERBOSE</div><div class="ttdoc">Log errors, warning, info, and verbose.</div><div class="ttdef"><b>Definition:</b> UDPC.h:129</div></div>
+<div class="ttc" id="aUDPC_8h_html_ad7eb0c77561f84a63dad29388d099fbe"><div class="ttname"><a href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">UDPC_set_libsodium_key_easy</a></div><div class="ttdeci">UDPC_EXPORT int UDPC_set_libsodium_key_easy(UDPC_HContext ctx, const unsigned char *sk)</div><div class="ttdoc">Sets the public/private keys used for packet verification.</div></div>
+<div class="ttc" id="aUDPC_8h_html_adaa0534bf7f04bb2f6ce8975c99c4af0"><div class="ttname"><a href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a></div><div class="ttdeci">enum UDPC_EXPORT UDPC_EventType UDPC_EventType</div><div class="ttdoc">An enum describing the type of event.</div><div class="ttdef"><b>Definition:</b> UDPC.h:229</div></div>
+<div class="ttc" id="aUDPC_8h_html_ae0261958047ebb5c6a402aa805e4e55b"><div class="ttname"><a href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">UDPC_PacketInfo</a></div><div class="ttdeci">struct UDPC_EXPORT UDPC_PacketInfo UDPC_PacketInfo</div><div class="ttdoc">Data representing a received/sent packet.</div></div>
+<div class="ttc" id="aUDPC_8h_html_ae5afb11964c7a55edf34ddf9097779b2"><div class="ttname"><a href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">UDPC_ConnectionId</a></div><div class="ttdeci">struct UDPC_EXPORT UDPC_ConnectionId UDPC_ConnectionId</div><div class="ttdoc">Data identifying a peer via addr, port, and scope_id.</div></div>
+<div class="ttc" id="aUDPC_8h_html_aea7e32ca9fdc04530f95c97459391e6d"><div class="ttname"><a href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">UDPC_create_id</a></div><div class="ttdeci">UDPC_EXPORT UDPC_ConnectionId UDPC_create_id(UDPC_IPV6_ADDR_TYPE addr, uint16_t port)</div><div class="ttdoc">Creates an UDPC_ConnectionId with the given addr and port.</div></div>
+<div class="ttc" id="aUDPC_8h_html_affa8655a4e7e3475be441060e92213b3"><div class="ttname"><a href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">UDPC_get_received</a></div><div class="ttdeci">UDPC_EXPORT UDPC_PacketInfo UDPC_get_received(UDPC_HContext ctx, unsigned long *remaining)</div><div class="ttdoc">Get a received packet from a given UDPC context.</div></div>
+<div class="ttc" id="astructUDPC__ConnectionId_html"><div class="ttname"><a href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a></div><div class="ttdoc">Data identifying a peer via addr, port, and scope_id.</div><div class="ttdef"><b>Definition:</b> UDPC.h:153</div></div>
+<div class="ttc" id="astructUDPC__Event_html"><div class="ttname"><a href="structUDPC__Event.html">UDPC_Event</a></div><div class="ttdoc">A struct containing information related to the type of event.</div><div class="ttdef"><b>Definition:</b> UDPC.h:250</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html"><div class="ttname"><a href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a></div><div class="ttdoc">Data representing a received/sent packet.</div><div class="ttdef"><b>Definition:</b> UDPC.h:167</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_a1358f91f28c4a023ef201e868bf1069e"><div class="ttname"><a href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">UDPC_PacketInfo::data</a></div><div class="ttdeci">char * data</div><div class="ttdef"><b>Definition:</b> UDPC.h:173</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_a5af734c663d3df72dad2b81a8794b6dc"><div class="ttname"><a href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">UDPC_PacketInfo::sender</a></div><div class="ttdeci">UDPC_ConnectionId sender</div><div class="ttdoc">The UDPC_ConnectionId of the sender.</div><div class="ttdef"><b>Definition:</b> UDPC.h:205</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_a70230a2eb6a638d9e9fc04e230c92a74"><div class="ttname"><a href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">UDPC_PacketInfo::dataSize</a></div><div class="ttdeci">uint16_t dataSize</div><div class="ttdoc">The size in bytes of the received packet's data inside the data pointer member variable.</div><div class="ttdef"><b>Definition:</b> UDPC.h:202</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_a965f393584d389dc72becd439cafde0d"><div class="ttname"><a href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">UDPC_PacketInfo::receiver</a></div><div class="ttdeci">UDPC_ConnectionId receiver</div><div class="ttdoc">The UDPC_ConnectionId of the receiver.</div><div class="ttdef"><b>Definition:</b> UDPC.h:207</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_ac21cc9beab22eb1e1a2d5c0797ed0fbe"><div class="ttname"><a href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">UDPC_PacketInfo::id</a></div><div class="ttdeci">uint32_t id</div><div class="ttdoc">The packet's id.</div><div class="ttdef"><b>Definition:</b> UDPC.h:192</div></div>
+<div class="ttc" id="astructUDPC__PacketInfo_html_ad538ac2682e8276dc33553237f012ce1"><div class="ttname"><a href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">UDPC_PacketInfo::flags</a></div><div class="ttdeci">uint32_t flags</div><div class="ttdoc">Flags indication some additional information about the received packet.</div><div class="ttdef"><b>Definition:</b> UDPC.h:184</div></div>
+<div class="ttc" id="aunionUDPC__Event_1_1Value_html"><div class="ttname"><a href="unionUDPC__Event_1_1Value.html">UDPC_Event::Value</a></div><div class="ttdef"><b>Definition:</b> UDPC.h:253</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/annotated.html b/annotated.html
new file mode 100644 (file)
index 0000000..df6a8f6
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUDPC__ConnectionId.html" target="_self">UDPC_ConnectionId</a></td><td class="desc">Data identifying a peer via addr, port, and scope_id </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUDPC__Event.html" target="_self">UDPC_Event</a></td><td class="desc">A struct containing information related to the type of event </td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionUDPC__Event_1_1Value.html" target="_self">Value</a></td><td class="desc"></td></tr>
+<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUDPC__PacketInfo.html" target="_self">UDPC_PacketInfo</a></td><td class="desc">Data representing a received/sent packet </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/bc_s.png b/bc_s.png
new file mode 100644 (file)
index 0000000..224b29a
Binary files /dev/null and b/bc_s.png differ
diff --git a/bdwn.png b/bdwn.png
new file mode 100644 (file)
index 0000000..940a0b9
Binary files /dev/null and b/bdwn.png differ
diff --git a/classes.html b/classes.html
new file mode 100644 (file)
index 0000000..e2ed61a
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_U">U</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_U">U</a></dt>
+<dd><a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a></dd><dd><a class="el" href="structUDPC__Event.html">UDPC_Event</a></dd><dd><a class="el" href="structUDPC__PacketInfo.html">UDPC_PacketInfo</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_V">V</a></dt>
+<dd><a class="el" href="unionUDPC__Event_1_1Value.html">UDPC_Event::Value</a></dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/closed.png b/closed.png
new file mode 100644 (file)
index 0000000..98cc2c9
Binary files /dev/null and b/closed.png differ
diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644 (file)
index 0000000..4509c80
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">src Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:UDPC_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="UDPC_8h.html">UDPC.h</a> <a href="UDPC_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:UDPC_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public API for UDPConnection. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc.png b/doc.png
new file mode 100644 (file)
index 0000000..17edabf
Binary files /dev/null and b/doc.png differ
diff --git a/doxygen.css b/doxygen.css
new file mode 100644 (file)
index 0000000..ffbff02
--- /dev/null
@@ -0,0 +1,1793 @@
+/* The standard CSS for doxygen 1.9.1 */
+
+body, table, div, p, dl {
+       font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+       font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+       font-size: 150%;
+}
+
+.title {
+       font: 400 14px/28px Roboto,sans-serif;
+       font-size: 150%;
+       font-weight: bold;
+       margin: 10px 2px;
+}
+
+h2.groupheader {
+       border-bottom: 1px solid #879ECB;
+       color: #354C7B;
+       font-size: 150%;
+       font-weight: normal;
+       margin-top: 1.75em;
+       padding-top: 8px;
+       padding-bottom: 4px;
+       width: 100%;
+}
+
+h3.groupheader {
+       font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       -webkit-transition: text-shadow 0.5s linear;
+       -moz-transition: text-shadow 0.5s linear;
+       -ms-transition: text-shadow 0.5s linear;
+       -o-transition: text-shadow 0.5s linear;
+       transition: text-shadow 0.5s linear;
+       margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+       text-shadow: 0 0 15px cyan;
+}
+
+dt {
+       font-weight: bold;
+}
+
+ul.multicol {
+       -moz-column-gap: 1em;
+       -webkit-column-gap: 1em;
+       column-gap: 1em;
+       -moz-column-count: 3;
+       -webkit-column-count: 3;
+       column-count: 3;
+}
+
+p.startli, p.startdd {
+       margin-top: 2px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+        font-size: 100%;
+        font-weight: 700;
+}
+
+p.starttd {
+       margin-top: 0px;
+}
+
+p.endli {
+       margin-bottom: 0px;
+}
+
+p.enddd {
+       margin-bottom: 4px;
+}
+
+p.endtd {
+       margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+       font-weight: bold;
+}
+
+span.legend {
+       font-size: 70%;
+       text-align: center;
+}
+
+h3.version {
+       font-size: 90%;
+       text-align: center;
+}
+
+div.navtab {
+       border-right: 1px solid #A3B4D7;
+       padding-right: 15px;
+       text-align: right;
+       line-height: 110%;
+}
+
+div.navtab table {
+       border-spacing: 0;
+}
+
+td.navtab {
+       padding-right: 6px;
+       padding-left: 6px;
+}
+td.navtabHL {
+       background-image: url('tab_a.png');
+       background-repeat:repeat-x;
+       padding-right: 6px;
+       padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+       color: #fff;
+       text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+       font-weight: bold;
+}
+
+div.qindex{
+       text-align: center;
+       width: 100%;
+       line-height: 140%;
+       font-size: 130%;
+       color: #A0A0A0;
+}
+
+dt.alphachar{
+       font-size: 180%;
+       font-weight: bold;
+}
+
+.alphachar a{
+       color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+       text-decoration: none;
+}
+
+.classindex dl {
+       padding: 25px;
+       column-count:1
+}
+
+.classindex dd {
+       display:inline-block;
+       margin-left: 50px;
+       width: 90%;
+       line-height: 1.15em;
+}
+
+.classindex dl.odd {
+       background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+       .classindex dl {
+               column-count:2
+       }
+}
+
+@media(min-width: 1320px) {
+       .classindex dl {
+               column-count:3
+       }
+}
+
+
+/* @group Link Styling */
+
+a {
+       color: #3D578C;
+       font-weight: normal;
+       text-decoration: none;
+}
+
+.contents a:visited {
+       color: #4665A2;
+}
+
+a:hover {
+       text-decoration: underline;
+}
+
+.contents a.qindexHL:visited {
+        color: #FFFFFF;
+}
+
+a.el {
+       font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+       color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+       color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+       margin-left: -1cm;
+}
+
+ul {
+  overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+  overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+  overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+  text-align: left;
+  direction: ltr;
+  overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+  overflow-y: hidden;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+  padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+  margin: 4px 8px 4px 2px;
+       background-color: #FBFCFD;
+       border: 1px solid #C4CFE5;
+}
+
+div.line {
+       font-family: monospace, fixed;
+        font-size: 13px;
+       min-height: 13px;
+       line-height: 1.0;
+       text-wrap: unrestricted;
+       white-space: -moz-pre-wrap; /* Moz */
+       white-space: -pre-wrap;     /* Opera 4-6 */
+       white-space: -o-pre-wrap;   /* Opera 7 */
+       white-space: pre-wrap;      /* CSS3  */
+       word-wrap: break-word;      /* IE 5.5+ */
+       text-indent: -53px;
+       padding-left: 53px;
+       padding-bottom: 0px;
+       margin: 0px;
+       -webkit-transition-property: background-color, box-shadow;
+       -webkit-transition-duration: 0.5s;
+       -moz-transition-property: background-color, box-shadow;
+       -moz-transition-duration: 0.5s;
+       -ms-transition-property: background-color, box-shadow;
+       -ms-transition-duration: 0.5s;
+       -o-transition-property: background-color, box-shadow;
+       -o-transition-duration: 0.5s;
+       transition-property: background-color, box-shadow;
+       transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+       background-color: cyan;
+       box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+       padding-right: 4px;
+       text-align: right;
+       border-right: 2px solid #0F0;
+       background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+       background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+       background-color: #C8C8C8;
+}
+
+.lineno {
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -khtml-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+div.ah, span.ah {
+       background-color: black;
+       font-weight: bold;
+       color: #FFFFFF;
+       margin-bottom: 3px;
+       margin-top: 3px;
+       padding: 0.2em;
+       border: solid thin #333;
+       border-radius: 0.5em;
+       -webkit-border-radius: .5em;
+       -moz-border-radius: .5em;
+       box-shadow: 2px 2px 3px #999;
+       -webkit-box-shadow: 2px 2px 3px #999;
+       -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+       background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+       background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       font-weight: bold;
+}
+
+div.groupText {
+       margin-left: 16px;
+       font-style: italic;
+}
+
+body {
+       background-color: white;
+       color: black;
+        margin: 0;
+}
+
+div.contents {
+       margin-top: 10px;
+       margin-left: 12px;
+       margin-right: 8px;
+}
+
+td.indexkey {
+       background-color: #EBEFF6;
+       font-weight: bold;
+       border: 1px solid #C4CFE5;
+       margin: 2px 0px 2px 0;
+       padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+       background-color: #EBEFF6;
+       border: 1px solid #C4CFE5;
+       padding: 2px 10px;
+       margin: 2px 0px;
+}
+
+tr.memlist {
+       background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+       text-align: center;
+}
+
+img.formulaDsp {
+       
+}
+
+img.formulaInl, img.inline {
+       vertical-align: middle;
+}
+
+div.center {
+       text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+       border: 0px;
+}
+
+address.footer {
+       text-align: right;
+       padding-right: 12px;
+}
+
+img.footer {
+       border: 0px;
+       vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+       color: #008000
+}
+
+span.keywordtype {
+       color: #604020
+}
+
+span.keywordflow {
+       color: #e08000
+}
+
+span.comment {
+       color: #800000
+}
+
+span.preprocessor {
+       color: #806020
+}
+
+span.stringliteral {
+       color: #002080
+}
+
+span.charliteral {
+       color: #008080
+}
+
+span.vhdldigit { 
+       color: #ff00ff 
+}
+
+span.vhdlchar { 
+       color: #000000 
+}
+
+span.vhdlkeyword { 
+       color: #700070 
+}
+
+span.vhdllogic { 
+       color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+   border-left: 0;
+   border-right: 2px solid #9CAFD4;
+   margin: 0 4px 0 24px;
+   padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+       color: #003399;
+       font-weight: bold;
+}
+
+form.search {
+       margin-bottom: 0px;
+       margin-top: 0px;
+}
+
+input.search {
+       font-size: 75%;
+       color: #000080;
+       font-weight: normal;
+       background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+       font-size: 75%;
+}
+
+.dirtab {
+       padding: 4px;
+       border-collapse: collapse;
+       border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+       background: #EBEFF6;
+       font-weight: bold;
+}
+
+hr {
+       height: 0px;
+       border: none;
+       border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+       height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+       border-spacing: 0px;
+       padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+       -webkit-transition-property: background-color, box-shadow;
+       -webkit-transition-duration: 0.5s;
+       -moz-transition-property: background-color, box-shadow;
+       -moz-transition-duration: 0.5s;
+       -ms-transition-property: background-color, box-shadow;
+       -ms-transition-duration: 0.5s;
+       -o-transition-property: background-color, box-shadow;
+       -o-transition-duration: 0.5s;
+       transition-property: background-color, box-shadow;
+       transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+       background-color: cyan;
+       box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+       background-color: #F9FAFC;
+       border: none;
+       margin: 4px;
+       padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+       padding: 0px 8px 4px 8px;
+       color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+       width: 100%;
+}
+
+.memTemplParams {
+       color: #4665A2;
+        white-space: nowrap;
+       font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+       padding: 8px;
+       border-top: 1px solid #A8B8D9;
+       border-left: 1px solid #A8B8D9;
+       border-right: 1px solid #A8B8D9;
+       border-top-right-radius: 4px;
+       border-top-left-radius: 4px;
+       margin-bottom: -1px;
+       background-image: url('nav_f.png');
+       background-repeat: repeat-x;
+       background-color: #E2E8F2;
+       line-height: 1.25;
+       font-weight: 300;
+       float:left;
+}
+
+.permalink
+{
+        font-size: 65%;
+        display: inline-block;
+        vertical-align: middle;
+}
+
+.memtemplate {
+       font-size: 80%;
+       color: #4665A2;
+       font-weight: normal;
+       margin-left: 9px;
+}
+
+.memnav {
+       background-color: #EBEFF6;
+       border: 1px solid #A3B4D7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+
+.mempage {
+       width: 100%;
+}
+
+.memitem {
+       padding: 0;
+       margin-bottom: 10px;
+       margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: 400;
+        margin-left: 6px;
+}
+
+.memname td {
+       vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-color: #DFE5F1;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+        font-family: "courier new",courier,monospace;
+       font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+       text-align: right;
+}
+
+.paramtype {
+       white-space: nowrap;
+}
+
+.paramname {
+       color: #602020;
+       white-space: nowrap;
+}
+.paramname em {
+       font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype, .tparams .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir, .tparams .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+       border-spacing: 0px;
+}
+
+td.mlabels-left {
+       width: 100%;
+       padding: 0px;
+}
+
+td.mlabels-right {
+       vertical-align: bottom;
+       padding: 0px;
+       white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+       text-shadow: none;
+       color: white;
+       margin-right: 4px;
+       padding: 2px 3px;
+       border-radius: 3px;
+       font-size: 7pt;
+       white-space: nowrap;
+       vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+       vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+       padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+       padding-right: 6px;
+       padding-top: 3px;
+       border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+       padding-left: 6px;
+       background-color: #F7F8FB;
+}
+
+.directory img {
+       vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+       color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -khtml-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+address {
+       font-style: normal;
+       color: #2A3D61;
+}
+
+table.doxtable caption {
+       caption-side: top;
+}
+
+table.doxtable {
+       border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+       border: 1px solid #2D4068;
+       padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+       background-color: #374F7F;
+       color: #FFFFFF;
+       font-size: 110%;
+       padding-bottom: 4px;
+       padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        font-weight: 400;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+       top: 0px;
+       left: 10px;
+       height: 36px;
+       background-image: url('tab_b.png');
+       z-index: 101;
+       overflow: hidden;
+       font-size: 13px;
+}
+
+.navpath ul
+{
+       font-size: 11px;
+       background-image:url('tab_b.png');
+       background-repeat:repeat-x;
+       background-position: 0 -5px;
+       height:30px;
+       line-height:30px;
+       color:#8AA0CC;
+       border:solid 1px #C2CDE4;
+       overflow:hidden;
+       margin:0px;
+       padding:0px;
+}
+
+.navpath li
+{
+       list-style-type:none;
+       float:left;
+       padding-left:10px;
+       padding-right:15px;
+       background-image:url('bc_s.png');
+       background-repeat:no-repeat;
+       background-position:right;
+       color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+       height:32px;
+       display:block;
+       text-decoration: none;
+       outline: none;
+       color: #283A5D;
+       font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+       text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+       text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+       color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+       float: right;
+       font-size: 8pt;
+       padding-right: 5px;
+       width: 50%;
+       text-align: right;
+}       
+
+div.summary a
+{
+       white-space: nowrap;
+}
+
+table.classindex
+{
+        margin: 10px;
+        white-space: nowrap;
+        margin-left: 3%;
+        margin-right: 3%;
+        width: 94%;
+        border: 0;
+        border-spacing: 0; 
+        padding: 0;
+}
+
+div.ingroups
+{
+       font-size: 8pt;
+       width: 50%;
+       text-align: left;
+}
+
+div.ingroups a
+{
+       white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+       background-color: #F9FAFC;
+       margin:  0px;
+       border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+       padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+  text-align: right;
+  direction: rtl;
+}
+
+dl {
+        padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+       margin-left: 0px;
+       padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+  margin-right: 0px;
+  padding-right: 0px;
+}
+
+dl.note {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #00D000;
+}
+
+dl.deprecated {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #505050;
+}
+
+dl.todo {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #00C0E0;
+}
+
+dl.test {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #3030E0;
+}
+
+dl.bug {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #C08050;
+}
+
+dl.section dd {
+       margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+       text-align: center;
+       vertical-align: bottom;
+       border-collapse: separate;
+}
+#projectlogo img
+{ 
+       border: 0px none;
+}
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+       font: 300% Tahoma, Arial,sans-serif;
+       margin: 0px;
+       padding: 2px 0px;
+}
+    
+#projectbrief
+{
+       font: 120% Tahoma, Arial,sans-serif;
+       margin: 0px;
+       padding: 0px;
+}
+
+#projectnumber
+{
+       font: 50% Tahoma, Arial,sans-serif;
+       margin: 0px;
+       padding: 0px;
+}
+
+#titlearea
+{
+       padding: 0px;
+       margin: 0px;
+       width: 100%;
+       border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.plantumlgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+       font-weight: bold;
+}
+
+div.zoom
+{
+       border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+        text-align:right;
+        width:52px;
+}
+
+dl.citelist dd {
+        margin:2px 0 2px 72px;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 8px 10px 10px;
+        width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+  float: left !important;
+  text-align: right;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+  background-position-x: right !important;
+  padding-left: 0 !important;
+  padding-right: 10px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+       color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+span.emoji {
+        /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+         * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+         */
+}
+
+.PageDocRTL-title div.toc li.level1 {
+  margin-left: 0 !important;
+  margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+  margin-left: 0 !important;
+  margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+  margin-left: 0 !important;
+  margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+  margin-left: 0 !important;
+  margin-right: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -khtml-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+       cursor: default;
+       white-space: nowrap;
+       background-color: white;
+       border: 1px solid gray;
+       border-radius: 4px 4px 4px 4px;
+       box-shadow: 1px 1px 7px gray;
+       display: none;
+       font-size: smaller;
+       max-width: 80%;
+       opacity: 0.9;
+       padding: 1ex 1em 1em;
+       position: absolute;
+       z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+       font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+       content: "";
+       position: absolute;
+       margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+       border: solid transparent;
+       content: " ";
+       height: 0;
+       width: 0;
+       position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+       border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+       border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+       top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+       border-top-color: #FFFFFF;
+       border-width: 10px;
+       margin: 0px -10px;
+}
+#powerTip.n:before {
+       border-top-color: #808080;
+       border-width: 11px;
+       margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+       left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+       right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+       left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+       bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+       border-bottom-color: #FFFFFF;
+       border-width: 10px;
+       margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+       border-bottom-color: #808080;
+       border-width: 11px;
+       margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+       left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+       right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+       left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+       left: 100%;
+}
+#powerTip.e:after {
+       border-left-color: #FFFFFF;
+       border-width: 10px;
+       top: 50%;
+       margin-top: -10px;
+}
+#powerTip.e:before {
+       border-left-color: #808080;
+       border-width: 11px;
+       top: 50%;
+       margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+       right: 100%;
+}
+#powerTip.w:after {
+       border-right-color: #FFFFFF;
+       border-width: 10px;
+       top: 50%;
+       margin-top: -10px;
+}
+#powerTip.w:before {
+       border-right-color: #808080;
+       border-width: 11px;
+       top: 50%;
+       margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+       border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+       border: 1px solid #2D4068;
+       padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+       background-color: #374F7F;
+       color: #FFFFFF;
+       font-size: 110%;
+       padding-bottom: 4px;
+       padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+       text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+       text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+       text-align: center
+}
+
+.DocNodeRTL {
+  text-align: right;
+  direction: rtl;
+}
+
+.DocNodeLTR {
+  text-align: left;
+  direction: ltr;
+}
+
+table.DocNodeRTL {
+   width: auto;
+   margin-right: 0;
+   margin-left: auto;
+}
+
+table.DocNodeLTR {
+   width: auto;
+   margin-right: auto;
+   margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+  display: inline-block;
+  direction:ltr; 
+}
+/* @end */
+
+u {
+       text-decoration: underline;
+}
+
diff --git a/doxygen.svg b/doxygen.svg
new file mode 100644 (file)
index 0000000..d42dad5
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <linearGradient id="a">
+   <stop stop-color="#5373B4" offset="0"/>
+   <stop stop-color="#7C95C6" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+   <stop stop-color="#C0CCE3" offset="0"/>
+   <stop stop-color="#EEF1F7" offset="1"/>
+  </linearGradient>
+  <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+   <feGaussianBlur stdDeviation="0.45293203"/>
+  </filter>
+ </defs>
+ <g>
+  <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+  <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+  <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+  <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+  <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/dynsections.js b/dynsections.js
new file mode 100644 (file)
index 0000000..3174bd7
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+/* @license-end */
diff --git a/files.html b/files.html
new file mode 100644 (file)
index 0000000..c41234a
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="UDPC_8h_source.html"><span class="icondoc"></span></a><a class="el" href="UDPC_8h.html" target="_self">UDPC.h</a></td><td class="desc">Public API for UDPConnection </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/folderclosed.png b/folderclosed.png
new file mode 100644 (file)
index 0000000..bb8ab35
Binary files /dev/null and b/folderclosed.png differ
diff --git a/folderopen.png b/folderopen.png
new file mode 100644 (file)
index 0000000..d6c7f67
Binary files /dev/null and b/folderopen.png differ
diff --git a/functions.html b/functions.html
new file mode 100644 (file)
index 0000000..ce07d71
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
+<li>data
+: <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">UDPC_PacketInfo</a>
+</li>
+<li>dataSize
+: <a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">UDPC_PacketInfo</a>
+</li>
+<li>flags
+: <a class="el" href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">UDPC_PacketInfo</a>
+</li>
+<li>id
+: <a class="el" href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">UDPC_PacketInfo</a>
+</li>
+<li>receiver
+: <a class="el" href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">UDPC_PacketInfo</a>
+</li>
+<li>sender
+: <a class="el" href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">UDPC_PacketInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/functions_vars.html b/functions_vars.html
new file mode 100644 (file)
index 0000000..7448fc7
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>data
+: <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">UDPC_PacketInfo</a>
+</li>
+<li>dataSize
+: <a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">UDPC_PacketInfo</a>
+</li>
+<li>flags
+: <a class="el" href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">UDPC_PacketInfo</a>
+</li>
+<li>id
+: <a class="el" href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">UDPC_PacketInfo</a>
+</li>
+<li>receiver
+: <a class="el" href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">UDPC_PacketInfo</a>
+</li>
+<li>sender
+: <a class="el" href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">UDPC_PacketInfo</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/globals.html b/globals.html
new file mode 100644 (file)
index 0000000..39a38bb
--- /dev/null
@@ -0,0 +1,240 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>UDPC_add_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">UDPC.h</a>
+</li>
+<li>UDPC_AUTH_POLICY_FALLBACK
+: <a class="el" href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">UDPC.h</a>
+</li>
+<li>UDPC_AUTH_POLICY_STRICT
+: <a class="el" href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">UDPC.h</a>
+</li>
+<li>UDPC_AuthPolicy
+: <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC.h</a>
+</li>
+<li>UDPC_clear_whitelist()
+: <a class="el" href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">UDPC.h</a>
+</li>
+<li>UDPC_client_initiate_connection()
+: <a class="el" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">UDPC.h</a>
+</li>
+<li>UDPC_ConnectionId
+: <a class="el" href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">UDPC.h</a>
+</li>
+<li>UDPC_create_id()
+: <a class="el" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">UDPC.h</a>
+</li>
+<li>UDPC_create_id_anyaddr()
+: <a class="el" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">UDPC.h</a>
+</li>
+<li>UDPC_create_id_easy()
+: <a class="el" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">UDPC.h</a>
+</li>
+<li>UDPC_create_id_full()
+: <a class="el" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">UDPC.h</a>
+</li>
+<li>UDPC_destroy()
+: <a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">UDPC.h</a>
+</li>
+<li>UDPC_disable_threaded_update()
+: <a class="el" href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">UDPC.h</a>
+</li>
+<li>UDPC_drop_connection()
+: <a class="el" href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">UDPC.h</a>
+</li>
+<li>UDPC_enable_threaded_update()
+: <a class="el" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">UDPC.h</a>
+</li>
+<li>UDPC_enable_threaded_update_ms()
+: <a class="el" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">UDPC.h</a>
+</li>
+<li>UDPC_ERROR
+: <a class="el" href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">UDPC.h</a>
+</li>
+<li>UDPC_Event
+: <a class="el" href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">UDPC.h</a>
+</li>
+<li>UDPC_EventType
+: <a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC.h</a>
+</li>
+<li>UDPC_free_list_connected()
+: <a class="el" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">UDPC.h</a>
+</li>
+<li>UDPC_free_PacketInfo()
+: <a class="el" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC.h</a>
+</li>
+<li>UDPC_get_auth_policy()
+: <a class="el" href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">UDPC.h</a>
+</li>
+<li>UDPC_get_event()
+: <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">UDPC.h</a>
+</li>
+<li>UDPC_get_list_connected()
+: <a class="el" href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">UDPC.h</a>
+</li>
+<li>UDPC_get_logging_type()
+: <a class="el" href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">UDPC.h</a>
+</li>
+<li>UDPC_get_max_queued_size()
+: <a class="el" href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">UDPC.h</a>
+</li>
+<li>UDPC_get_protocol_id()
+: <a class="el" href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">UDPC.h</a>
+</li>
+<li>UDPC_get_queue_send_current_size()
+: <a class="el" href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">UDPC.h</a>
+</li>
+<li>UDPC_get_queued_size()
+: <a class="el" href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">UDPC.h</a>
+</li>
+<li>UDPC_get_received()
+: <a class="el" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">UDPC.h</a>
+</li>
+<li>UDPC_get_receiving_events()
+: <a class="el" href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">UDPC.h</a>
+</li>
+<li>UDPC_has_connection()
+: <a class="el" href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">UDPC.h</a>
+</li>
+<li>UDPC_has_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">UDPC.h</a>
+</li>
+<li>UDPC_INFO
+: <a class="el" href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">UDPC.h</a>
+</li>
+<li>UDPC_init()
+: <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">UDPC.h</a>
+</li>
+<li>UDPC_init_threaded_update()
+: <a class="el" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">UDPC.h</a>
+</li>
+<li>UDPC_init_threaded_update_ms()
+: <a class="el" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">UDPC.h</a>
+</li>
+<li>UDPC_is_valid_context()
+: <a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">UDPC.h</a>
+</li>
+<li>UDPC_PACKET_MAX_SIZE
+: <a class="el" href="UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827">UDPC.h</a>
+</li>
+<li>UDPC_PacketInfo
+: <a class="el" href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">UDPC.h</a>
+</li>
+<li>UDPC_queue_send()
+: <a class="el" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">UDPC.h</a>
+</li>
+<li>UDPC_remove_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">UDPC.h</a>
+</li>
+<li>UDPC_set_accept_new_connections()
+: <a class="el" href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">UDPC.h</a>
+</li>
+<li>UDPC_set_auth_policy()
+: <a class="el" href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">UDPC.h</a>
+</li>
+<li>UDPC_set_libsodium_key_easy()
+: <a class="el" href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">UDPC.h</a>
+</li>
+<li>UDPC_set_libsodium_keys()
+: <a class="el" href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">UDPC.h</a>
+</li>
+<li>UDPC_set_logging_type()
+: <a class="el" href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">UDPC.h</a>
+</li>
+<li>UDPC_set_protocol_id()
+: <a class="el" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">UDPC.h</a>
+</li>
+<li>UDPC_set_receiving_events()
+: <a class="el" href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">UDPC.h</a>
+</li>
+<li>UDPC_SILENT
+: <a class="el" href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">UDPC.h</a>
+</li>
+<li>UDPC_strtoa()
+: <a class="el" href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">UDPC.h</a>
+</li>
+<li>UDPC_unset_libsodium_keys()
+: <a class="el" href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">UDPC.h</a>
+</li>
+<li>UDPC_update()
+: <a class="el" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">UDPC.h</a>
+</li>
+<li>UDPC_VERBOSE
+: <a class="el" href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">UDPC.h</a>
+</li>
+<li>UDPC_WARNING
+: <a class="el" href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">UDPC.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/globals_defs.html b/globals_defs.html
new file mode 100644 (file)
index 0000000..f4c7cee
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>UDPC_PACKET_MAX_SIZE
+: <a class="el" href="UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827">UDPC.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/globals_func.html b/globals_func.html
new file mode 100644 (file)
index 0000000..86aeb3a
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>UDPC_add_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8">UDPC.h</a>
+</li>
+<li>UDPC_clear_whitelist()
+: <a class="el" href="UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26">UDPC.h</a>
+</li>
+<li>UDPC_client_initiate_connection()
+: <a class="el" href="UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55">UDPC.h</a>
+</li>
+<li>UDPC_create_id()
+: <a class="el" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d">UDPC.h</a>
+</li>
+<li>UDPC_create_id_anyaddr()
+: <a class="el" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df">UDPC.h</a>
+</li>
+<li>UDPC_create_id_easy()
+: <a class="el" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131">UDPC.h</a>
+</li>
+<li>UDPC_create_id_full()
+: <a class="el" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19">UDPC.h</a>
+</li>
+<li>UDPC_destroy()
+: <a class="el" href="UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e">UDPC.h</a>
+</li>
+<li>UDPC_disable_threaded_update()
+: <a class="el" href="UDPC_8h.html#a404d2c7a83903004f928737241ecc63a">UDPC.h</a>
+</li>
+<li>UDPC_drop_connection()
+: <a class="el" href="UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380">UDPC.h</a>
+</li>
+<li>UDPC_enable_threaded_update()
+: <a class="el" href="UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f">UDPC.h</a>
+</li>
+<li>UDPC_enable_threaded_update_ms()
+: <a class="el" href="UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833">UDPC.h</a>
+</li>
+<li>UDPC_free_list_connected()
+: <a class="el" href="UDPC_8h.html#a8880067a93211c257763c42264f6ceef">UDPC.h</a>
+</li>
+<li>UDPC_free_PacketInfo()
+: <a class="el" href="UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845">UDPC.h</a>
+</li>
+<li>UDPC_get_auth_policy()
+: <a class="el" href="UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4">UDPC.h</a>
+</li>
+<li>UDPC_get_event()
+: <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510">UDPC.h</a>
+</li>
+<li>UDPC_get_list_connected()
+: <a class="el" href="UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213">UDPC.h</a>
+</li>
+<li>UDPC_get_logging_type()
+: <a class="el" href="UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096">UDPC.h</a>
+</li>
+<li>UDPC_get_max_queued_size()
+: <a class="el" href="UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f">UDPC.h</a>
+</li>
+<li>UDPC_get_protocol_id()
+: <a class="el" href="UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404">UDPC.h</a>
+</li>
+<li>UDPC_get_queue_send_current_size()
+: <a class="el" href="UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd">UDPC.h</a>
+</li>
+<li>UDPC_get_queued_size()
+: <a class="el" href="UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2">UDPC.h</a>
+</li>
+<li>UDPC_get_received()
+: <a class="el" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3">UDPC.h</a>
+</li>
+<li>UDPC_get_receiving_events()
+: <a class="el" href="UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d">UDPC.h</a>
+</li>
+<li>UDPC_has_connection()
+: <a class="el" href="UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082">UDPC.h</a>
+</li>
+<li>UDPC_has_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172">UDPC.h</a>
+</li>
+<li>UDPC_init()
+: <a class="el" href="UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2">UDPC.h</a>
+</li>
+<li>UDPC_init_threaded_update()
+: <a class="el" href="UDPC_8h.html#a614e2a058b89839d53fe9d348a058323">UDPC.h</a>
+</li>
+<li>UDPC_init_threaded_update_ms()
+: <a class="el" href="UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6">UDPC.h</a>
+</li>
+<li>UDPC_is_valid_context()
+: <a class="el" href="UDPC_8h.html#ac01480f803b063e2b44794420df0f671">UDPC.h</a>
+</li>
+<li>UDPC_queue_send()
+: <a class="el" href="UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4">UDPC.h</a>
+</li>
+<li>UDPC_remove_whitelist_pk()
+: <a class="el" href="UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383">UDPC.h</a>
+</li>
+<li>UDPC_set_accept_new_connections()
+: <a class="el" href="UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb">UDPC.h</a>
+</li>
+<li>UDPC_set_auth_policy()
+: <a class="el" href="UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581">UDPC.h</a>
+</li>
+<li>UDPC_set_libsodium_key_easy()
+: <a class="el" href="UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe">UDPC.h</a>
+</li>
+<li>UDPC_set_libsodium_keys()
+: <a class="el" href="UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1">UDPC.h</a>
+</li>
+<li>UDPC_set_logging_type()
+: <a class="el" href="UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305">UDPC.h</a>
+</li>
+<li>UDPC_set_protocol_id()
+: <a class="el" href="UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a">UDPC.h</a>
+</li>
+<li>UDPC_set_receiving_events()
+: <a class="el" href="UDPC_8h.html#a380c91ee395cff22189c7988c3381787">UDPC.h</a>
+</li>
+<li>UDPC_strtoa()
+: <a class="el" href="UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6">UDPC.h</a>
+</li>
+<li>UDPC_unset_libsodium_keys()
+: <a class="el" href="UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9">UDPC.h</a>
+</li>
+<li>UDPC_update()
+: <a class="el" href="UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b">UDPC.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/globals_type.html b/globals_type.html
new file mode 100644 (file)
index 0000000..9ef8c09
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>UDPC_AuthPolicy
+: <a class="el" href="UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a">UDPC.h</a>
+</li>
+<li>UDPC_ConnectionId
+: <a class="el" href="UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2">UDPC.h</a>
+</li>
+<li>UDPC_Event
+: <a class="el" href="UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed">UDPC.h</a>
+</li>
+<li>UDPC_EventType
+: <a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC.h</a>
+</li>
+<li>UDPC_PacketInfo
+: <a class="el" href="UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b">UDPC.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/globals_vars.html b/globals_vars.html
new file mode 100644 (file)
index 0000000..f650fc2
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>UDPC_AUTH_POLICY_FALLBACK
+: <a class="el" href="UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612">UDPC.h</a>
+</li>
+<li>UDPC_AUTH_POLICY_STRICT
+: <a class="el" href="UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3">UDPC.h</a>
+</li>
+<li>UDPC_ERROR
+: <a class="el" href="UDPC_8h.html#ac04213a4287500a9c5330f543eac3103">UDPC.h</a>
+</li>
+<li>UDPC_INFO
+: <a class="el" href="UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15">UDPC.h</a>
+</li>
+<li>UDPC_SILENT
+: <a class="el" href="UDPC_8h.html#aa5c197773a0914125cb358771139065c">UDPC.h</a>
+</li>
+<li>UDPC_VERBOSE
+: <a class="el" href="UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431">UDPC.h</a>
+</li>
+<li>UDPC_WARNING
+: <a class="el" href="UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17">UDPC.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..0a52389
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: UDPConnection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">UDPConnection </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p><a class="el" href="UDPC_8h.html">UDPC.h</a> </p>
+</div></div><!-- PageDoc -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/jquery.js b/jquery.js
new file mode 100644 (file)
index 0000000..103c32d
--- /dev/null
+++ b/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler â—‹ gmail â€¢ com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ *  jquery.ui.widget.js
+ *  jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
\ No newline at end of file
diff --git a/menu.js b/menu.js
new file mode 100644 (file)
index 0000000..2fe2214
--- /dev/null
+++ b/menu.js
@@ -0,0 +1,51 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+  function makeTree(data,relPath) {
+    var result='';
+    if ('children' in data) {
+      result+='<ul>';
+      for (var i in data.children) {
+        result+='<li><a href="'+relPath+data.children[i].url+'">'+
+                                data.children[i].text+'</a>'+
+                                makeTree(data.children[i],relPath)+'</li>';
+      }
+      result+='</ul>';
+    }
+    return result;
+  }
+
+  $('#main-nav').append(makeTree(menudata,relPath));
+  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+  if (searchEnabled) {
+    if (serverSide) {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+    } else {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
+    }
+  }
+  $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/menudata.js b/menudata.js
new file mode 100644 (file)
index 0000000..9c5c4cc
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Structure Index",url:"classes.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html"},
+{text:"Variables",url:"functions_vars.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"Globals",url:"globals.html",children:[
+{text:"All",url:"globals.html",children:[
+{text:"u",url:"globals.html#index_u"}]},
+{text:"Functions",url:"globals_func.html",children:[
+{text:"u",url:"globals_func.html#index_u"}]},
+{text:"Variables",url:"globals_vars.html"},
+{text:"Typedefs",url:"globals_type.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}
diff --git a/nav_f.png b/nav_f.png
new file mode 100644 (file)
index 0000000..72a58a5
Binary files /dev/null and b/nav_f.png differ
diff --git a/nav_g.png b/nav_g.png
new file mode 100644 (file)
index 0000000..2093a23
Binary files /dev/null and b/nav_g.png differ
diff --git a/nav_h.png b/nav_h.png
new file mode 100644 (file)
index 0000000..33389b1
Binary files /dev/null and b/nav_h.png differ
diff --git a/open.png b/open.png
new file mode 100644 (file)
index 0000000..30f75c7
Binary files /dev/null and b/open.png differ
diff --git a/search/all_0.html b/search/all_0.html
new file mode 100644 (file)
index 0000000..1ec5b2d
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_0.js b/search/all_0.js
new file mode 100644 (file)
index 0000000..2eb9505
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['data_0',['data',['../structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e',1,'UDPC_PacketInfo']]],
+  ['datasize_1',['dataSize',['../structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/all_1.html b/search/all_1.html
new file mode 100644 (file)
index 0000000..9f80e90
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_1.js b/search/all_1.js
new file mode 100644 (file)
index 0000000..6193fee
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['flags_2',['flags',['../structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/all_2.html b/search/all_2.html
new file mode 100644 (file)
index 0000000..02cfffc
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_2.js b/search/all_2.js
new file mode 100644 (file)
index 0000000..9179800
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['id_3',['id',['../structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/all_3.html b/search/all_3.html
new file mode 100644 (file)
index 0000000..39767b8
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_3.js b/search/all_3.js
new file mode 100644 (file)
index 0000000..81d7653
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['receiver_4',['receiver',['../structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/all_4.html b/search/all_4.html
new file mode 100644 (file)
index 0000000..fc40463
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_4.js b/search/all_4.js
new file mode 100644 (file)
index 0000000..454b766
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['sender_5',['sender',['../structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/all_5.html b/search/all_5.html
new file mode 100644 (file)
index 0000000..9dd9344
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_5.js b/search/all_5.js
new file mode 100644 (file)
index 0000000..8a843fa
--- /dev/null
@@ -0,0 +1,60 @@
+var searchData=
+[
+  ['udpc_2eh_6',['UDPC.h',['../UDPC_8h.html',1,'']]],
+  ['udpc_5fadd_5fwhitelist_5fpk_7',['UDPC_add_whitelist_pk',['../UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8',1,'UDPC.h']]],
+  ['udpc_5fauth_5fpolicy_5ffallback_8',['UDPC_AUTH_POLICY_FALLBACK',['../UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612',1,'UDPC.h']]],
+  ['udpc_5fauth_5fpolicy_5fstrict_9',['UDPC_AUTH_POLICY_STRICT',['../UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3',1,'UDPC.h']]],
+  ['udpc_5fauthpolicy_10',['UDPC_AuthPolicy',['../UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a',1,'UDPC.h']]],
+  ['udpc_5fclear_5fwhitelist_11',['UDPC_clear_whitelist',['../UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26',1,'UDPC.h']]],
+  ['udpc_5fclient_5finitiate_5fconnection_12',['UDPC_client_initiate_connection',['../UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55',1,'UDPC.h']]],
+  ['udpc_5fconnectionid_13',['UDPC_ConnectionId',['../structUDPC__ConnectionId.html',1,'UDPC_ConnectionId'],['../UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2',1,'UDPC_ConnectionId():&#160;UDPC.h']]],
+  ['udpc_5fcreate_5fid_14',['UDPC_create_id',['../UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5fanyaddr_15',['UDPC_create_id_anyaddr',['../UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5feasy_16',['UDPC_create_id_easy',['../UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5ffull_17',['UDPC_create_id_full',['../UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19',1,'UDPC.h']]],
+  ['udpc_5fdestroy_18',['UDPC_destroy',['../UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e',1,'UDPC.h']]],
+  ['udpc_5fdisable_5fthreaded_5fupdate_19',['UDPC_disable_threaded_update',['../UDPC_8h.html#a404d2c7a83903004f928737241ecc63a',1,'UDPC.h']]],
+  ['udpc_5fdrop_5fconnection_20',['UDPC_drop_connection',['../UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380',1,'UDPC.h']]],
+  ['udpc_5fenable_5fthreaded_5fupdate_21',['UDPC_enable_threaded_update',['../UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f',1,'UDPC.h']]],
+  ['udpc_5fenable_5fthreaded_5fupdate_5fms_22',['UDPC_enable_threaded_update_ms',['../UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833',1,'UDPC.h']]],
+  ['udpc_5ferror_23',['UDPC_ERROR',['../UDPC_8h.html#ac04213a4287500a9c5330f543eac3103',1,'UDPC.h']]],
+  ['udpc_5fevent_24',['UDPC_Event',['../UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed',1,'UDPC_Event():&#160;UDPC.h'],['../structUDPC__Event.html',1,'UDPC_Event']]],
+  ['udpc_5feventtype_25',['UDPC_EventType',['../UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0',1,'UDPC.h']]],
+  ['udpc_5ffree_5flist_5fconnected_26',['UDPC_free_list_connected',['../UDPC_8h.html#a8880067a93211c257763c42264f6ceef',1,'UDPC.h']]],
+  ['udpc_5ffree_5fpacketinfo_27',['UDPC_free_PacketInfo',['../UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845',1,'UDPC.h']]],
+  ['udpc_5fget_5fauth_5fpolicy_28',['UDPC_get_auth_policy',['../UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4',1,'UDPC.h']]],
+  ['udpc_5fget_5fevent_29',['UDPC_get_event',['../UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510',1,'UDPC.h']]],
+  ['udpc_5fget_5flist_5fconnected_30',['UDPC_get_list_connected',['../UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213',1,'UDPC.h']]],
+  ['udpc_5fget_5flogging_5ftype_31',['UDPC_get_logging_type',['../UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096',1,'UDPC.h']]],
+  ['udpc_5fget_5fmax_5fqueued_5fsize_32',['UDPC_get_max_queued_size',['../UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f',1,'UDPC.h']]],
+  ['udpc_5fget_5fprotocol_5fid_33',['UDPC_get_protocol_id',['../UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404',1,'UDPC.h']]],
+  ['udpc_5fget_5fqueue_5fsend_5fcurrent_5fsize_34',['UDPC_get_queue_send_current_size',['../UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd',1,'UDPC.h']]],
+  ['udpc_5fget_5fqueued_5fsize_35',['UDPC_get_queued_size',['../UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2',1,'UDPC.h']]],
+  ['udpc_5fget_5freceived_36',['UDPC_get_received',['../UDPC_8h.html#affa8655a4e7e3475be441060e92213b3',1,'UDPC.h']]],
+  ['udpc_5fget_5freceiving_5fevents_37',['UDPC_get_receiving_events',['../UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d',1,'UDPC.h']]],
+  ['udpc_5fhas_5fconnection_38',['UDPC_has_connection',['../UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082',1,'UDPC.h']]],
+  ['udpc_5fhas_5fwhitelist_5fpk_39',['UDPC_has_whitelist_pk',['../UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172',1,'UDPC.h']]],
+  ['udpc_5finfo_40',['UDPC_INFO',['../UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15',1,'UDPC.h']]],
+  ['udpc_5finit_41',['UDPC_init',['../UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2',1,'UDPC.h']]],
+  ['udpc_5finit_5fthreaded_5fupdate_42',['UDPC_init_threaded_update',['../UDPC_8h.html#a614e2a058b89839d53fe9d348a058323',1,'UDPC.h']]],
+  ['udpc_5finit_5fthreaded_5fupdate_5fms_43',['UDPC_init_threaded_update_ms',['../UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6',1,'UDPC.h']]],
+  ['udpc_5fis_5fvalid_5fcontext_44',['UDPC_is_valid_context',['../UDPC_8h.html#ac01480f803b063e2b44794420df0f671',1,'UDPC.h']]],
+  ['udpc_5fpacket_5fmax_5fsize_45',['UDPC_PACKET_MAX_SIZE',['../UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827',1,'UDPC.h']]],
+  ['udpc_5fpacketinfo_46',['UDPC_PacketInfo',['../UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b',1,'UDPC_PacketInfo():&#160;UDPC.h'],['../structUDPC__PacketInfo.html',1,'UDPC_PacketInfo']]],
+  ['udpc_5fqueue_5fsend_47',['UDPC_queue_send',['../UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4',1,'UDPC.h']]],
+  ['udpc_5fremove_5fwhitelist_5fpk_48',['UDPC_remove_whitelist_pk',['../UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383',1,'UDPC.h']]],
+  ['udpc_5fset_5faccept_5fnew_5fconnections_49',['UDPC_set_accept_new_connections',['../UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb',1,'UDPC.h']]],
+  ['udpc_5fset_5fauth_5fpolicy_50',['UDPC_set_auth_policy',['../UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581',1,'UDPC.h']]],
+  ['udpc_5fset_5flibsodium_5fkey_5feasy_51',['UDPC_set_libsodium_key_easy',['../UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe',1,'UDPC.h']]],
+  ['udpc_5fset_5flibsodium_5fkeys_52',['UDPC_set_libsodium_keys',['../UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1',1,'UDPC.h']]],
+  ['udpc_5fset_5flogging_5ftype_53',['UDPC_set_logging_type',['../UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305',1,'UDPC.h']]],
+  ['udpc_5fset_5fprotocol_5fid_54',['UDPC_set_protocol_id',['../UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a',1,'UDPC.h']]],
+  ['udpc_5fset_5freceiving_5fevents_55',['UDPC_set_receiving_events',['../UDPC_8h.html#a380c91ee395cff22189c7988c3381787',1,'UDPC.h']]],
+  ['udpc_5fsilent_56',['UDPC_SILENT',['../UDPC_8h.html#aa5c197773a0914125cb358771139065c',1,'UDPC.h']]],
+  ['udpc_5fstrtoa_57',['UDPC_strtoa',['../UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6',1,'UDPC.h']]],
+  ['udpc_5funset_5flibsodium_5fkeys_58',['UDPC_unset_libsodium_keys',['../UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9',1,'UDPC.h']]],
+  ['udpc_5fupdate_59',['UDPC_update',['../UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b',1,'UDPC.h']]],
+  ['udpc_5fverbose_60',['UDPC_VERBOSE',['../UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431',1,'UDPC.h']]],
+  ['udpc_5fwarning_61',['UDPC_WARNING',['../UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17',1,'UDPC.h']]],
+  ['udpconnection_62',['UDPConnection',['../index.html',1,'']]]
+];
diff --git a/search/all_6.html b/search/all_6.html
new file mode 100644 (file)
index 0000000..f1e516d
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_6.js b/search/all_6.js
new file mode 100644 (file)
index 0000000..9ed5e0a
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['value_63',['Value',['../unionUDPC__Event_1_1Value.html',1,'UDPC_Event']]]
+];
diff --git a/search/classes_0.html b/search/classes_0.html
new file mode 100644 (file)
index 0000000..af8159e
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_0.js b/search/classes_0.js
new file mode 100644 (file)
index 0000000..a6138eb
--- /dev/null
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['udpc_5fconnectionid_64',['UDPC_ConnectionId',['../structUDPC__ConnectionId.html',1,'']]],
+  ['udpc_5fevent_65',['UDPC_Event',['../structUDPC__Event.html',1,'']]],
+  ['udpc_5fpacketinfo_66',['UDPC_PacketInfo',['../structUDPC__PacketInfo.html',1,'']]]
+];
diff --git a/search/classes_1.html b/search/classes_1.html
new file mode 100644 (file)
index 0000000..576e916
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_1.js b/search/classes_1.js
new file mode 100644 (file)
index 0000000..6eea1f9
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['value_67',['Value',['../unionUDPC__Event_1_1Value.html',1,'UDPC_Event']]]
+];
diff --git a/search/close.svg b/search/close.svg
new file mode 100644 (file)
index 0000000..a933eea
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   viewBox="0 0 11 11"
+   height="11"
+   width="11"
+   id="svg2"
+   version="1.1">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <path
+     id="path12"
+     d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+     style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/search/defines_0.html b/search/defines_0.html
new file mode 100644 (file)
index 0000000..15cc3de
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/defines_0.js b/search/defines_0.js
new file mode 100644 (file)
index 0000000..c833ad0
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['udpc_5fpacket_5fmax_5fsize_129',['UDPC_PACKET_MAX_SIZE',['../UDPC_8h.html#a8ed92f1223b3f658536728f22d3b3827',1,'UDPC.h']]]
+];
diff --git a/search/files_0.html b/search/files_0.html
new file mode 100644 (file)
index 0000000..9498842
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/files_0.js b/search/files_0.js
new file mode 100644 (file)
index 0000000..8c9a627
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['udpc_2eh_68',['UDPC.h',['../UDPC_8h.html',1,'']]]
+];
diff --git a/search/functions_0.html b/search/functions_0.html
new file mode 100644 (file)
index 0000000..eb4c501
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_0.js b/search/functions_0.js
new file mode 100644 (file)
index 0000000..f1c155c
--- /dev/null
@@ -0,0 +1,45 @@
+var searchData=
+[
+  ['udpc_5fadd_5fwhitelist_5fpk_69',['UDPC_add_whitelist_pk',['../UDPC_8h.html#a71f9bf85a02ddd1b4c921fe9b6694fe8',1,'UDPC.h']]],
+  ['udpc_5fclear_5fwhitelist_70',['UDPC_clear_whitelist',['../UDPC_8h.html#a0e2e0c6a6a442db2cb3223d26f849d26',1,'UDPC.h']]],
+  ['udpc_5fclient_5finitiate_5fconnection_71',['UDPC_client_initiate_connection',['../UDPC_8h.html#a1192e0307f75feeac888fe5d49976f55',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_72',['UDPC_create_id',['../UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5fanyaddr_73',['UDPC_create_id_anyaddr',['../UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5feasy_74',['UDPC_create_id_easy',['../UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131',1,'UDPC.h']]],
+  ['udpc_5fcreate_5fid_5ffull_75',['UDPC_create_id_full',['../UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19',1,'UDPC.h']]],
+  ['udpc_5fdestroy_76',['UDPC_destroy',['../UDPC_8h.html#aad0e88866d4c5cb9c0676bc8d7df574e',1,'UDPC.h']]],
+  ['udpc_5fdisable_5fthreaded_5fupdate_77',['UDPC_disable_threaded_update',['../UDPC_8h.html#a404d2c7a83903004f928737241ecc63a',1,'UDPC.h']]],
+  ['udpc_5fdrop_5fconnection_78',['UDPC_drop_connection',['../UDPC_8h.html#a44bc5cc29862c93e938ac8a625c56380',1,'UDPC.h']]],
+  ['udpc_5fenable_5fthreaded_5fupdate_79',['UDPC_enable_threaded_update',['../UDPC_8h.html#a0fafce547e9185c29f42d06213b0ff4f',1,'UDPC.h']]],
+  ['udpc_5fenable_5fthreaded_5fupdate_5fms_80',['UDPC_enable_threaded_update_ms',['../UDPC_8h.html#a1a50763773d55aa7a2a9c7ad69575833',1,'UDPC.h']]],
+  ['udpc_5ffree_5flist_5fconnected_81',['UDPC_free_list_connected',['../UDPC_8h.html#a8880067a93211c257763c42264f6ceef',1,'UDPC.h']]],
+  ['udpc_5ffree_5fpacketinfo_82',['UDPC_free_PacketInfo',['../UDPC_8h.html#a68ed6dcb37c6024486fad28ab0bed845',1,'UDPC.h']]],
+  ['udpc_5fget_5fauth_5fpolicy_83',['UDPC_get_auth_policy',['../UDPC_8h.html#ab79769e36a92c346c6c410be158ddfe4',1,'UDPC.h']]],
+  ['udpc_5fget_5fevent_84',['UDPC_get_event',['../UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510',1,'UDPC.h']]],
+  ['udpc_5fget_5flist_5fconnected_85',['UDPC_get_list_connected',['../UDPC_8h.html#a7fe3e502f4c6f86ce5b2cd1f303aa213',1,'UDPC.h']]],
+  ['udpc_5fget_5flogging_5ftype_86',['UDPC_get_logging_type',['../UDPC_8h.html#ad0c7d69eeda20e98696d5c89bbbab096',1,'UDPC.h']]],
+  ['udpc_5fget_5fmax_5fqueued_5fsize_87',['UDPC_get_max_queued_size',['../UDPC_8h.html#a7983f38fe13677f5b35b90cefa54974f',1,'UDPC.h']]],
+  ['udpc_5fget_5fprotocol_5fid_88',['UDPC_get_protocol_id',['../UDPC_8h.html#aab6fb21c6f5b44123e2660f84561d404',1,'UDPC.h']]],
+  ['udpc_5fget_5fqueue_5fsend_5fcurrent_5fsize_89',['UDPC_get_queue_send_current_size',['../UDPC_8h.html#aa3f67ad23ae34b647b7f4dd17a8a96dd',1,'UDPC.h']]],
+  ['udpc_5fget_5fqueued_5fsize_90',['UDPC_get_queued_size',['../UDPC_8h.html#a1fb87c1522d353bd9fde4c94ec8454c2',1,'UDPC.h']]],
+  ['udpc_5fget_5freceived_91',['UDPC_get_received',['../UDPC_8h.html#affa8655a4e7e3475be441060e92213b3',1,'UDPC.h']]],
+  ['udpc_5fget_5freceiving_5fevents_92',['UDPC_get_receiving_events',['../UDPC_8h.html#a8c74f1b9ee0fec610087f83096c9679d',1,'UDPC.h']]],
+  ['udpc_5fhas_5fconnection_93',['UDPC_has_connection',['../UDPC_8h.html#a4a555a011e95445ed4a2aa88deb17082',1,'UDPC.h']]],
+  ['udpc_5fhas_5fwhitelist_5fpk_94',['UDPC_has_whitelist_pk',['../UDPC_8h.html#a94660d04e7f9b4d9c51a7b2c67707172',1,'UDPC.h']]],
+  ['udpc_5finit_95',['UDPC_init',['../UDPC_8h.html#a89dee65fcd5b70d25abbf6d4a3ee59f2',1,'UDPC.h']]],
+  ['udpc_5finit_5fthreaded_5fupdate_96',['UDPC_init_threaded_update',['../UDPC_8h.html#a614e2a058b89839d53fe9d348a058323',1,'UDPC.h']]],
+  ['udpc_5finit_5fthreaded_5fupdate_5fms_97',['UDPC_init_threaded_update_ms',['../UDPC_8h.html#ab9a5258877ad3084f7d29954be525bd6',1,'UDPC.h']]],
+  ['udpc_5fis_5fvalid_5fcontext_98',['UDPC_is_valid_context',['../UDPC_8h.html#ac01480f803b063e2b44794420df0f671',1,'UDPC.h']]],
+  ['udpc_5fqueue_5fsend_99',['UDPC_queue_send',['../UDPC_8h.html#a7527954b63f502479bdd3771df7cf3a4',1,'UDPC.h']]],
+  ['udpc_5fremove_5fwhitelist_5fpk_100',['UDPC_remove_whitelist_pk',['../UDPC_8h.html#abc2d3284e5c45d6cd888154e813a1383',1,'UDPC.h']]],
+  ['udpc_5fset_5faccept_5fnew_5fconnections_101',['UDPC_set_accept_new_connections',['../UDPC_8h.html#a32e217a02b2e8ba05568aabfaecbcdcb',1,'UDPC.h']]],
+  ['udpc_5fset_5fauth_5fpolicy_102',['UDPC_set_auth_policy',['../UDPC_8h.html#a8d0dbbd258e17844a2f9a0e277789581',1,'UDPC.h']]],
+  ['udpc_5fset_5flibsodium_5fkey_5feasy_103',['UDPC_set_libsodium_key_easy',['../UDPC_8h.html#ad7eb0c77561f84a63dad29388d099fbe',1,'UDPC.h']]],
+  ['udpc_5fset_5flibsodium_5fkeys_104',['UDPC_set_libsodium_keys',['../UDPC_8h.html#abd0a7d5c0a17cf3351dbe5abf5f70df1',1,'UDPC.h']]],
+  ['udpc_5fset_5flogging_5ftype_105',['UDPC_set_logging_type',['../UDPC_8h.html#a6c90dc723e67a07bf65c1fc97e526305',1,'UDPC.h']]],
+  ['udpc_5fset_5fprotocol_5fid_106',['UDPC_set_protocol_id',['../UDPC_8h.html#a0720bec1922660c983b1b3d9f6a5de3a',1,'UDPC.h']]],
+  ['udpc_5fset_5freceiving_5fevents_107',['UDPC_set_receiving_events',['../UDPC_8h.html#a380c91ee395cff22189c7988c3381787',1,'UDPC.h']]],
+  ['udpc_5fstrtoa_108',['UDPC_strtoa',['../UDPC_8h.html#a2ae8e7d87f785dd3b3353a00005c3dc6',1,'UDPC.h']]],
+  ['udpc_5funset_5flibsodium_5fkeys_109',['UDPC_unset_libsodium_keys',['../UDPC_8h.html#a62a5131b90653ccbfc86ad5db4031ba9',1,'UDPC.h']]],
+  ['udpc_5fupdate_110',['UDPC_update',['../UDPC_8h.html#a68fefba9edca7cd0a81d97ac27c70c0b',1,'UDPC.h']]]
+];
diff --git a/search/mag_sel.svg b/search/mag_sel.svg
new file mode 100644 (file)
index 0000000..03626f6
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   width="20"
+   height="19"
+   viewBox="0 0 20 19"
+   sodipodi:docname="mag_sel.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="2096"
+     id="namedview4"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="32"
+     inkscape:cx="5.9792688"
+     inkscape:cy="1.1436277"
+     inkscape:window-x="1920"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <circle
+     style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4611"
+     cx="5.5"
+     cy="8.5"
+     r="3.5" />
+  <path
+     style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 11,7 13.5,10 16,7 Z"
+     id="path4609"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 8.1085854,11.109059 2.7823556,2.782356"
+     id="path4630"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/search/nomatches.html b/search/nomatches.html
new file mode 100644 (file)
index 0000000..2b9360b
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/search/pages_0.html b/search/pages_0.html
new file mode 100644 (file)
index 0000000..8517b48
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/pages_0.js b/search/pages_0.js
new file mode 100644 (file)
index 0000000..8788991
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['udpconnection_130',['UDPConnection',['../index.html',1,'']]]
+];
diff --git a/search/search.css b/search/search.css
new file mode 100644 (file)
index 0000000..9074198
--- /dev/null
@@ -0,0 +1,257 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+    white-space : nowrap;
+    background: white;
+    border-radius: 0.65em;
+    box-shadow: inset 0.5px 0.5px 3px 0px #555;
+    z-index: 102;
+}
+
+#MSearchBox .left {
+    display: inline-block;
+    vertical-align: middle;
+    height: 1.4em;
+}
+
+#MSearchSelect {
+    display: inline-block;
+    vertical-align: middle;
+    height: 1.4em;
+    padding: 0 0 0 0.3em;
+    margin: 0;
+}
+
+#MSearchField {
+    display: inline-block;
+    vertical-align: middle;
+    width: 7.5em;
+    height: 1.1em;
+    margin: 0 0.15em;
+    padding: 0;
+    line-height: 1em;
+    border:none;
+    color: #909090;
+    outline: none;
+    font-family: Arial, Verdana, sans-serif;
+    -webkit-border-radius: 0px;
+    border-radius: 0px;
+    background: none;
+}
+
+
+#MSearchBox .right {
+    display: inline-block;
+    vertical-align: middle;
+    width: 1.4em;
+    height: 1.4em;
+}
+
+#MSearchClose {
+    display: none;
+    font-size: inherit;
+    background : none;
+    border: none;
+    margin: 0;
+    padding: 0;
+    outline: none;
+
+}
+
+#MSearchCloseImg {
+    height: 1.4em;
+    padding: 0.3em;
+    margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+#main-menu > li:last-child {
+    /* This <li> object is the parent of the search bar */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 36px;
+    margin-right: 1em;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #90A5CE;
+    background-color: #F9FAFC;
+    z-index: 10001;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #3D578C;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #EEF1F7;
+    z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #425E97;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #425E97; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+    font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+    font-family: Arial, Verdana, sans-serif;
+}
+
+.SRResult {
+    display: none;
+}
+
+div.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/search/search.js b/search/search.js
new file mode 100644 (file)
index 0000000..fb226f7
--- /dev/null
@@ -0,0 +1,816 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label, extension)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+  if (!extension || extension == "") { extension = ".html"; }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+  this.extension             = extension;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else
+      {
+        window.frames.MSearchResults.postMessage("take_focus", "*");
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches' + this.extension;
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline-block';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+/* @license-end */
diff --git a/search/search_l.png b/search/search_l.png
new file mode 100644 (file)
index 0000000..fd5f7da
Binary files /dev/null and b/search/search_l.png differ
diff --git a/search/search_m.png b/search/search_m.png
new file mode 100644 (file)
index 0000000..b429a16
Binary files /dev/null and b/search/search_m.png differ
diff --git a/search/search_r.png b/search/search_r.png
new file mode 100644 (file)
index 0000000..1af5d21
Binary files /dev/null and b/search/search_r.png differ
diff --git a/search/searchdata.js b/search/searchdata.js
new file mode 100644 (file)
index 0000000..b484f5e
--- /dev/null
@@ -0,0 +1,36 @@
+var indexSectionsWithContent =
+{
+  0: "dfirsuv",
+  1: "uv",
+  2: "u",
+  3: "u",
+  4: "dfirsu",
+  5: "u",
+  6: "u",
+  7: "u"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "classes",
+  2: "files",
+  3: "functions",
+  4: "variables",
+  5: "typedefs",
+  6: "defines",
+  7: "pages"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Data Structures",
+  2: "Files",
+  3: "Functions",
+  4: "Variables",
+  5: "Typedefs",
+  6: "Macros",
+  7: "Pages"
+};
+
diff --git a/search/typedefs_0.html b/search/typedefs_0.html
new file mode 100644 (file)
index 0000000..a4684c4
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/typedefs_0.js b/search/typedefs_0.js
new file mode 100644 (file)
index 0000000..8009f89
--- /dev/null
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['udpc_5fauthpolicy_124',['UDPC_AuthPolicy',['../UDPC_8h.html#a228cd7ddf56a4e76e216bc3b80e8bd4a',1,'UDPC.h']]],
+  ['udpc_5fconnectionid_125',['UDPC_ConnectionId',['../UDPC_8h.html#ae5afb11964c7a55edf34ddf9097779b2',1,'UDPC.h']]],
+  ['udpc_5fevent_126',['UDPC_Event',['../UDPC_8h.html#a7b3215b65686670720f098eda2ca1eed',1,'UDPC.h']]],
+  ['udpc_5feventtype_127',['UDPC_EventType',['../UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0',1,'UDPC.h']]],
+  ['udpc_5fpacketinfo_128',['UDPC_PacketInfo',['../UDPC_8h.html#ae0261958047ebb5c6a402aa805e4e55b',1,'UDPC.h']]]
+];
diff --git a/search/variables_0.html b/search/variables_0.html
new file mode 100644 (file)
index 0000000..1e477c0
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_0.js b/search/variables_0.js
new file mode 100644 (file)
index 0000000..0c3c3b0
--- /dev/null
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['data_111',['data',['../structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e',1,'UDPC_PacketInfo']]],
+  ['datasize_112',['dataSize',['../structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/variables_1.html b/search/variables_1.html
new file mode 100644 (file)
index 0000000..ea73d9a
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_1.js b/search/variables_1.js
new file mode 100644 (file)
index 0000000..fda11d3
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['flags_113',['flags',['../structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/variables_2.html b/search/variables_2.html
new file mode 100644 (file)
index 0000000..0580462
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_2.js b/search/variables_2.js
new file mode 100644 (file)
index 0000000..9259395
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['id_114',['id',['../structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/variables_3.html b/search/variables_3.html
new file mode 100644 (file)
index 0000000..0d69e76
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_3.js b/search/variables_3.js
new file mode 100644 (file)
index 0000000..0571ee3
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['receiver_115',['receiver',['../structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/variables_4.html b/search/variables_4.html
new file mode 100644 (file)
index 0000000..a4b6506
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_4.js b/search/variables_4.js
new file mode 100644 (file)
index 0000000..9e2dbaf
--- /dev/null
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['sender_116',['sender',['../structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc',1,'UDPC_PacketInfo']]]
+];
diff --git a/search/variables_5.html b/search/variables_5.html
new file mode 100644 (file)
index 0000000..7e345d1
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/variables_5.js b/search/variables_5.js
new file mode 100644 (file)
index 0000000..9272503
--- /dev/null
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['udpc_5fauth_5fpolicy_5ffallback_117',['UDPC_AUTH_POLICY_FALLBACK',['../UDPC_8h.html#a96ecd597f88d458ed108f33e4f0a6612',1,'UDPC.h']]],
+  ['udpc_5fauth_5fpolicy_5fstrict_118',['UDPC_AUTH_POLICY_STRICT',['../UDPC_8h.html#a6af4629253b3ed1f411015410cee9ad3',1,'UDPC.h']]],
+  ['udpc_5ferror_119',['UDPC_ERROR',['../UDPC_8h.html#ac04213a4287500a9c5330f543eac3103',1,'UDPC.h']]],
+  ['udpc_5finfo_120',['UDPC_INFO',['../UDPC_8h.html#a248f51c4df127b7fd3a5c91ad5509d15',1,'UDPC.h']]],
+  ['udpc_5fsilent_121',['UDPC_SILENT',['../UDPC_8h.html#aa5c197773a0914125cb358771139065c',1,'UDPC.h']]],
+  ['udpc_5fverbose_122',['UDPC_VERBOSE',['../UDPC_8h.html#ad5741af4e5cf1da40fe4a7b92cd1c431',1,'UDPC.h']]],
+  ['udpc_5fwarning_123',['UDPC_WARNING',['../UDPC_8h.html#a9cc5d705069747eb439a1c5607baac17',1,'UDPC.h']]]
+];
diff --git a/splitbar.png b/splitbar.png
new file mode 100644 (file)
index 0000000..fe895f2
Binary files /dev/null and b/splitbar.png differ
diff --git a/structUDPC__ConnectionId.html b/structUDPC__ConnectionId.html
new file mode 100644 (file)
index 0000000..e04e6b6
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: UDPC_ConnectionId Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">UDPC_ConnectionId Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Data identifying a peer via addr, port, and scope_id.  
+ <a href="structUDPC__ConnectionId.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="UDPC_8h_source.html">UDPC.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ace33511e3490f5e686cff7f047bf1729"><td class="memItemLeft" align="right" valign="top"><a id="ace33511e3490f5e686cff7f047bf1729"></a>
+UDPC_IPV6_ADDR_TYPE&#160;</td><td class="memItemRight" valign="bottom"><b>addr</b></td></tr>
+<tr class="separator:ace33511e3490f5e686cff7f047bf1729"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03517f4451bbfa4ff4021d38725ce513"><td class="memItemLeft" align="right" valign="top"><a id="a03517f4451bbfa4ff4021d38725ce513"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>scope_id</b></td></tr>
+<tr class="separator:a03517f4451bbfa4ff4021d38725ce513"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3be4eba99a41e33023b976ea29474029"><td class="memItemLeft" align="right" valign="top"><a id="a3be4eba99a41e33023b976ea29474029"></a>
+uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>port</b></td></tr>
+<tr class="separator:a3be4eba99a41e33023b976ea29474029"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Data identifying a peer via addr, port, and scope_id. </p>
+<p>This struct needn't be used directly; use <a class="el" href="UDPC_8h.html#aea7e32ca9fdc04530f95c97459391e6d" title="Creates an UDPC_ConnectionId with the given addr and port.">UDPC_create_id()</a>, <a class="el" href="UDPC_8h.html#ab7cb345ce117c04017afd443e5748f19" title="Creates an UDPC_ConnectionId with the given addr, scope_id, and port.">UDPC_create_id_full()</a>, <a class="el" href="UDPC_8h.html#a0fa3e1e54877029a226ab9cfb74215df" title="Creates an UDPC_ConnectionId with the given port.">UDPC_create_id_anyaddr()</a>, or <a class="el" href="UDPC_8h.html#a8b80d2df882f03aeee8a92bed7fb0131" title="Creates an UDPC_ConnectionId with the given addr string and port.">UDPC_create_id_easy()</a> to create one. This struct does not hold dynamic data, so there is no need to free it. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>src/<a class="el" href="UDPC_8h_source.html">UDPC.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structUDPC__Event.html b/structUDPC__Event.html
new file mode 100644 (file)
index 0000000..576d9b9
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: UDPC_Event Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">UDPC_Event Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A struct containing information related to the type of event.  
+ <a href="structUDPC__Event.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="UDPC_8h_source.html">UDPC.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionUDPC__Event_1_1Value.html">Value</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ae1cfa566bb5079c84d1852d7ac1b1833"><td class="memItemLeft" align="right" valign="top"><a id="ae1cfa566bb5079c84d1852d7ac1b1833"></a>
+<a class="el" href="UDPC_8h.html#adaa0534bf7f04bb2f6ce8975c99c4af0">UDPC_EventType</a>&#160;</td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
+<tr class="separator:ae1cfa566bb5079c84d1852d7ac1b1833"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9eb52565caff5b8ffd3fd40156b961d2"><td class="memItemLeft" align="right" valign="top"><a id="a9eb52565caff5b8ffd3fd40156b961d2"></a>
+<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><b>conId</b></td></tr>
+<tr class="separator:a9eb52565caff5b8ffd3fd40156b961d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c05ba5e90d1590a8ebfda0a277e2909"><td class="memItemLeft" align="right" valign="top"><a id="a4c05ba5e90d1590a8ebfda0a277e2909"></a>
+union <a class="el" href="unionUDPC__Event_1_1Value.html">UDPC_Event::Value</a>&#160;</td><td class="memItemRight" valign="bottom"><b>v</b></td></tr>
+<tr class="separator:a4c05ba5e90d1590a8ebfda0a277e2909"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A struct containing information related to the type of event. </p>
+<p>Note that instances of this struct received from a call to <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a> will not store any useful data in its union member variable <code>v</code> (it will only be used internally). Thus, all events received through a call to <a class="el" href="UDPC_8h.html#a2c05c6fe89edde1e05ba9b6d8b5f7510" title="Gets a recorded event.">UDPC_get_event()</a> will contain a valid <a class="el" href="structUDPC__ConnectionId.html" title="Data identifying a peer via addr, port, and scope_id.">UDPC_ConnectionId</a> <code>conId</code> that identifies the peer that the event is referring to. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>src/<a class="el" href="UDPC_8h_source.html">UDPC.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structUDPC__PacketInfo.html b/structUDPC__PacketInfo.html
new file mode 100644 (file)
index 0000000..749ae70
--- /dev/null
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: UDPC_PacketInfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">UDPC_PacketInfo Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Data representing a received/sent packet.  
+ <a href="structUDPC__PacketInfo.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="UDPC_8h_source.html">UDPC.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a1358f91f28c4a023ef201e868bf1069e"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">data</a></td></tr>
+<tr class="separator:a1358f91f28c4a023ef201e868bf1069e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad538ac2682e8276dc33553237f012ce1"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">flags</a></td></tr>
+<tr class="memdesc:ad538ac2682e8276dc33553237f012ce1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags indication some additional information about the received packet.  <a href="structUDPC__PacketInfo.html#ad538ac2682e8276dc33553237f012ce1">More...</a><br /></td></tr>
+<tr class="separator:ad538ac2682e8276dc33553237f012ce1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac21cc9beab22eb1e1a2d5c0797ed0fbe"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">id</a></td></tr>
+<tr class="memdesc:ac21cc9beab22eb1e1a2d5c0797ed0fbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">The packet's id.  <a href="structUDPC__PacketInfo.html#ac21cc9beab22eb1e1a2d5c0797ed0fbe">More...</a><br /></td></tr>
+<tr class="separator:ac21cc9beab22eb1e1a2d5c0797ed0fbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70230a2eb6a638d9e9fc04e230c92a74"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">dataSize</a></td></tr>
+<tr class="memdesc:a70230a2eb6a638d9e9fc04e230c92a74"><td class="mdescLeft">&#160;</td><td class="mdescRight">The size in bytes of the received packet's data inside the <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">data</a> pointer member variable.  <a href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">More...</a><br /></td></tr>
+<tr class="separator:a70230a2eb6a638d9e9fc04e230c92a74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa55075dde4f9c476b4d1467bbffd43a7"><td class="memItemLeft" align="right" valign="top"><a id="aa55075dde4f9c476b4d1467bbffd43a7"></a>
+uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>rtt</b></td></tr>
+<tr class="separator:aa55075dde4f9c476b4d1467bbffd43a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5af734c663d3df72dad2b81a8794b6dc"><td class="memItemLeft" align="right" valign="top"><a id="a5af734c663d3df72dad2b81a8794b6dc"></a>
+<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#a5af734c663d3df72dad2b81a8794b6dc">sender</a></td></tr>
+<tr class="memdesc:a5af734c663d3df72dad2b81a8794b6dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> of the sender. <br /></td></tr>
+<tr class="separator:a5af734c663d3df72dad2b81a8794b6dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a965f393584d389dc72becd439cafde0d"><td class="memItemLeft" align="right" valign="top"><a id="a965f393584d389dc72becd439cafde0d"></a>
+<a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structUDPC__PacketInfo.html#a965f393584d389dc72becd439cafde0d">receiver</a></td></tr>
+<tr class="memdesc:a965f393584d389dc72becd439cafde0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="structUDPC__ConnectionId.html">UDPC_ConnectionId</a> of the receiver. <br /></td></tr>
+<tr class="separator:a965f393584d389dc72becd439cafde0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Data representing a received/sent packet. </p>
+<p>If <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">data</a> is NULL or <a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">dataSize</a> is 0, then this packet is invalid.</p>
+<dl class="section warning"><dt>Warning</dt><dd>This struct must be free'd with a call to UDPC_free_PacketInfo to avoid a memory leak. </dd></dl>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a1358f91f28c4a023ef201e868bf1069e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1358f91f28c4a023ef201e868bf1069e">&#9670;&nbsp;</a></span>data</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* UDPC_PacketInfo::data</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A char array of size <a class="el" href="structUDPC__PacketInfo.html#a70230a2eb6a638d9e9fc04e230c92a74">dataSize</a>. Will be NULL if this <a class="el" href="structUDPC__PacketInfo.html" title="Data representing a received/sent packet.">UDPC_PacketInfo</a> is invalid. </p>
+
+</div>
+</div>
+<a id="a70230a2eb6a638d9e9fc04e230c92a74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70230a2eb6a638d9e9fc04e230c92a74">&#9670;&nbsp;</a></span>dataSize</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint16_t UDPC_PacketInfo::dataSize</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The size in bytes of the received packet's data inside the <a class="el" href="structUDPC__PacketInfo.html#a1358f91f28c4a023ef201e868bf1069e">data</a> pointer member variable. </p>
+<p>UDPC does not return an empty packet when calling <a class="el" href="UDPC_8h.html#affa8655a4e7e3475be441060e92213b3" title="Get a received packet from a given UDPC context.">UDPC_get_received()</a>, so in such a packet dataSize shouldn't be zero. (UDPC only stores received packets that do have a payload.) This means that if this variable is 0, then this <a class="el" href="structUDPC__PacketInfo.html" title="Data representing a received/sent packet.">UDPC_PacketInfo</a> is invalid. </p>
+
+</div>
+</div>
+<a id="ad538ac2682e8276dc33553237f012ce1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad538ac2682e8276dc33553237f012ce1">&#9670;&nbsp;</a></span>flags</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t UDPC_PacketInfo::flags</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags indication some additional information about the received packet. </p>
+<p>The following list indicates what each used bit in <code>flags</code> refers to.</p><ul>
+<li>0x1: Is an initiate-connection packet</li>
+<li>0x2: Is a ping packet</li>
+<li>0x4: Is a packet that will not be re-sent if not received</li>
+<li>0x8: Is a packet that was re-sent </li>
+</ul>
+
+</div>
+</div>
+<a id="ac21cc9beab22eb1e1a2d5c0797ed0fbe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac21cc9beab22eb1e1a2d5c0797ed0fbe">&#9670;&nbsp;</a></span>id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t UDPC_PacketInfo::id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The packet's id. </p>
+<p>Packets start with id = 0, and will wrap around. This can be used to determine specifically how out of order a packet may be. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>src/<a class="el" href="UDPC_8h_source.html">UDPC.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/sync_off.png b/sync_off.png
new file mode 100644 (file)
index 0000000..3b443fc
Binary files /dev/null and b/sync_off.png differ
diff --git a/sync_on.png b/sync_on.png
new file mode 100644 (file)
index 0000000..e08320f
Binary files /dev/null and b/sync_on.png differ
diff --git a/tab_a.png b/tab_a.png
new file mode 100644 (file)
index 0000000..3b725c4
Binary files /dev/null and b/tab_a.png differ
diff --git a/tab_b.png b/tab_b.png
new file mode 100644 (file)
index 0000000..e2b4a86
Binary files /dev/null and b/tab_b.png differ
diff --git a/tab_h.png b/tab_h.png
new file mode 100644 (file)
index 0000000..fd5cb70
Binary files /dev/null and b/tab_h.png differ
diff --git a/tab_s.png b/tab_s.png
new file mode 100644 (file)
index 0000000..ab478c9
Binary files /dev/null and b/tab_s.png differ
diff --git a/tabs.css b/tabs.css
new file mode 100644 (file)
index 0000000..85a0cd5
--- /dev/null
+++ b/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file
diff --git a/unionUDPC__Event_1_1Value.html b/unionUDPC__Event_1_1Value.html
new file mode 100644 (file)
index 0000000..8f11037
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>UDPConnection: UDPC_Event::Value Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">UDPConnection
+   </div>
+   <div id="projectbrief">A network connection implementation over UDP</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="structUDPC__Event.html">UDPC_Event</a></li><li class="navelem"><a class="el" href="unionUDPC__Event_1_1Value.html">Value</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">UDPC_Event::Value Union Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a174ba7a922af274d990c5557b8f00fc7"><td class="memItemLeft" align="right" valign="top"><a id="a174ba7a922af274d990c5557b8f00fc7"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>dropAllWithAddr</b></td></tr>
+<tr class="separator:a174ba7a922af274d990c5557b8f00fc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b917ebd9685800c442da05c269abbe2"><td class="memItemLeft" align="right" valign="top"><a id="a3b917ebd9685800c442da05c269abbe2"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>enableLibSodium</b></td></tr>
+<tr class="separator:a3b917ebd9685800c442da05c269abbe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li>src/<a class="el" href="UDPC_8h_source.html">UDPC.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>