Commit f2424356 authored by Zhouwenrui's avatar Zhouwenrui

no message

parents

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

This diff is collapsed.
This diff is collapsed.
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <errno.h>
#include <pthread.h>
#include <signal.h>
#include<pthread.h>
void test_time();
void send_client_current_time(int socket_cli_fd);
void receive_from_server();
void print_err(char* str, int line, int err_no);
void set_cli_sys_time();
int create_socket_and_connect(char *s);
void init_time();
void init_sigaction(void);
void prompt_info();
typedef struct
{
double sec;
double usec;
}mytime;
struct timeval start, end;
mytime start_d,end_d,temp;
int socket_fd = -1; /* client only has one socket file descript */
int port = 5050;
char server_ip[20];
void message(){
while (1)
{
sleep(3);
if(-1 == create_socket_and_connect(server_ip)){
printf("create socket with server failed\n");
//break;
}
send_client_current_time(socket_fd);
receive_from_server();/* receive then close the socket */
}
}
int main(int argc, char* argv[])
{
//init_time();
//init_sigaction();
set_cli_sys_time();
signal(SIGPIPE, SIG_IGN); /* Ignore the signal to end the program */
strcpy(server_ip,argv[1]);
printf("server IP : %s\n",argv[1]);
prompt_info();
//pthread_t id, send_id;
//pthread_create(&id, NULL, (void *)message, NULL);/* client 接收 server time 线程 */
int ttimes = 0;
while (1)
{
ttimes++;
if(ttimes == 15){prompt_info();ttimes = 0;}
sleep(1);
if(-1 == create_socket_and_connect(argv[1])){
printf("create socket with server failed\n");
break;
}
send_client_current_time(socket_fd);
receive_from_server();
/* receive then close the socket */
}
close(socket_fd);
return 0;
}
void send_client_current_time(int socket_cli_fd)
{
char sendbuf[1024] = "";
char *p = sendbuf;
char *pp = sendbuf;
gettimeofday(&start, NULL);
//printf("Client 发送过去的时间秒数是:%ld s, 毫秒数是:%ld us\n", start.tv_sec, start.tv_usec);
start_d.sec = start.tv_sec;
start_d.usec = start.tv_usec;
memcpy(p, (char *)&start_d, sizeof(start_d));
//struct timeval* ppt = (struct timeval*)pp;
int ret = send(socket_cli_fd,sendbuf, sizeof(sendbuf), 0);
if (-1 == ret) {
print_err("Cli send failed", __LINE__, errno);
}else{
//printf("Client现在的时间秒数是:%ld , %lf毫秒数是:%ld , %lf\n",start.tv_sec,start_d.sec,start.tv_usec,start_d.usec);
printf("Client 发送过去的时间秒数是:%lf s, 毫秒数是:%lf us\n", start_d.sec, start_d.usec);
}
}
void receive_from_server()
{
int ret = 0;
char recvbuf[1024] = "";
bzero(&end, sizeof(end));
ret = recv(socket_fd, recvbuf, sizeof(recvbuf), 0);
//recv(sockConn, recvbufFromSer, sizeof(recvbufFromSer),MSG_WAITALL)
if (ret < 0) {
print_err("recv failed", __LINE__, errno);
}
else {
gettimeofday(&end, NULL);
char *p = recvbuf;
mytime* pp = (mytime *)p;
printf("Server 发送过来的时间秒数是:%lf s, 毫秒数是:%lf us\n",pp->sec, pp->usec);
printf("Client 收到的时间秒数是:%ld s, 毫秒数是:%ld us\n", end.tv_sec, end.tv_usec);
//printf("Client 发送过去的时间秒数是:%ld s, 毫秒数是:%ld us\n", start.tv_sec, start.tv_usec);
//(end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec);
//double fi = (end.tv_sec - start.tv_sec) * 1000.0 + (end.tv_usec - start.tv_usec) / 1000.0;
double ff = pp->usec / 1000.0 + pp->sec * 1000.0 - start.tv_usec /1000.0 - start.tv_sec * 1000.0;/* client to server */
double end_sec = end.tv_sec;
double end_usec = end.tv_usec;
double ff_sc = end_sec * 1000.0 + end_usec/1000.0 - pp->usec / 1000.0 - pp->sec * 1000.0; /* server to client */
printf("client ----------> server : %lf ms\n", ff);
printf("server ----------> client : %lf ms\n", ff_sc);
double travel_time = end_sec * 1000.0 + end_usec/1000.0 - start.tv_usec /1000.0 - start.tv_sec * 1000.0;
printf("client ----------> server ----------> client : %lf ms\n", travel_time);
printf("************************************************************\n\n");
close(socket_fd);
}
//gettimeofday(&end, NULL);
}
int create_socket_and_connect(char *s)
{
//1 创建tcp通信socket
int value = 1;
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1)
{
perror("socket failed!\n");
}
setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&value,sizeof(value));
//2 连接服务器
struct sockaddr_in server_addr = { 0 };
server_addr.sin_family = AF_INET;//IPv4协议
server_addr.sin_port = htons(port);//服务器端口号
server_addr.sin_addr.s_addr = inet_addr(s);//inet_addr("192.168.0.3");//设置服务器IP// 127.0.0.1
int ret = connect(socket_fd, (struct sockaddr*)&server_addr, sizeof(server_addr));
if (ret == -1)
{
perror("connect failed!\n");
return -1;
}
else
{
printf("connect server successful!\n");
return 1;
}
}
void set_cli_sys_time()
{
struct timeval stime;
stime.tv_sec =1619400000;
stime.tv_usec =123;
if(settimeofday(&stime,NULL) == 0)
{
printf("********Wireless network clock synchronization system -Client V1.0********\n\n");
printf("Set cli time success\n\n");
sleep(1);
gettimeofday(&stime, NULL);
temp.sec = stime.tv_sec;
temp.usec = stime.tv_usec;
printf("Client现在的时间秒数是:%ld , %lf毫秒数是:%ld , %lf\n\n",stime.tv_sec,temp.sec,stime.tv_usec,temp.usec);
printf("Initial Client\n");
printf("Client begin time synchronize...\n");
}
}
void print_err(char* str, int line, int err_no) {
printf("%d, %s :%s\n", line, str, strerror(err_no));
_exit(-1);
}
void prompt_info()
{
char exe[100] = "";
snprintf(exe,100,"ntpdate %s",server_ip);
//printf("exe : %s\n",exe);
printf("The client starts synchronizing the server clock, synchronizing the results:\n");
system(exe);
}
void init_sigaction(void)
{
struct sigaction tact;
/*信号到了要执行的任务处理函数为prompt_info*/
tact.sa_handler = prompt_info;
tact.sa_flags = 0;
/*初始化信号集*/
sigemptyset(&tact.sa_mask);
/*建立信号处理机制*/
sigaction(SIGALRM, &tact, NULL);
}
void init_time()
{
struct itimerval value;
/*设定执行任务的时间间隔为5秒0微秒*/
value.it_value.tv_sec = 10;
value.it_value.tv_usec = 0;
/*设定初始时间计数也为2秒0微秒*/
value.it_interval = value.it_value;
/*设置计时器ITIMER_REAL*/
setitimer(ITIMER_REAL, &value, NULL);
}
void test_time()
{
gettimeofday(&start, NULL);
long int ti = (start.tv_sec * 1000000 + start.tv_usec);
printf("Client 发送过去的时间 : %ld us\n", ti);
char buf[1024] = { 0 };
memcpy(buf, &start, sizeof(start));
struct timeval* temp = (struct timeval*)buf;
ti = (temp->tv_sec * 1000000 + temp->tv_usec);
printf("time offset : %ld\n", ti);
}
NULL =
BUILT_SOURCES =
CLEANFILES =
bin_PROGRAMS = $(NTPDATE_DB)
libexec_PROGRAMS = $(NTPDATE_DL)
sbin_PROGRAMS = $(NTPDATE_DS)
EXTRA_PROGRAMS = ntpdate
AM_CFLAGS = $(CFLAGS_NTP)
AM_CFLAGS += $(NTP_HARD_CFLAGS)
AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += $(CPPFLAGS_NTP)
AM_CPPFLAGS += $(NTP_HARD_CPPFLAGS)
AM_LDFLAGS = $(LDFLAGS_NTP)
AM_LDFLAGS += $(NTP_HARD_LDFLAGS)
# LDADD might need RESLIB and ADJLIB
LDADD = version.o ../libntp/libntp.a
ntpdate_LDADD = $(LDADD) $(LDADD_LIBNTP) $(PTHREAD_LIBS) $(LIBOPTS_LDADD)
ntpdate_LDADD += $(LIBM) $(LDADD_NTP)
DISTCLEANFILES= .version version.c stamp-v
noinst_HEADERS= ntpdate.h
$(PROGRAMS): $(LDADD)
$(top_srcdir)/sntp/scm-rev:
cd ../sntp && $(MAKE) $(AM_MAKEFLAGS) check-scm-rev
version.c: $(ntpdate_OBJECTS) ../libntp/libntp.a Makefile $(top_srcdir)/sntp/scm-rev
env CSET=`cat $(top_srcdir)/sntp/scm-rev` $(top_builddir)/scripts/build/mkver ntpdate
version.o: version.c
env CCACHE_DISABLE=1 $(COMPILE) -c version.c -o version.o
include $(top_srcdir)/bincheck.mf
include $(top_srcdir)/sntp/check-libntp.mf
include $(top_srcdir)/depsver.mf
include $(top_srcdir)/includes.mf
This diff is collapsed.
README file for directory ./ntpdate of the NTP Version 4 distribution
This directory contains the sources for the ntpdate utility program. See
the README and RELNOTES files in the parent directory for directions on
how to make and install this program. The current version number of this
program is in the version.c file.
This diff is collapsed.
/*
* ntpdate.h - declarations for the ntpdate and ntptimeset programs
*/
#include "ntp_malloc.h"
extern void loadservers (char *cfgpath);
/*
* The server structure is a much simplified version of the
* peer structure, for ntpdate's use. Since we always send
* in client mode and expect to receive in server mode, this
* leaves only a very limited number of things we need to
* remember about the server.
*/
struct server {
struct server *next_server; /* next server in build list */
sockaddr_u srcadr; /* address of remote host */
u_char version; /* version to use */
u_char leap; /* leap indicator */
u_char stratum; /* stratum of remote server */
s_char precision; /* server's clock precision */
u_char trust; /* trustability of the filtered data */
u_fp rootdelay; /* distance from primary clock */
u_fp rootdisp; /* peer clock dispersion */
u_int32 refid; /* peer reference ID */
l_fp reftime; /* time of peer's last update */
u_long event_time; /* time for next timeout */
u_long last_xmit; /* time of last transmit */
u_short xmtcnt; /* number of packets transmitted */
u_short rcvcnt; /* number of packets received */
u_char reach; /* reachability, NTP_WINDOW bits */
u_short filter_nextpt; /* index into filter shift register */
s_fp filter_delay[NTP_SHIFT]; /* delay part of shift register */
l_fp filter_offset[NTP_SHIFT]; /* offset part of shift register */
s_fp filter_soffset[NTP_SHIFT]; /* offset in s_fp format, for disp */
u_fp filter_error[NTP_SHIFT]; /* error part of shift register */
l_fp org; /* peer's originate time stamp */
l_fp xmt; /* transmit time stamp */
u_fp delay; /* filter estimated delay */
u_fp dispersion; /* filter estimated dispersion */
l_fp offset; /* filter estimated clock offset */
s_fp soffset; /* fp version of above */
};
/*
* ntpdate runs everything on a simple, short timeout. It sends a
* packet and sets the timeout (by default, to a small value suitable
* for a LAN). If it receives a response it sends another request.
* If it times out it shifts zeroes into the filter and sends another
* request.
*
* The timer routine is run often (once every 1/5 second currently)
* so that time outs are done with reasonable precision.
*/
#define TIMER_HZ (5) /* 5 per second */
/*
* ntpdate will make a long adjustment using adjtime() if the times
* are close, or step the time if the times are farther apart. The
* following defines what is "close".
*/
#define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
#define NTP_MAXAGE 86400 /* one day in seconds */
/*
* When doing adjustments, ntpdate actually overadjusts (currently
* by 50%, though this may change). While this will make it take longer
* to reach a steady state condition, it will typically result in
* the clock keeping more accurate time, on average. The amount of
* overshoot is limited.
*/
#ifdef NOTNOW
#define ADJ_OVERSHOOT 1/2 /* this is hard coded */
#endif /* NOTNOW */
#define ADJ_MAXOVERSHOOT 0x10000000 /* 50 ms as a ts fraction */
/*
* Since ntpdate isn't aware of some of the things that normally get
* put in an NTP packet, we fix some values.
*/
#define NTPDATE_PRECISION (-6) /* use this precision */
#define NTPDATE_DISTANCE FP_SECOND /* distance is 1 sec */
#define NTPDATE_DISP FP_SECOND /* so is the dispersion */
#define NTPDATE_REFID (0) /* reference ID to use */
#define PEER_MAXDISP (64*FP_SECOND) /* maximum dispersion (fp 64) */
/*
* No less than 2s between requests to a server to stay within ntpd's
* default "discard minimum 1" (and 1s enforcement slop). That is
* enforced only if the nondefault limited restriction is in place, such
* as with "restrict ... limited" and "restrict ... kod limited".
*/
#define MINTIMEOUT (1 * TIMER_HZ) /* 1s min. between packets */
#define DEFTIMEOUT (2 * TIMER_HZ) /* 2s by default */
#define DEFSAMPLES 4 /* get 4 samples per server */
#define DEFPRECISION (-5) /* the precision we claim */
#define DEFMAXPERIOD 60 /* maximum time to wait */
#define DEFMINSERVERS 3 /* minimum responding servers */
#define DEFMINVALID 1 /* mimimum servers with valid time */
/*
* Define the max number of sockets we can open
*/
#define MAX_AF 2
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
ACLOCAL_AMFLAGS = -I sntp/m4 -I sntp/libevent/m4 -I sntp/libopts/m4
NULL =
# moved sntp first to get libtool and libevent built.
SUBDIRS = \
scripts \
include \
libntp \
sntp \
libparse \
ntpd \
ntpdate \
ntpdc \
ntpq \
ntpsnmpd \
parseutil \
adjtimed \
clockstuff \
kernel \
util \
tests \
$(NULL)
DISTCHECK_CONFIGURE_FLAGS = -C --with-sntp --enable-local-libevent $(NTP_DCF)
EXTRA_DIST = \
$(srcdir)/COPYRIGHT \
ChangeLog \
CommitLog \
CommitLog-4.1.0 \
NEWS \
NOTES.y2kfixes \
README.bk \
README.hackers \
README.leapsmear \
README.patches \
README.pullrequests \
README.refclocks \
README.versions \
TODO \
WHERE-TO-START \
bootstrap \
build \
config.h.in \
dot.emacs \
flock-build \
packageinfo.sh \
readme.y2kfixes \
results.y2kfixes \
\
conf \
html \
lib/isc \
libjsmn \
ports \
\
deps-ver \
\
$(NULL)
CLEANFILES =
DISTCLEANFILES = .gcc-warning
# HMS: Keep .gcc-warning first, as that way it gets printed first.
BUILT_SOURCES = \
.gcc-warning \
libtool \
html/.datecheck \
$(srcdir)/COPYRIGHT \
$(srcdir)/.checkChangeLog \
$(NULL)
.gcc-warning:
@echo "Compiling with GCC now generates lots of new warnings."
@echo " "
@echo "Don't be concerned. They're just warnings."
@echo " "
@echo "Don't send bug reports about the warnings, either."
@echo " "
@echo "Feel free to send patches that fix these warnings, though."
@echo " "
@sleep 1
@touch $@
html/.datecheck: FRC.html
cd $(srcdir)/html && \
../scripts/build/checkHtmlFileDates
libtool: $(LIBTOOL_DEPS)
./config.status --recheck
sntp/built-sources-only: FRC.sntp
@cd sntp && $(MAKE) $(AM_MAKEFLAGS) built-sources-only
$(srcdir)/COPYRIGHT: $(srcdir)/html/copyright.html
{ echo "This file is automatically generated from html/copyright.html" ; \
lynx -dump $(srcdir)/html/copyright.html ;} > COPYRIGHT.new \
&& mv -f COPYRIGHT.new $(srcdir)/COPYRIGHT
COPYRIGHT-please: $(srcdir)/COPYRIGHT
@: do-nothing action to prevent default \
This target is needed by sntp/Makefile.am on decrepit \
FreeBSD 6.x make which fails with "make COPYRIGHT" \
configured in $(srcdir) but "make ./COPYRIGHT" succeeds. \
Rather than determine our $(srcdir) from sntp/Makefile.am \
COPYRIGHT-please serves as a fixed target.
$(srcdir)/.checkChangeLog: $(srcdir)/ChangeLog $(srcdir)/scripts/build/checkChangeLog
cd $(srcdir) && \
./scripts/build/checkChangeLog
dist-hook:
@find $(distdir) -type d -name SCCS -print | xargs rm -rf
install-data-local:
@echo "Installing stand-alone HTML documentation"
@( cd $(srcdir) && \
for i in `find html -type d | grep -v SCCS` ; \
do $(INSTALL) -d $(DESTDIR)$(htmldir)/$$i ; done )
@( cd $(srcdir) && \
for i in `find html -type f | grep -v SCCS` ; \
do $(INSTALL_DATA) $$i $(DESTDIR)$(htmldir)/$$i ; done )
uninstall-local:
rm -rf $(DESTDIR)$(htmldir)/html
CommitLog: FRC.CommitLog
cd $(srcdir) \
&& $(PATH_TEST) -e CommitLog \
-a SCCS/s.ChangeSet -ot CommitLog \
|| scripts/build/genCommitLog
# HMS: The following seems to be a work-in-progress...
CVO=`$(srcdir)/sntp/libevent/build-aux/config.guess`
.buildcvo:
echo "$(CVO)" > .buildcvo
.checkcvo: .buildcvo FRC.checkcvo
@if [ "`cat .buildcvo`" != "$(CVO)" ];then \
echo "This directory was configured for `cat .buildcvo`"; \
echo "but this machine is a $(CVO)"; \
exit 1; \
fi
BHOST=`(hostname || uname -n)`
.buildhost:
echo "$(BHOST)" > .buildhost
.checkhost: .buildhost FRC.checkhost
@if [ "`cat .buildhost`" != "$(BHOST)" ];then \
echo "Built on `cat .buildhost` but this is $(BHOST)"; \
echo " "; \
fi
FRC.CommitLog FRC.checkcvo FRC.checkhost FRC.distwarn FRC.html FRC.sntp:
@: do-nothing action prevents any default
# HMS: what was I trying to do with this?
#dot.emacs: FRC.distwarn
This diff is collapsed.
This diff is collapsed.
Name of the Application: xntp
Version Number: 4.0.91
Download Size: 4541953 bytes
Downloaded from: http://www.eecis.udel.edu/~ntp/
Operating Systems Supported: many
Operating Systems Tested: unix
Testing
Dates tested (CPU clock set)
1999-12-31
2000-01-01
2000-02-29
Critical fragments of code tested with other dates by special
algorithms.
Hardware Platform: Sun Sparc
OS: Solaris 2.6
Compiler: gcc
Version: 2.8.1
Repairs: 9
No. of files Repaired: 13
Compilation of Patches Required: yes
Results Description:
1) Tested suspicious code.
2) Repaired problem code and added documentation to ntp.h.
3) Verified ntpd works on critical Y2K dates.
Comments:
1) Errors were found in improper use of tm_year within struct tm,
calculations that did not support year 2000 as a leap year
(it truly is, despite any unchanged comments remaining in
the NTP source), and some incorrect date calculations, while
not traditional Y2K errors, would break in the year 2000.
2) include/ntpd.h
Added some definitions and documentation about the right way
of doing things. Definitions used by most, if not all, of
the Y2K repairs.
Cautions:
1) Some of the Y2K repairs were to reference clock drivers that
we did not have the local hardware to test. While I believe
the changes are sound, they really need to be tested.
This includes:
refclock_arc.c
refclock_heath.c
refclock_hpgps.c
Also, parseutil/dcfd.c is another hardware dependent module that
was repaired without live testing.
Non-Y2K Problems Observed:
1) Inconsistent casts of variables containing time values may
make expansion to 64 bit integer values in a portable manner
difficult.
2) libntp/caltontp.c:
Has logic I believe will fail starting in year 2100 or so.
Left unchanged/untested as it works well beyond basic NTP 2036
limit checked by check_y2k.c.
If NTP is implemented on 64-bit machines, this should be fixed
3) ntpd/refclock_acts.c:
ACTS time format has changed somewhat since the code was written.
In particular the '*' '#' character switch no longer occurs...
only '*' is typed.
NOTE: Author (falsely) stated Y2K is NOT a leap year when it
really is.
TRUTH: ACTS will go beyond Y2K: it uses FourDigitYear % 100 values
for year so year 2000 will revert to "00".
4) ntpd/refclock_oncore.c
Some very strange logic in manipulating year values:
1122 instance->pp->year = buf[6]*256+buf[7];
Multiply by 256????
Response from PHK:
The entire protocol is binary, the year is a 16 bit quantity
which according to the manual can have the range 1998-2018.
Submit patches, bug reports, and enhancement requests via
http://bugs.ntp.org
The ntp Distribution Base Directory
This directory and its subdirectories contain the Network Time Protocol
Version 4 (NTP) distribution for Unix and Windows/NT systems. This release
may still work on VxWorks, too.
The contents of the base directory are given in this file. The contents of
subdirectories are given in the README files in each subdirectory.
A complete explanation of the configure, compile and install process, as
well as setting up an NTP subnet, is in the HTML pages in the ./html/
directory. For more information on NTP and how to get a working setup,
read WHERE-TO-START.
For Windows/NT, visit html/build/hints/winnt.html .
The base directory ./ contains the autoconfiguration files, source
directories and related stuff:
COPYRIGHT Excerpt from the HTML file ./html/copyright.html. This file
specifies copyright conditions, together with a list of
major authors and electric addresses.
INSTALL Generic installation instructions for autoconf-based programs.
Unless you really know what you are doing, you should read the
directions in the HTML pages, starting with ./html/index.html.
NEWS What's new in this release.
README This file.
README.bk Instructions for folks who use the BitKeeper-repository
version of NTP.
README.hackers Notes to folks who want to hack on the code.
TODO List of items the NTP developers are working on.
WHERE-TO-START Hints on what to read in order to get a working
configuration.
Makefile.am Automake file configuration file. Edit only if you have the
GNU automake and autoconf utilities installed.
Makefile.in Autoconf make file template for Unix.
adjtimed Directory containing the sources for the adjtime daemon
for HP/UX systems prior to HP-UX 10.0.
authstuff Directory containing sources for miscellaneous programs
to test, calibrate and certify the cryptographic
mechanisms for DES and MD5 based authentication. These
programs do not include the cryptographic routines
themselves, so are free of U.S. export restrictions.
build A script to build the distribution in A.`config.guess`
subdirectory (more or less).
clockstuff Directory containing sources for miscellaneous programs
to test certain auxiliary programs used with some kernel
configurations, together with a program to calculate
propagation delays for use with radio clocks and
national time dissemination services such as WWV/WWVH,
WWVB and CHU.
conf Directory containing a motley collection of
configuration files for various systems. For example only.
config.guess Script used to identify the machine architecture and
operating system.
config.h.in Configuration file generated automatically from
configure.in. Do not edit.
configure Script used to configure the distribution. See the HTML pages
(./html/index.html) for a complete description of the options
available.
configure.in Master configuration template. Edit only if you have the
GNU automake and autoconf utilities installed.
dot.emacs C-mode indentation rules for code "Just the way Dave likes it".
flock_build (UDel only) Build the distribution on a number of
different platforms.
html Directory containing a complete set of documentation on
building and configuring a NTP server or client. The
documentation is in the form of HTML files suitable for
browsing and contains links to additional documentation
at various web sites. If a browser is unavailable, an
ordinary text editor can be used.
include Directory containing include header files used by most
programs in the distribution.
install-sh Script to install a program, script or data file.
kernel Directory containing sources for kernel programs such as
line disciplines and STREAMS modules used with the CHU
decoder and precision PPS signals.
libntp Directory containing library source code used by most
programs in the distribution.
ntpdate Directory containing sources for a program to set the
local machine time from one or more remote machines
running NTP. Operates like rdate, but much more accurate.
ntpq Directory containing sources for a utility program to
query local and remote NTP peers for state variables and
related timekeeping information. This program conforms
to Appendix A of the NTP Version 3 Specification RFC 1305.
ntptrace Directory containing sources for a utility program that
can be used to reveal the chain of NTP peers from a
designated peer to the primary server at the root of the
timekeeping subnet.
parse Directory containing files belonging to the generic
parse reference clock driver. For reasonably simple
clocks it is possible to get away with about 3-4Kb of
code. additionally the SunOS 4.x/Solaris 5.3 streams
module for parse squats here.
patches Directory containing patches already applied to this
distribution. These are included for record and to help
in possible porting problems.
scripts Directory containing scripts to build the configuration
files in this directory and then the makefiles used in
various dependent directories. the subdirectories
monitoring and support hold various perl and shell
scripts for visualizing synchronization and daemon startup.
stamp.h.in Configuration file generated automatically from configure.in.
Do not edit.
util Directory containing sources for various utility and
testing programs.
David L. Mills (mills@udel.edu)
21 June 1998
In order to use the BitKeeper repository version of NTP you should visit
http://support.ntp.org/Main/SoftwareDevelopment
for important information.
If you want to submit patches, please see the README.hackers file.
Notes to hackers.
See README.patches for information about submitting patches.
---
Dave likes this code indented formatted in a consistent way.
The file "dot.emacs" has the emacs C-mode indentation style that Dave likes.
---
We'd like to see *all* system function declarations live in include/l_stdlib.h
and NEVER appear in the .c files.
---
This diff is collapsed.
See README.hackers for notes on coding styles.
The master copy of this information can be found at:
http://support.ntp.org/Dev/MaintainerIssues#How_to_work_on_a_bug_using_BitKe
If you are going to patch both ntp-stable and ntp-dev
please do it this way:
> cd ntp-stable
> (make and test your changes to ntp-stable first)
> (commit your changes to ntp-stable)
> cd ../ntp-dev
> bk pull ../ntp-stable (get your changes from ntp-stable)
> (resolve any problems and test your changes)
> (commit your changes to ntp-dev)
With the current release of bitkeeper it is *much* easier to move changes
from ntp-stable to ntp-dev than it is to move changes from ntp-dev to
ntp-stable.
If you make your changes in the above order and then submit them,
it will be trivial to apply your patches.
Otherwise, it will be much more difficult to apply your patches.
You are pretty much done now if your repos are on pogo.udel.edu.
If these patches are for a bugzilla issue, mark the issue as Resolved/READY
with a comment of "Please pick up the patches in pogo:/wherever"
---
Please read (and follow) the previous section if you want to submit
patches for both ntp-stable and ntp-dev.
If you cannot easily get your patches to pogo, you may submit patches
via the 'bk send' command:
> cd REPO
> bk citool (or bk ci ... ; bk commit ... )
> bk pull # make sure your repo is up-to-date
> bk send -d -ubk://www.ntp.org/home/bk/REPO - > file-containing-the-patch
> bk receive -vv -a < file-containing-the-patch
# Sanity check.
# Open a bugzilla item at <http://bugzilla.ntp.org>
# After the bug is opened, visit the bug and attach file-containing-the-patch
See README.hackers for notes on coding styles.
The NTP project's github repository is at https://github.com/ntp-project/ntp.
There are two branches, master and stable.
The stable branch is the current supported production code branch, the
ntp-stable code (even 2nd number).
The master branch is for new development, also known as ntp-dev (which
has an odd 2nd number).
If you have some work you'd like to add, then if there is any interest
in seeing that work in the current production release then base your work
on the stable branch, and pull your work into a master copy to allow for
publishing your changes in the ntp-dev or master branch.
If there is no expectation that your work will be included in the
current stable release (the ntp-stable code) then it's better to do your
work on a copy of the master branch.
Make sure that any changes you make to stable pull cleanly into master.
It's possible that after pulling your changes from stable to master that
some additional cleanup will be required in master. Please do this.
If you follow this method, then if you submit a pull request for either
master or for master+stable, it will be easy for us to evaluate and
incorporate your work.
Please also note that your submissions will be able to be evaluated and
handled sooner if the repo that contains your pull requests also includes
test cases.
The general workflow is as follows:
1) If you haven't, create a fork of ntp-project/ntp with your github account.
i) Log on to github.com with your github account.
- If you don't have one, create one first. (read: https://help.github.com/articles/signing-up-for-a-new-github-account)
- Make sure you also have a SSH key associated with your github account.
(read: https://help.github.com/articles/generating-ssh-keys/)
ii) Go to https://github.com/ntp-project/ntp
iii) On the top right corner, right below the header bar, there is
a button labeled "Fork". Click on it. This will fork the current
ntp master to your own account. Once done, it will go to your account's
version of the ntp repository. (Your fork of ntp source)
iv) Clone a local version of your fork.
- git clone git@github.com:<your_username>/ntp
2) Look through the bugs listed in the bug tracker: http://bugs.ntp.org/
3) Once you've found a bug to work on:
i) Create a branch off your own master branch of your local fork.
(the <branchname> can be any valid short string that will tell you
what you're working on)
- git checkout -b <branchname>
ii) Start working on the bug.
iii) When you create changes in the source, it would help you to
keep track of your changes by committing to your local repo.
(This way, every small change is tracked and when you've
made a mistake, you can always go back.)
- git commit -a -m "description of change"
iv) Once you are satisfied, you can push to your github account's
repository.
- git push origin <branchname>
v) (go to step iii).
4) Once you feel you've fixed the bug (and tested it), you need to
create a pull request on your branch on github. (Read up on
pull requests @ https://help.github.com/articles/using-pull-requests)
i) Create your pullrequest by following the instructions @
https://help.github.com/articles/creating-a-pull-request/
5) Your pull request will be reviewed by committers and when it
passes review, it will be merged by the reviewer/allowed committer.
6) You have fixed a bug. Goto step #2.
If these patches are for a bugzilla issue, mark the issue as Resolved/READY
with a comment of "Please pick up the patches from XXX" where XXX is
something like:
hostname:~user/path if it's a machine the reviewers have access to, or
github-pull-request-URI
---
This is a list of the #define REFCLK_* stuff.
If you want to add a new refclock let us know and we'll assign you a number.
Should this list also include the name of the party responsible for the
refclock?
LOCALCLOCK 1 /* external (e.g., lockclock) */
GPS_TRAK 2 /* TRAK 8810 GPS Receiver */
WWV_PST 3 /* PST/Traconex 1020 WWV/H */
SPECTRACOM 4 /* Spectracom (generic) Receivers */
TRUETIME 5 /* TrueTime (generic) Receivers */
IRIG_AUDIO 6 /* IRIG-B/W audio decoder */
CHU_AUDIO 7 /* CHU audio demodulator/decoder */
PARSE 8 /* generic driver (usually DCF77,GPS,MSF) */
GPS_MX4200 9 /* Magnavox MX4200 GPS */
GPS_AS2201 10 /* Austron 2201A GPS */
GPS_ARBITER 11 /* Arbiter 1088A/B/ GPS */
IRIG_TPRO 12 /* KSI/Odetics TPRO-S IRIG */
ATOM_LEITCH 13 /* Leitch CSD 5300 Master Clock */
MSF_EES 14 /* EES M201 MSF Receiver */
GPSTM_TRUE 15 /* OLD TrueTime GPS/TM-TMD Receiver */
IRIG_BANCOMM 16 /* Bancomm GPS/IRIG Interface */
GPS_DATUM 17 /* Datum Programmable Time System */
NIST_ACTS 18 /* NIST Auto Computer Time Service */
WWV_HEATH 19 /* Heath GC1000 WWV/WWVH Receiver */
GPS_NMEA 20 /* NMEA based GPS clock */
GPS_VME 21 /* TrueTime GPS-VME Interface */
ATOM_PPS 22 /* 1-PPS Clock Discipline */
PTB_ACTS NIST_ACTS
USNO NIST_ACTS
GPS_HP 26 /* HP 58503A Time/Frequency Receiver */
ARCRON_MSF 27 /* ARCRON MSF radio clock. */
SHM 28 /* clock attached thru shared memory */
PALISADE 29 /* Trimble Navigation Palisade GPS */
ONCORE 30 /* Motorola UT Oncore GPS */
GPS_JUPITER 31 /* Rockwell Jupiter GPS receiver */
CHRONOLOG 32 /* Chrono-log K WWVB receiver */
DUMBCLOCK 33 /* Dumb localtime clock */
ULINK 34 /* Ultralink M320 WWVB receiver */
PCF 35 /* Conrad parallel port radio clock */
WWV_AUDIO 36 /* WWV/H audio demodulator/decoder */
FG 37 /* Forum Graphic GPS */
HOPF_SERIAL 38 /* hopf DCF77/GPS serial line receiver */
HOPF_PCI 39 /* hopf DCF77/GPS PCI receiver */
JJY 40 /* JJY receiver */
TT560 41 /* TrueTime 560 IRIG-B decoder */
ZYFER 42 /* Zyfer GPStarplus receiver */
RIPENCC 43 /* RIPE NCC Trimble driver */
??????? 44 Claas Hilbrecht (20020711)
NTP uses A.B.C - style release numbers.
At the moment:
A is 4, for ntp V4.
B is the major release number.
C is the minor release number. Even numbers are 'stable' releases and
odd numbers are "development" releases.
Following the release number may be the letter 'p' followed by a number.
This indicates a point (or patch) release.
Release candidates have -RC in the release number.
Here are some recent versions numbers as an example:
4.2.2 A production release (from the ntp-stable repository)
4.2.2p2 A production release (from the ntp-stable repository)
4.2.3p12 A development release
4.2.3p15-rc1 A release candidate for 4.2.4
Note that after the ntp-dev repo produces a production release it will
be copied into the ntp-stable and the cycle will repeat.
Feel free to suggest improvements...
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
saveconfigdir "/etc/ntp/conf"
driftfile "/etc/ntp.drift"
logfile "/var/log/ntp.log"
leapfile "/etc/ntp.leapseconds" ignorehash
leapfile "/etc/ntp.leapseconds" checkhash
@HAVE_LEAPSMEARINTERVAL@
nonvolatile 1e-7
ident "udent"
dscp 46
logconfig =allall -allinfo -allevents -allstatistics -allstatus +allall -clockinfo -clockevents -clockstatistics -clockstatus +clockall -syncinfo -syncevents -syncstatistics -syncstatus +syncall -sysinfo -sysevents -sysstatistics -sysstatus +sysall
statsdir "/etc/ntp/stats"
statistics clockstats cryptostats loopstats peerstats protostats rawstats sysstats timingstats
filegen clockstats file clockstats type none enable
filegen cryptostats file cryptostats type pid link disable
filegen loopstats file loopstats type day nolink enable
filegen peerstats file peerstats type week enable
filegen protostats file stats type month enable
filegen rawstats file rawstats type year nolink enable
filegen sysstats file sysstats type age enable
filegen timingstats file timingstats type none disable
crypto digest md5 host myhostname ident wedent pw cryptopass randfile /.rnd
revoke 10
keysdir "/etc/ntp/keys"
keys "/etc/ntp.keys"
trustedkey 1 2 3 4 5 6 7 8 9 10 11 12 (14 ... 16) 18 (32768 ... 65535)
controlkey 12
requestkey 12
enable auth ntp monitor stats
disable bclient calibrate kernel mode7 peer_clear_digest_early unpeer_crypto_early unpeer_crypto_nak_early unpeer_digest_early
tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 orphan 16 orphanwait 300 bcpollbstep 3
rlimit@HAVE_RLIMIT_MEMLOCK@@HAVE_RLIMIT_STACK@
tinker allan 1500 dispersion 15 freq 0 huffpuff 7200 panic 1000 step 0.128 stepout 900 tick 0.01
broadcastclient
server 127.127.1.0 mode 4294967295 prefer true
fudge 127.127.1.0 time1 0 time2 1.1 stratum 7 refid Abcd minjitter 0.2
pool 0.north-america.pool.ntp.org. iburst preempt
server 1.north-america.pool.ntp.org. iburst
server -4 2.north-america.pool.ntp.org. minpoll 6 maxpoll 10 iburst
server -6 ntp.davehart.net. minpoll 6 maxpoll 10 version 5 burst iburst
peer -6 davehart.broker.freenet6.net. ident "autokey-group" xleave autokey
peer -4 192.168.192.168 key 1 noselect
server [fe80::123%1] xmtnonce
broadcast 192.168.192.255
manycastclient 224.0.1.1
manycastclient ff05::101
manycastserver 224.0.1.1 ff05::101
multicastclient 224.0.1.1 ff05::101
mru maxage 64 mindepth 600 initalloc 600 initmem 16 incalloc 99 incmem 4 maxdepth 1024 maxmem 4096
discard minimum 1 average 3 monitor 3000
pollskewlist 3 1|2 4 3|4 default 6|7
restrict default ippeerlimit -1
restrict default ippeerlimit 0 nomodify limited kod noserve nomrulist
restrict source ippeerlimit 1
restrict source ippeerlimit 2 nomodify limited kod
restrict trusted.host.name.example.com. ippeerlimit -1 nomodify
restrict [fe80::1] mask [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff] ippeerlimit -1
restrict 127.0.0.1 mask 255.255.255.255 ippeerlimit -1
restrict 127.0.0.2 ippeerlimit -1 serverresponse fuzz
restrict ::1 ippeerlimit -1
interface drop ipv6
interface ignore ipv4
interface drop wildcard
interface listen eth0
interface listen ipv6
interface listen 192.168.192.0/24
interface listen 192.168.193.1
phone "ATDT13034944774" "ATDT12027621594"
setvar varnondef = "this variable does not have default after the value"
setvar vanity = "name plate" default
trap 127.0.0.1 interface 127.0.0.1 port 1234
trap 127.0.0.2
reset allpeers auth ctl io mem sys timer
/*
* declcond.h - declarations conditionalized for ntpd
*
* The NTP reference implementation distribution includes two distinct
* declcond.h files, one in ntpd/ used only by ntpd, and another in
* include/ used by libntp and utilities. This relies on the source
* file's directory being ahead of include/ in the include search.
*
* The ntpd variant of declcond.h declares "debug" only #ifdef DEBUG,
* as the --disable-debugging version of ntpd should not reference
* "debug". The libntp and utilities variant always declares debug,
* as it is used in those codebases even without DEBUG defined.
*/
#ifndef DECLCOND_H
#define DECLCOND_H
#ifdef DEBUG /* uncommented in ntpd/declcond.h */
extern int debug;
#endif /* uncommented in ntpd/declcond.h */
#endif /* DECLCOND_H */
* ntp.conf Notes:: Notes about ntp.conf
This diff is collapsed.
* ntp.keys Notes:: Notes about ntp.keys
This diff is collapsed.
* ntpd Invocation:: Invoking ntpd
This diff is collapsed.
This diff is collapsed.
* Generated 2020-02-13 08:56:28 UTC diff_ignore_line
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
pollskewlist 3 3|3 4 4|4 default 5|5
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment